UserMapper.java
<!-- 一对一 或者多对一 使用asociation -->
<!-- 根据用户角色id获取用户列表(一个用户对应一个角色,比如一个员工对应一个职位角色)-->
<resultMap type="User" id="userRoleResult">
<!-- type="User": 对应的就是父标签里的property -->
<!-- 一般对应数据库中该行的主键id,设置此项可提高MyBatis性能-->
<id property="id" column="id"/>
<!-- property:对应的是实体类里的属性 column:对应的是数据库的字段 -->
<result property="userCode" column="userCode"/>
<result property="userName" column="userName"/>
<result property="userRole" column="userRole"/>
<!-- property="role":对应的就是User类里面复杂类型的属性 ,是一个javaBean javaType: 对应的是复杂类型属性的类型-->
<association property="role" javaType="Role">
<id property="id" column="r_id"/>
<result property="roleCode" column="roleCode"/>
<result property="roleName" column="roleName"/>
</association>
</resultMap>
<!-- 根据用户角色id获取用户列表-->
<select id="getUserListByRoleId" parameterType="Integer" resultMap="userRoleResult">
select u.*,r.id as r_id,r.roleCode,r.roleName
from smbms_user u,smbms_role r
where u.userRole=#{userRole}
and u.userRole=r.id
</select>
<!-- 第二种写法 --><!-- 根据用户角色id获取用户列表-->
<!-- <resultMap type="User" id="userRoleResult">
<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="aa"></association>
</resultMap>
<resultMap type="Role" id="aa">
<id property="id" column="r_id"/>
<result property="roleCode" column="roleCode"/>
<result property="roleName" column="roleName"/>
</resultMap> -->
<!--一对多或者多对多:获取指定用户的地址列表 -->
<resultMap type="User" id="userAddressResult">
<id property="id" column="id"/>
<result property="userCode" column="userCode"/>
<result property="userName" column="userName"/>
<collection property="addressList" ofType="Address">
<id property="id" column="a_id"/>
<result property="contact" column="contact"/>
<result property="addressDesc" column="addressDesc"/>
<result property="postCode" column="postCode"/>
<result property="tel" column="tel"/>
</collection>
</resultMap>
<!--获取指定用户的地址列表 -->
<select id="getAddressListByUserId" parameterType="Integer" resultMap="userAddressResult">
select u.*,a.id as a_id,a.contact,a.addressDesc,a.postCode,a.tel
from smbms_user u,smbms_address a
where u.id=a.userId
and u.id=#{id}
</select>
UserMapper.java
//根据roleid获取用户列表
public List<User> getUserListByRoleId(@Param("userRole")Integer roleId);
//获取指定用户的地址列表
public List<User> getAddressListByUserId(@Param("id")Integer userId);
User.java
//association
private Role role;
//collection
private List<Address> addressList; //用户的地址列表
MapperTest.java
@Test
public void test13() {
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 e){
e.printStackTrace();
}finally{
MyBatisUtil.closeSqlSession(sqlSession);
}
//System.out.println();
logger.debug(userList.size());
for(User user :userList){
logger.debug(user.getUserName()+"---"+user.getRole().getId()+"---"+user.getRole().getRoleCode()+"_____"+user.getRole().getRoleName());
}
}
@Test
public void test14() {
SqlSession sqlSession=null;
List<User> userList=new ArrayList<User>();
Integer userId=1;
try{
sqlSession=MyBatisUtil.createSqlSession();
userList=sqlSession.getMapper(UserMapper.class).getAddressListByUserId(userId);
}catch(Exception e){
e.printStackTrace();
}finally{
MyBatisUtil.closeSqlSession(sqlSession);
}
for(User user : userList){
logger.debug(user.getUserCode()+"----"+user.getUserName());
for(Address address: user.getAddressList()){
logger.debug(address.getId()+"======"+address.getContact()+"==="+address.getAddressDesc()+"======"+address.getTel());
}
}
}