zoukankan      html  css  js  c++  java
  • mybatis---demo1--(n-n)----bai

    实体类1:
    
    package com.etc.entity;
    
    import java.util.List;
    
    public class RoleInfo {
    	private int rid;
    	private String rname;
    	private List<UserInfo> userInfos;
    	public int getRid() {
    		return rid;
    	}
    	public void setRid(int rid) {
    		this.rid = rid;
    	}
    	public String getRname() {
    		return rname;
    	}
    	public void setRname(String rname) {
    		this.rname = rname;
    	}
    	public List<UserInfo> getUserInfos() {
    		return userInfos;
    	}
    	@Override
    	public String toString() {
    		return "RoleInfo [rid=" + rid + ", rname=" + rname + "]";
    	}
    	public void setUserInfos(List<UserInfo> userInfos) {
    		this.userInfos = userInfos;
    	}	
    }
      
    实体类2:
    
    package com.etc.entity;
    
    import java.util.List;
    
    public class UserInfo 
    {
    	private int uid;
    	private String uname;
    	private String upassword;
    	private List<RoleInfo> roleInfos;
    	@Override
    	public String toString() {
    		return "UserInfo [uid=" + uid + ", uname=" + uname + ", upassword="
    				+ upassword + "]";
    	}
    	public int getUid() {
    		return uid;
    	}
    	public void setUid(int uid) {
    		this.uid = uid;
    	}
    	public String getUname() {
    		return uname;
    	}
    	public void setUname(String uname) {
    		this.uname = uname;
    	}
    	public String getUpassword() {
    		return upassword;
    	}
    	public void setUpassword(String upassword) {
    		this.upassword = upassword;
    	}
    	public List<RoleInfo> getRoleInfos() {
    		return roleInfos;
    	}
    	public void setRoleInfos(List<RoleInfo> roleInfos) {
    		this.roleInfos = roleInfos;
    	}
    	
    }
    ===============================================================
    dao类1:
     
    package com.etc.dao;
    
    import java.util.List;
    
    import com.etc.entity.RoleInfo;
    import com.etc.entity.UserInfo;
    
    public interface RoleInfoDao {
    	RoleInfo findById(int id);
    	List<RoleInfo> findByUser(UserInfo user); //根据用户名查找所有的角色
    	void deleteByUser(UserInfo user);//删除指定用户名的所有的角色
    }
    
    dao类2:
    
    package com.etc.dao;
    
    
    import java.util.List;
    
    import com.etc.entity.RoleInfo;
    import com.etc.entity.UserInfo;
    
    public interface UserInfoDao {
    	UserInfo findById(int id);
    	
    	
    }
    
    
    ===================================================================================================
    用到的工具类:
    
    package com.etc.utils;
    
    import java.io.InputStream;
    import java.sql.Connection;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.apache.log4j.lf5.util.Resource;
    
    //实现获取、释放mybatis数据库连接的工具类
    public class MyBatisSessionFactory {
    	//定义常量
    	private static String CONFIG_FILE_LOCATION="mybatis-config.xml";
    	
    	//考虑到该工具类允许被多线程执行。因为封装1个线程池,让每个线程从线程池中获取1个连接。让1个线程对应
    	//1条数据库连接,这样更安全
    	//ThreadLocal的作用:让"线程"绑定"资源",这样就不会出现多个线程同享资源的情况。更安全。牺牲内存,换取”安全“
    	private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
    	
    	private static InputStream is; //用于读取配置文件的流对象
    	
    	private static SqlSessionFactory fac;//用于管理多个连接的工厂。一个工厂对应1个数据库。
    	
    	//在该类的静态段中加载配置文件,这样可以确保只执行1次。
    	static
    	{
    		try {
    			is = Resources.getResourceAsStream(CONFIG_FILE_LOCATION);//读取配置文件
    			fac = new SqlSessionFactoryBuilder().build(is);//通过配置文件创建1个连接工厂
    		} catch (Exception e) 
    		{
    			e.printStackTrace();
    		}
    		
    	}
    	//获取1条连接
    	public static SqlSession getSession()
    	{
    		SqlSession s  = threadLocal.get(); //找线程池要1条连接
    		if(s==null) //第1次时,拿不到,则由工厂获取1条连接并放入线程池
    		{
    			s = fac.openSession();//由工厂获取1条连接并放入线程池
    			threadLocal.set(s);//放入线程池
    		}
    		return s;
    	}
    	
    	//关闭连接
    	public static void closeSession()
    	{
    		SqlSession s  = threadLocal.get();//找线程池要本线程对应的连接
    		threadLocal.set(null);//将该连接从线程池中清除
    		if(s!=null)
    			s.close();//物理关闭连接
    	}
    }
    
    ===============================================================================================
    mybatis-config.xml   配置:
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration> <!-- 布局(配置) -->
    <typeAliases><!-- 类型别名 -->
    	<typeAlias type="com.etc.entity.RoleInfo" alias="RoleInfo"/>
    	<typeAlias type="com.etc.entity.UserInfo" alias="UserInfo"/>
    </typeAliases>
    <environments default="development"> <!-- 默认开发者模式 -->
    <environment id="development">
       <transactionManager type="JDBC"/>  <!-- 事务管理器 -->
       <dataSource type="POOLED">	 <!-- 数据源--> 
      	<property name="url" value="jdbc:mysql://127.0.0.1/java?characterEncoding=utf-8"/>
      	<property name="username" value="root"/>
      	<property name="password" value="root"/>
      	<property name="driver" value="com.mysql.jdbc.Driver"/>
      </dataSource>
    </environment>
    </environments>
    <mappers><!-- 映射器 -->
      	<mapper resource="com/etc/mapper/Role-mapper.xml"/>
      	<mapper resource="com/etc/mapper/User-mapper.xml"/>
    </mappers>
    </configuration>
    =======================================================================================================
    Role-mapper.xml   配置:
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.etc.dao.RoleInfoDao">
    	<resultMap type="RoleInfo" id="Role">
    		<id column="rid" property="rid" />
    		<result column="rname" property="rname" />
    	</resultMap>
    	<resultMap type="RoleInfo" id="RoleInfoMap" extends="Role">		
    		<collection property="userInfos" resultMap="com.etc.dao.UserInfoDao.User"/>				
    	</resultMap>
    	<!--根据角色编号,查找角色,必须查到关联的所有用户 -->
    	<select id="findById" parameterType="java.lang.Integer"
    		resultMap="RoleInfoMap">
    		select r.*,u.uid,u.uname,u.upassword from roleinfo r
    		join r_user_role rur on r.rid = rur.rid
    		join userinfo u on rur.uid = u.uid
    		where r.rid=#{id}		
    	</select>
    	<!-- 根据给定的用户名称,查找所有的角色信息 -->
    	<select id="findByUser" parameterType="UserInfo"
    	resultMap="RoleInfoMap">
    		select r.*,u.uid,u.uname,u.upassword from roleinfo r
    		join r_user_role rur on r.rid = rur.rid
    		join userinfo u on rur.uid = u.uid
    		<if test="uname!=null">
    			where u.uname=#{uname}
    		</if>
    	</select>
    	<delete id="deleteByUser" parameterType="UserInfo">
    	delete from r_user_role 
    	where uid in
    	(
      	select uid from userinfo where uname=#{uname}
    	)  	
    	</delete>
    </mapper>
    ===============================================================================================================
    User-mapper.xml   配置:
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.etc.dao.UserInfoDao">
    	<resultMap type="UserInfo" id="User">
    		<id column="uid" property="uid"/>
    		<result column="uname" property="uname"/>
    		<result column="upassword" property="upassword"/>	
    	</resultMap>	
    	<resultMap type="UserInfo" id="UserInfoMap" extends="User">
    		<collection property="roleInfos" resultMap="Role"/>				
    	</resultMap>	
    	<!--根据角色编号,查找角色,必须查到关联的所有用户 -->
    	<select id="findById" parameterType="java.lang.Integer" resultMap="UserInfoMap">
    	select u.*,r.rid,r.rname from userinfo u 
    	join r_user_role rur on u.uid = rur.uid
    	join roleinfo r on rur.rid = r.rid 
    	where u.uid=#{id}		
    	</select>	
    </mapper>
    =======================================================================================================================
    

      

  • 相关阅读:
    python
    【转载】【CPU】关于x86、x86_64/x64、amd64和arm64/aarch64
    【百思不得其解1】诡异的速度差异
    LeakCanary 与 鹅场Matrix ResourceCanary对比分析
    android 插件化框架VitualAPK
    android高级篇收录
    滴滴Booster移动APP质量优化框架 学习之旅 三
    滴滴Booster移动APP质量优化框架 学习之旅 二
    滴滴Booster移动APP质量优化框架 学习之旅
    不一样视角的Glide剖析
  • 原文地址:https://www.cnblogs.com/ipetergo/p/6279182.html
Copyright © 2011-2022 走看看