今天在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