修改User类,添加角色属性(Role)
public class User { private Integer id;//id private String userCode;//用户编码 private String userName;//用户名称 private String userPassword;//用户密码 private Integer gender;//性别 private Date birthday;//出生日期 private String phone; //电话 private String address;//地址 private Integer userRole;//用户角色 private Integer createdBy;//创建者 private Date creationDate;//创建时间 private Integer modifyBy;//更新者 private Date modifyDate;//更新时间 //private String userRoleName;//用户角色名称 private Role role; //省略getter&setter方法 }在UserMapper接口中添加方法
public List<User> getUserListByRoleId(@Param("userRole")Integer roleId);修改UserMapper.xml
<resultMap type="User"> <id property="id" column="id"/> <result property="userCode" column="userCode"/> <result property="userName" column="userName"/> <result property="userRole" column="userRole"/> <association property="role" javaType="Role"> <id property="id" column="r_id"/> <result property="roleCode" column="roleCode"/> <result property="roleName" column="roleName"/> </association> </resultMap> <select parameterType="Integer" resultMap="userRoleResult"> SELECT u.*,r.id AS r_id,r.roleCode,r.roleName FROM user u,role r WHERE u.userRole=#{userRole} and u.userRole=r.id </select>如果我们每次都要查询关联数据的话,每次都要写association这个节点,比较麻烦,我们可以用resultMap 复用配置
<resultMap type="Role"> <id property="id" column="r_id"/> <result property="roleCode" column="roleCode"/> <result property="roleName" column="roleName"/> </resultMap> <resultMap type="User"> <id property="id" column="id"/> <result property="userCode" column="userCode"/> <result property="userName" column="userName"/> <result property="userRole" column="userRole"/> <association property="role" javaType="Role" resultMap="roleResult"/> </resultMap>编写测试类:
public void getUserListByRoleIdTest(){ SqlSession sqlSession=null; List<User> userList=new ArrayList<User>(); Integer roleId=3; try{ sqlSession=MyBatisUtil.createSqlSession(); userList=sqlSession.getMapper(UserMapper.class).getUserListByRoleId(roleid); }catch (Exception ex){ ex.printStackTrace(); }finally { MyBatisUtil.closeSqlSession(sqlSession); } for(User user:userList){ System.out.print("userList--->userName:"+user.getUserName() +",Role:"+user.getRole.getId() +"----"+user.getRole.getRoleCode() +"----"+user.getRole().getRoleName()); } }collection:collection元素的作用和association元素的作用差不多,事实上他们非常类似,也是映射到JavaBean的某个“复杂类型”属性,只不过这个属性是一个集合列表即JavaBean内部嵌套一个复杂数据类型(集合)属性,和使用association元素一样,我们使用嵌套查询,或者从连接中嵌套结果集
collection处理的是 一对多的关联 在这里我们还是用用户举例 我们每个用户有很多地址,就像我们淘宝购物一样有不同的地址,所以说我们和地址是一对多的关系
创建Address类(地址)
public class Address { private Integer id; private String contact; private String addressDesc; private String postCode; private String tel; private Integer createdBy; private Date creationDate; private Integer modifyBy; private Date modifyDate; private Integer userId; //省略getter和setter }修改User类添加地址属性
public class User { private Integer id;//id private String userCode;//用户编码 private String userName;//用户名称 private String userPassword;//用户密码 private Integer gender;//性别 private Date birthday;//出生日期 private String phone; //电话 private String address;//地址 private Integer userRole;//用户角色 private Integer createdBy;//创建者 private Date creationDate;//创建时间 private Integer modifyBy;//更新者 private Date modifyDate;//更新时间 //private String userRoleName;//用户角色名称 private Role role; private List<Address> addressList();//用户地址列表 //省略getter&setter方法 }编写接口中的方法
public List<User> getAddressListByUserId(@Param("id")Integer userId);编写映射文件
<resultMap type="Address"> <id column="a_id" property="id"/> <result property="postCode" column="postCode"/> <result property="tel" column="tel"/> <result property="contact" column="contact"/> <result property="addressDesc" column="addressDesc"/> </resultMap> <resultMap type="User"> <id property="id" column="id"/> <result property="userCode" column="userCode"/> <result property="userName" column="userName"/> <collection property="addressList" ofType="Address" resultMap="addressResult"/> </resultMap> <select parameterType="Integer" resultMap="userAddressResult"> select u.*,a.id as a_id,a.contact,a.addressDesc,a.postCode,a.tel from smbms_user u LEET JOIN smbms_address a ON u.id=a.userId where u.id=#{id} </select>