对应的User类和Role类
public class User implements Serializable {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
private List<Role> roles;
}
public class Role implements Serializable {
private Integer roleId;
private String roleName;
private String roleDesc;
private List<User> users;
}
Dao
public interface IUserDao {
/**
* 查询所有用户
* @return
*/
public List<User> findAll();
}
public interface IRoleDao {
List<User> findAll();
}
IUserDao.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="cn.qut.dao.IUserDao">
<!-- type 属性:指定实体类的全限定类名,id 属性:给定一个唯一标识,是给查询 select 标签引用用的 -->
<!-- id 标签:用于指定主键字段-->
<!-- result 标签:用于指定非主键字段 -->
<!-- column 属性:用于指定数据库列名-->
<!-- property 属性:用于指定实体类属性名称-->
<resultMap id="userMap" type="cn.qut.enities.User">
<id property="id" column="id"></id>
<result property="username" column="username"></result>
<result property="address" column="address"></result>
<result property="sex" column="sex"></result>
<result property="birthday" column="birthday"></result>
<collection property="roles" ofType="cn.qut.enities.Role">
<id property="roleId" column="rid"></id>
<result property="roleName" column="ROLE_NAME"></result>
<result property="roleDesc" column="ROLE_DESC"></result>
</collection>
</resultMap>
<!-- 配置查询所有操作 -->
<select id="findAll" resultMap="userMap">
SELECT u.*,r.ID as rid ,r.ROLE_NAME,r.ROLE_DESC from `user` u
LEFT OUTER JOIN user_role ur on u.id=ur.UID
LEFT OUTER JOIN role r on r.ID=ur.RID
</select>
</mapper>
测试类
/**
*测试findAll()方法
*/
@Test
public void findAllTest(){
List<User> userList = userDao.findAll();
for (User user:userList
) {
System.out.println(user.toString());
System.out.println(user.getRoles());
}
}
从Role查询User就不演示了,原理是一样的