如何使用MyBatis实现数据库表中一对一、多对一、多对多、一对多连表查询?

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());
	    	    }
	      }
	         
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟空非空也

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值