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>
=======================================================================================================================

  

原文地址:https://www.cnblogs.com/ipetergo/p/6279182.html