mybatis <collection>标签 类型为string时无法获取重复数据错误
1.场景:
fyq_share_house 表 和 fyq_sh_tag 表 两张表是一对多的关系, 一个楼盘对应多个标签,在实体类ShareHouse中使用
/**
* 楼盘标签
*/
private List<String> tags ;
来存放多个tag标签.
MyBatis对应的xml配置文件表示为
<collection property="tags" ofType="string">
<constructor>
<arg column="content"/>
</constructor>
</collection>
通过string 的构造函数来接收数据库查找的值,
但是这样有一个缺点,就是重复的数据无法获取到.
2.原因(自己通过看别人博客总结,没有看过源码,如果有不正确的地方,还请大佬指出)
mybatis在查找数据的时候是通过主键来区分不同的数据,通过sql查找的数据结果为

前面的id都是相同的,所以MyBatis会合并相同的content数据. 参考:https://blog.csdn.net/hello_xusir/article/details/53424257
3.解决
这里给出两种解决方案:
1.使用实体类
新建一个Tag类
public class Tag {
private Integer id;
private String content;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
通过
private List<Tag> tags ; MyBaits中:
<collection property="tags" ofType="java.fyq.domain.Tag" select="selectTags">
<id property="id" column="tagId"/>
<result property="content" column="content"/>
</collection>
传统方式,List<Tag> 类型为tag而不是String 来关联主键区分content内容.
2.新建另一个select语句
(注意: select 中的 #{id} 是column 中的id 的值,不管有几个#{},值都是 column的值,也就是sql语句中 SELECT sh.id 的值)
column 注 意 : 要 处 理 复 合 主 键 , 你 可 以 指 定 多 个 列 名 通 过 column= ” {prop1=col1,prop2=col2} ” 这种语法来传递给嵌套查询语 句。

<select id="selectTags" resultType="string">
SELECT content
FROM fyq_sh_tag
WHERE houseId = #{id}
</select>
<collection property="tags" column="id" ofType="string" select="selectTags"> </collection>
collection 标签中 的column属性设置为 新建的select语句中主键来区分content.
mybatis <collection>标签 类型为string时无法获取重复数据错误的更多相关文章
- MyBatis 传一个类型为String的参数时常见问题及解决方法
MyBatis要求如果参数为String的话,不管接口方法的形参是什么,在Mapper.xml中引用时需要改变为_parameter才能识别 : <select id="selectB ...
- 爬虫数据使用MongDB保存时自动过滤重复数据
本文转载自以下网站: 爬虫断了?一招搞定 MongoDB 重复数据 https://www.makcyun.top/web_scraping_withpython13.html 需要学习的地方: Mo ...
- mybatis collection标签和association标签(一对多,一对一)转载
mybatis 一对一与一对多collection和association的使用 在mybatis如何进行一对一.一对多的多表查询呢?这里用一个简单的例子说明. 一.一对一 1.associati ...
- Hibernate原生SQL映射MySQL的CHAR(n)类型到String时出错
今天在用Hibernate通过原生SQL和ResultTransformer映射时,出现数据类型不匹配的错误.但是通过Entity映射,没有问题.在网上找了好多答案,终于解决了. 核心代码: Stri ...
- MyBatis入参类型是List时判断非空
一.参数list时,先判断是否为空,否则会报错. 二.mybatis ${}与#{}的区别 简单来说#{} 解析的是占位符?可以防止SQL注入, 比如打印出来的语句 select * from tab ...
- 为啥final类型的map或者arraylist可以修改数据 而final类型的String变量不可以修改数据呢
比如 final Map map =new HashMap(); 可以往map里put数据final List list =new ArrayList(); 可以往list里 ...
- Delphi中返回类型为string的函数的一个陷阱(不是很懂)
如果类的一个成员函数的返回值是string类型,需要注意一个问题 其返回值可能是错误的 例如函数的实现如下 function GetString( s: string ): string;begin ...
- Distinct删除重复数据时 自定义的方法比较【转】
最近项目中在用Linq Distinct想要将重复的资料去除时,发现它跟Any之类的方法有点不太一样,不能很直觉的在呼叫时直接带入重复数据判断的处理逻辑,所以当我们要用某个成员属性做重复数据的判断时, ...
- Linq使用Distinct删除重复数据时如何指定所要依据的成员属性zz
最近项目中在用Linq Distinct想要将重复的资料去除时,发现它跟Any之类的方法有点不太一样,不能很直觉的在呼叫时直接带入重复数据判断的处理逻辑,所以当我们要用某个成员属性做重复数据的判断时, ...
随机推荐
- 【luogu P3979 遥远的国度】 题解
题目链接:https://www.luogu.org/problemnew/show/P3979 除了换根操作都是裸的树剖 所以换根时考虑: 1.我查询的根等于换的根:无影响 2.我查询的根是换的根的 ...
- 【luogu P2764 最小路径覆盖问题】 模板
题目链接:https://www.luogu.org/problemnew/show/P2764 把每个点在左边建一遍右边建一遍,再加上源点汇点,跑最大流,n-最大流就是答案. #include &l ...
- Hive中使用LZO
hive 中使用lzo 1 启动hive 错误Exception in thread "main" java.lang.NoClassDefFoundError: org/apac ...
- android SQLITE的基本使用总结(八)
sharedPreferences只适合存储比较简单的数据和键值对,支持不同的数据类型 文件存储连键值对都没有,不会进行任何格式化处理,存储简单的二进制或者文本数据 sqlite则能处理一些数据量大, ...
- Java基础随笔2
各类运算符: 算数运算符::+,-,*,/,%,++,-- ++:自增 --:自减 单独使用的时候,++或者--无论是放在变量的前面还是后面,结果是一样的. 参与操作的时候: 如果++或者--在变量的 ...
- 简析--UUID
内容转载自:http://www.cnblogs.com/java-class/p/4727698.html 阅读目录 1.UUID简介 2.UUID组成 3.UUID实战演练 1.UUID 简介 U ...
- 为什么有IP还需要硬件地址,或者说为什么有硬件地址还需要IP
只用MAC 虽然每个设备都有唯一的硬件地址,但不都是MAC格式. 只用MAC的话理论上是可行的,但是其中 兼容不同的硬件地址,处理起来是非常困难的.而且数据链路层也没有必要处理网络层的逻辑. 只用IP ...
- Angularjs基础(九)
AngularJS 应用应用程序讲解 实例: <html ng-app="myNoteApp"> <head> <meat charset=" ...
- 【CodeForces 660D】Number of Parallelograms(n个点所能组成的最多平行四边形数量)
You are given n points on a plane. All the points are distinct and no three of them lie on the same ...
- ABAP术语-Fiscal Year
Fiscal Year 原文:http://www.cnblogs.com/qiangsheng/archive/2008/02/02/1062109.html Generally a period ...