mybatis collection

今天在CSDN上看到一個同學在問一個mybatis的問題,所以就模擬了一下,幫助其解決問題。

同學的問題:

    數據庫語句:   select  a.task , b.productName  from a , b  where a.id = b.id ;  
 在b中 一個id 可能有多個productName ,
所以 在結果的實體類task中,有字段爲List<String> products  

mapper.xml 中:
<resultMap type="task">
<collection property="products" column="productName"  
javaType="java.util.ArrayList" ofType="String">
</collection>
</resultMap>


解決方法:

1.按照他的問題,我採用postgresql首先創建了兩個表:

CREATE TABLE a
(
  id serial NOT NULL,
  task character varying(100)
)

CREATE TABLE b
(
  id integer,
  productname character varying(100)
)

注意:表a和表b的關係是:a中的一條記錄可以對應多條b中記錄

2.向表中插入幾條數據

  insert into a(task) values('task1');//假設id爲1

  insert into a(task) values('task2');//假設id爲2

 

  insert into b(id,productname) values(1,'product1');

  insert into b(id,productname) values(1,'product2');

  insert into b(id,productname) values(2,'product3');

3.編寫sqlMap

  <resultMap type="com.card.transaction.payment.pojo.sql.Tempab" id="selectab">
      <result property="task" column="task"/>
      <collection property="list" column="productname" ofType="java.lang.String">

         <!--這一個很重要,如果不配置的話,拿不到productname的值,有興趣的話可以試一試 -->
         <result column="productname"/>
      </collection>
   </resultMap>
   
   <select id="selectTM" resultMap="selectab">
      select task,productname from a,b where a.id=b.id
   </select>

4.運行結果:

  ---task-----task1

  task:task1 produce:product2
  task:task1 produce:product1
  ---task-----task2
  task:task2 produce:product3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章