mybatis使用foreach语句实现IN查询(三种)

  • 更新时间:2022-07-06 22:20:32
  • 编辑:殳馨蓉
本站收集了一篇mybatis相关的编程文章,网友贺水格根据主题投稿了本篇教程内容,涉及到mybatis、foreach、查询、mybatis、IN查询、mybatis、foreach、IN查询、mybatis foreach IN查询相关内容,已被691网友关注,内容中涉及的知识点可以在下方直接下载获取。
Mybatis在Mapper.xml文件中的转义字符处理方式
  • 大小:82 KB
  • 发布人:毋嘉庆
  • 下载:Mybatis

mybatis foreach IN查询

foreach语句中, collection属性的参数类型可以使:List、数组、map集合

collection: 必须跟mapper.java中@Param标签指定的元素名一样

item : 表示在迭代过程中每一个元素的别名,可以随便起名,但是必须跟元素中的#{}里面的名称一样。

  • index :表示在迭代过程中每次迭代到的位置(下标)
  • open :前缀, sql语句中集合都必须用小括号()括起来

close :后缀

  • separator :分隔符,表示迭代时每个元素之间以什么分隔

Mybatis多条件查询使用IN语句查询foreach使用方式

#{}是预编译处理,KaTeX parse error: Expected 'EOF', got '#' at position 20: …符串替换。mybatis在处理#̲{}时,会将sql中的#{}替…{}时,就是把${}替换成变量的值。使用#{}可以有效的防止SQL注入,提高系统安全性。

例如:

# 是将传入的值当做字符串的形式,eg:select id,name,age from student where id =#{id},当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id =‘1'.

$ 是将传入的数据直接显示生成sql语句,eg:select id,name,age from student where id =${id},当前端把id值1,传入到后台的时候,就相当于 select id,name,age from student where id = 1.

(1)$ 符号一般用来当作占位符,常使用Linux脚本的人应该对此有更深的体会吧。既然是占位符,当然就是被用来替换的。知道了这点就能很容易区分$和#,从而不容易记错了。
(2)预编译的机制。预编译是提前对SQL语句进行预编译,而其后注入的参数将不会再进行SQL编译。我们知道,SQL注入是发生在编译的过程中,因为恶意注入了某些特殊字符,最后被编译成了恶意的执行操作。而预编译机制则可以很好的防止SQL注入。

select * from HealthCoupon where useType in ( '4' , '3' )

其中useType=“2,3”;这样的写法,看似很简单,但是MyBatis不支持。。但是MyBatis中提供了foreach语句实现IN查询

正确的写法有以下几种写法:

(一)、selectByIdSet(List idList)

List<User> selectByIdSet(List idList);
 
<select id="selectByIdSet" resultMap="BaseResultMap">
 SELECT
 <include refid="Base_Column_List" />
 from t_user
 WHERE id IN
 <foreach collection="list" item="id" index="index" open="(" close=")" separator=",">
  #{id}
 </foreach>
</select>

(二)、List selectByIdSet(String[] idList)

如果参数的类型是Array,则在使用时,collection属性要必须指定为 array

List<User> selectByIdSet(String[] idList);
 
<select id="selectByIdSet" resultMap="BaseResultMap">
 SELECT
 <include refid="Base_Column_List" />
 from t_user
 WHERE id IN
 <foreach collection="array" item="id" index="index" open="(" close=")" separator=",">
  #{id}
 </foreach>
</select>

(三)、参数有多个时

当查询的参数有多个时,有两种方式可以实现,一种是使用@Param(“xxx”)进行参数绑定,另一种可以通过Map来传参数。

3.1 @Param(“xxx”)方式

List<User> selectByIdSet(@Param("name")String name, @Param("ids")String[] idList);
 
<select id="selectByIdSet" resultMap="BaseResultMap">
 SELECT
 <include refid="Base_Column_List" />
 from t_user
 WHERE name=#{name,jdbcType=VARCHAR} and id IN
 <foreach collection="idList" item="id" index="index"
  open="(" close=")" separator=",">
  #{id}
 </foreach>
</select>

3.2 Map方式

Map<String, Object> params = new HashMap<String, Object>(2);
params.put("name", name);
params.put("idList", ids);
mapper.selectByIdSet(params);
 
<select id="selectByIdSet" resultMap="BaseResultMap"> 
   select 
   <include refid="Base_Column_List" /> 
   from t_user where 
   name = #{name}
   and ID in 
   <foreach item="item" index="index" collection="idList" open="(" separator="," close=")"> 
   #{item} 
   </foreach> 
</select>

到此这篇关于mybatis使用foreach语句实现IN查询(三种)的文章就介绍到这了,更多相关mybatis foreach 查询内容请搜索java学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持java学习网! 

相关下载

  • 《Spring+Spring MVC+MyBatis整合开发实战》源码

    大小:42.4 MB
  • MyBatis从入门到精通

    大小:116.8 MB
  • 互联网轻量级SSM框架解密 Spring、Spring MVC、MyBatis源码深度剖析

    大小:94.4 MB
  • Spring MVC+MyBatis开发从入门到项目实战

    大小:230.8 MB

相关教程

  • MyBatis中如何优雅的使用枚举详解

    为网友们分享了关于MyBatis的教程,枚举类型是我们在开发中经常遇到的一个类型,最近在学习MyBatis,但是发现网上没有详细介绍MyBatis如何使用枚举的相关文章,索性就自己写一篇,下面这篇文章主要给大家介绍了关于在MyBati

    发布时间:2022-06-24

  • mybatis的dtd约束文件及配置文件xml自动提示操作

    mybatis的dtd约束文件及配置文件xml自动提示操作

    为网友们分享了关于mybatis的教程,这篇文章主要介绍了mybatis的dtd约束文件及配置文件xml自动提示操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    发布时间:2022-07-01mybatis dtd约束xml自动提示

  • Mybatis-Plus使用p6spy对SQL性能进行监控的方法

    Mybatis-Plus使用p6spy对SQL性能进行监控的方法

    给大家整理了关于Mybatis的教程,这篇文章主要介绍了Mybatis-Plus使用p6spy对SQL性能进行监控的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    发布时间:2022-06-20Mybatis-Plus SQL性能监控

  • Mybatis-Plus环境配置与入门案例分析

    Mybatis-Plus环境配置与入门案例分析

    给网友们整理关于Mybatis的教程,MyBatis-Plus 是一个 Mybatis 增强版工具,在 MyBatis 上扩充了其他功能没有改变其基本功能,为了简化开发提交效率而存在,本篇文章带你配置环境并认识它

    发布时间:2022-06-27Mybatis-Plus 入门

  • mybatis中resultMap 标签的使用教程

    mybatis中resultMap 标签的使用教程

    给网友们整理关于mybatis的教程,resultMap 标签用来描述如何从数据库结果集中来加载对象,这篇文章重点给大家介绍mybatis中resultMap 标签的使用,感兴趣的朋友一起看看吧

    发布时间:2022-06-19

  • spring中使用mybatis plus连接sqlserver的方法实现

    为网友们分享了关于spring的教程,这篇文章主要介绍了spring中使用mybatis plus连接sqlserver的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    发布时间:2022-06-16spring连接sqlserver

  • IDEA 使用mybatis插件Free Mybatis plugin的步骤(推荐)

    IDEA 使用mybatis插件Free Mybatis plugin的步骤(推荐)

    给网友们整理关于IDEA的教程,这篇文章主要介绍了IDEA 使用mybatis插件Free Mybatis plugin的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    发布时间:2022-06-24idea 插件Free Mybatis plugin

用户留言