mybatis一对多查询配置

mybatis关联查询(1—N)

http://blog.csdn.net/vpivot/article/details/11965965

1,数据表说明

           Prodectorder_Imei_Conf (表)  ——》ProdectorderImeiConf(实体类)                    

           Prodectorder_Imei_Conf_Info(表) ——》ProdectorderImeiConfInfo(实体类)

 

          Prodectorder_Imei_Conf 和Prodectorder_Imei_Conf_Info 是 一对多的关系

          Prodectorder_Imei_Conf_Info中conf_id是外键,对应Prodectorder_Imei_Conf的id

 

2,实体类大概这样写了

 1——N :在1的地方配置包含N的集合 

 

  1. public class ProdectorderImeiConf {  
  2.     private String id;  
  3.   
  4.     private String productorderNo;  
  5.   
  6.     private Integer onceImeiCount;  
  7.   
  8.     private Integer imeiStrategy;  
  9.   
  10.     private String printSn;  
  11.   
  12.     private Date updatetime;  
  13.   
  14.     private String username;  
  15.   
  16.     private String userbh;  
  17.   
  18.     private String isdel;  
  19.   
  20.     private String mark;  
  21.       
  22.     private List<ProdectorderImeiConfInfo> infoList;  //这个才是重要的  
  23.   
  24.     //省略get,set  
  25. }  

 

  1. public class ProdectorderImeiConfInfo {  
  2.     private String id;  
  3.   
  4.     private String imeiNo;  
  5.   
  6.     private String confId;  
  7.   
  8.     private String imeiStartNo;  
  9.   
  10.     private String imeiEndNo;  
  11.   
  12.     private String imeiLastNo;  
  13.   
  14.     private String imeiIncrement;  
  15.   
  16.     private String imeiTac;  
  17.   
  18.     private String imeiFac;  
  19.   
  20.     private String imeiSnr;  
  21.   
  22.     private Integer imeiSp;  
  23.   
  24.     private String state;  
  25.   
  26.     //省略get,set  
  27. }  

 

3,重头戏在这边,映射文件的配置

首先呢,因为此处主要查1,关联带出n,所以,先要来这么一段(注意这个里面先只是基本数据映射,所以先没有infoList属性的映射关系)

  1. <resultMap id="BaseResultMap" type="com.model.imei.ProdectorderImeiConf">  
  2.     <id column="id" jdbcType="VARCHAR" property="id" />  
  3.     <result column="productorder_no" jdbcType="VARCHAR" property="productorderNo" />  
  4.     <result column="once_imei_count" jdbcType="INTEGER" property="onceImeiCount" />  
  5.     <result column="imei_strategy" jdbcType="INTEGER" property="imeiStrategy" />  
  6.     <result column="print_sn" jdbcType="CHAR" property="printSn" />  
  7.     <result column="updatetime" jdbcType="DATE" property="updatetime" />  
  8.     <result column="username" jdbcType="VARCHAR" property="username" />  
  9.     <result column="userbh" jdbcType="VARCHAR" property="userbh" />  
  10.     <result column="isdel" jdbcType="CHAR" property="isdel" />  
  11.     <result column="mark" jdbcType="VARCHAR" property="mark" />  
  12. </resultMap>  

其次呢,关联查询n,所以要配置n的结果映射关系,再来下面这么一段

  1. <resultMap id="relationResult" type="com.model.imei.ProdectorderImeiConfInfo">  
  2.     <id column="id" jdbcType="VARCHAR" property="id" />  
  3.     <result column="imei_no" jdbcType="CHAR" property="imeiNo" />  
  4.     <result column="conf_id" jdbcType="VARCHAR" property="confId" />  
  5.     <result column="imei_start_no" jdbcType="VARCHAR" property="imeiStartNo" />  
  6.     <result column="imei_end_no" jdbcType="VARCHAR" property="imeiEndNo" />  
  7.     <result column="imei_last_no" jdbcType="VARCHAR" property="imeiLastNo" />  
  8.     <result column="imei_increment" jdbcType="VARCHAR" property="imeiIncrement" />  
  9.     <result column="imei_tac" jdbcType="VARCHAR" property="imeiTac" />  
  10.     <result column="imei_fac" jdbcType="VARCHAR" property="imeiFac" />  
  11.     <result column="imei_snr" jdbcType="VARCHAR" property="imeiSnr" />  
  12.     <result column="imei_sp" jdbcType="INTEGER" property="imeiSp" />  
  13.     <result column="state" jdbcType="CHAR" property="state" />  
  14.   </resultMap>  

再怎么样呢?把这两种结合起来呗,那就得来这么一段,揉啊搓啊,搞到一起(解释一下就是:搞了一个新数据类型,先继承1的数据类型,此时就有了1的功能了,但是这会儿你得想起来这1里面还有个包含了n的infoList属性吧。对了,这地方就给他扩展了,此属性用的是一个<collection>标签,property不用说了,column要注意,这个需要和后面的select看齐,既然是关联查询,那子查询肯定有一个条件是需要从主数据得到的。那这个column就是,我需要把那一列当做条件传给子查询当做条件。)

  1. <resultMap id="myBaseResultMap" extends="BaseResultMap"   
  2.             type="com.model.imei.ProdectorderImeiConf">  
  3.     <collection property="infoList" column="id"  
  4.     ofType="com.model.imei.ProdectorderImeiConfInfo" select="getInfiList"/>  
  5. </resultMap>  

看看这个getInfiList查询配置就明白了(这个不用解释吧,在此处就是,根据主配置主键查找子配置信息,返回是子配置信息的集合)

  1. <select id="getInfiList" resultMap="relationResult"  
  2.                     parameterType="java.lang.String">  
  3.   select id, imei_no, conf_id, imei_start_no, imei_end_no,  
  4.   imei_last_no, imei_increment, imei_tac,   
  5.   imei_fac, imei_snr, imei_sp, state from prodectorder_imei_conf_info  
  6.   where conf_id=#{id}  
  7. </select>  

 

最最后,最终的查询配置就出来了

  1. <select id="selectByPrimaryOrderNo" parameterType="java.lang.String"  
  2.     resultMap="myBaseResultMap">  
  3.     select   
  4.     <include refid="Base_Column_List" />  
  5.     from prodectorder_imei_conf  
  6.     where productorder_no = #{orderNo,jdbcType=VARCHAR}  
  7. </select>  

 

  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓