mybatis where 中in的使用
当我们使用mybatis时,在where中会用到 in 如:
where name in ('Jana','Tom');
我们可以在sql中直接写 name in ('Jana','Tom') 或者 name in (${names}) (备注:String names = "'Jana','Tom'"; 使用$时会引起sql注入安全问题)
但是我们无法在sql中直接写 name in (#{names});
会报参数个数错误,因为'Jana','Tom'会被解析成两个传参
String[] names={"Jana","Tom"};
此时要用foreach函数:
name in
<foreach collection="names" item="name" index="index" open="(" close=")" separator=",">
#{name}
</foreach>
解析为:
name in (?,?),然后利用names传入参数
关于参数的形式,可以是数组形式可以是List形式:
1.当只传入names变量时,collection必须指定array或list类型:
public List<User> findInfos(String[] names);
<select id="findInfos" resultMap="UserMap">
SELECT * FROM t_user
WHERE id IN
<foreach collection="array" item="name" index="index" open="(" close=")" separator=",">
#{name}
</foreach>
</select>
public List<User> findInfos(List<String> names);
<select id="findInfos" resultMap="UserMap">
SELECT * FROM t_user
WHERE id IN
<foreach collection="list" item="name" index="index" open="(" close=")" separator=",">
#{name}
</foreach>
</select>
注意:array传入的时候parameterType可以是"Integer[]" ,可以是"int[]",但不可以是"String[]"
报错 Could not resolve type alias 'string[]'. Cannot find class: string[]
2.当有其他变量时,利用map传入参数集时,可以直接将变量写在collection中
Map<String,Object> params = new HashMap<>();
params.put("class",class);
params.put("names",names);
<select id="findInfos" resultMap="UserMap">
SELECT * FROM t_user
WHERE id IN
<foreach collection="names" item="name" index="index" open="(" close=")" separator=",">
#{name}
</foreach>
</select>
mybatis where 中in的使用的更多相关文章
- Mybatis框架中实现双向一对多关系映射
学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...
- 详解Java的MyBatis框架中SQL语句映射部分的编写
这篇文章主要介绍了Java的MyBatis框架中SQL语句映射部分的编写,文中分为resultMap和增删查改实现两个部分来讲解,需要的朋友可以参考下 1.resultMap SQL 映射XML 文件 ...
- 【转】MyBatis学习总结(三)——优化MyBatis配置文件中的配置
[转]MyBatis学习总结(三)——优化MyBatis配置文件中的配置 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写在了MyBatis的con ...
- SpringBoot Mybatis项目中的多数据源支持
1.概述 有时项目里里需要抽取不同系统中的数据源,需要访问不同的数据库,本文介绍在Springboot+Mybatis项目中如何支持多数据源操作. 有需要的同学可以下载 示例代码 项目结构如下: 2. ...
- MyBatis Generator中文文档
MyBatis Generator中文文档 MyBatis Generator中文文档地址: http://mbg.cndocs.tk/ 该中文文档由于尽可能和原文内容一致,所以有些地方如果不熟悉,看 ...
- Mybatis系列(二):优化MyBatis配置文件中的配置和解决字段名与实体类属性名不相同的冲突
原文链接:http://www.cnblogs.com/xdp-gacl/p/4264301.html http://www.cnblogs.com/xdp-gacl/p/4264425.ht ...
- SpringMVC+MyBatis开发中指定callSettersOnNulls,可解决返回字段不全的问题
Spring+MyBatis开发过程中,在xxMapper.xml配置文件进行select查询时resultType="map",如果要查询的字段是空值,在返回的map中会出现找不 ...
- MyBatis配置文件中的标签mappers的子标签mapper的url属性
在浏览器中输入file:/可以打开访达根目录,file:后面至少跟一个杠 MyBatis配置文件中的标签mappers的子标签mapper的url属性中file:后面至少要跟两个杠
- mybatis框架中XxxxMaper.xml的文件
我们知道在mybatis框架中,config.xml中会关联到许多的XxxxMapper的xml文件,这些文件又对应着一个个的接口,来观察下这些xml文件 从以下这个文件为例子: <?xml v ...
- Mybatis 学习过程中出现空指针异常的错误【已解决】
Mybatis 学习过程中出现空指针异常的错误[已解决] 以下是写的小测试的代码 bean层 Player类(篮球队队员) bean层 Team类(篮球队) dao层 TeamDao.xml配置文件 ...
随机推荐
- sudo、su、suid
sudo 是一种权限管理机制,管理员可以授权普通用户去执行 root 权限的操作,而不需要知道 root 的密码.sudo 以其他用户身份执行命令,默认以root身份执行.配置文件/etc/sudoe ...
- 如何查看Codeforces的GYM中比赛的数据
前置条件:黄名(rating >= 2100) 或者 紫名(rating >= 1900)并且打过30场计分的比赛. 开启:首先打开GYM的界面,如果符合要求会在右边展示出一个Coach ...
- LOJ 2840「JOISC 2018 Day 4」糖
有趣的脑子题(可惜我没有脑子 好像也可以称为模拟费用流(? 我们考虑用链表维护这个东西 再把贡献扔到堆里贪心就好了 大概就是类似于有反悔机制的贪心?我们相当于把选中的一个打上一个-v的tag然后如果选 ...
- flask之视图函数从前端接收数据的方法
一:从前端接收查询字符串 query-string 注意:get和post都可以在url后面添加查询字符串?a=1&b=2 测试工具:postman 1:get方式接收 视图函数 from ...
- mysql导出数据到csv文件
在日常工作中经常会遇见导出表中的数据到csv文件的操作,这里就简单总结一下导出的操作. 下面对csv文件的描述是摘录: 据RFC4180文档设置的,该文档全称Common Format and MIM ...
- 【leetcode】394. Decode String
题目如下: 解题思路:这种题目和四则运算,去括号的题目很类似.解法也差不多. 代码如下: class Solution(object): def decodeString(self, s): &quo ...
- 当 Messaging 遇上 Jepsen
分布式系统面临的挑战 Is it better to be alive and wrong or right and dead? 随着计算机技术的发展,系统架构从集中式演进到分布式.分布式系统相对于单 ...
- 基于mpvue搭建小程序项目框架
简介: mpvue框架对于从没有接触过小程序又要尝试小程序开发的人员来说,无疑是目前最好的选择.mpvue从底层支持 Vue.js 语法和构建工具体系,同时再结合相关UI组件库,便可以高效的实现小程序 ...
- AndroidStudio3.4+Unity2018.3,导出JAR包给UNITY使用
环境 Android studio 3.4 + unity2018.3 1,android studio 新建空工程,一切默认,完成.这个空工程只是个壳,它的所有参数都没什么用,它存在的意义是为了后面 ...
- unity项目警告之 LF CRLF问题
unity中创建的脚本,以LF结尾. Visual studio中创建的脚本,以 CRLF结尾. 当我们创建一个unity脚本后,再用VS打开编辑保存后,这个文件既有LF结尾符,也有CRLF结尾符. ...