mybatis传入数组怎么写_MyBatis 中 SQL 写法技巧小总结

本文介绍了MyBatis中的动态SQL语句,包括if、choose(when, otherwise)、trim、where、set和foreach的用法,帮助理解如何在MyBatis中编写处理各种查询条件的SQL。" 42721475,988733,浮点数表示与比较陷阱,"['数值计算', '计算机科学', '浮点运算', '精度问题', '编程']
摘要由CSDN通过智能技术生成

28e31a36cc6b230fc038ff8ed3f88538.png

最近有个朋友在搞mybatis,问我怎么写sql ,说简单一点mybatis就是写原生sql,官方都说了 mybatis 的动态sql语句是基于OGNL表达式的。可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:

1. if 语句 (简单的条件判断)

2. choose (when,otherwize) ,相当于java 语言中的 switch ,与 jstl 中的choose 很类似.

3. trim (对包含的内容加上 prefix,或者 suffix 等,前缀,后缀)

4. where (主要是用来简化sql语句中where条件判断的,能智能的处理 and or ,不必担心多余导致语法错误)

5. set (主要用于更新时)

6. foreach (在实现 mybatis in 语句查询时特别有用)

这是我的Java专栏《Java 进阶集中营》,里面会有很多优秀的java技术内容和工作分享,各位喜欢Java并且正在学习Java 的朋友可别错过了
JAVA 进阶集中营​zhuanlan.zhihu.com
MyBatis,如果要传递集合、列表、数组或Map等数据结构作为参数,我们可以使用以下方式进行配置和传参: 1. 传递集合或列表参数: 在传递集合或列表参数时,我们可以在SQL语句使用foreach循环遍历每个参数。例如,我们有一个查询语句如下: ``` SELECT * FROM user WHERE id IN (1, 2, 3); ``` 如果我们想要通过集合参数传递id列表,我们的Mapper文件可以这样: ``` <select id="getUserByIdList" resultType="User"> SELECT * FROM user WHERE id IN <foreach item="id" index="index" collection="idList" open="(" separator="," close=")"> #{id} </foreach> </select> ``` 其,我们通过collection指定了传入的idList集合参数,在foreach标签遍历idList,将每一个id都解析为#{id}参数。这样,就能够动态地构建查询条件,得到期望的查询结果。 2. 传递数组参数: 在传递数组参数时,我们可以通过Java数组语法直接传入参数值,例如: ``` <select id="getUserByIds" resultType="User"> SELECT * FROM user WHERE id IN <foreach item="id" index="index" collection="array" open="(" separator="," close=")"> #{id} </foreach> </select> ``` 在此例,我们通过collection指定了传入的array数组参数,与遍历集合方法类似。 3. 传递Map参数: 如果要传递一个Map作为参数,我们可以为Map的每个键值对设置一个key和value属性,以便在SQL使用。例如: ``` <select id="getUserByMap" resultType="User"> SELECT * FROM user WHERE age = #{age} AND <if test="name!=null">name = #{name}</if> AND <if test="email!=null">email = #{email}</if> </select> ``` 在这个例子,我们通过age、name、email三个键来传递参数值,同时使用if条件语句来根据不同的参数情况动态地构建SQL查询语句。 综上所述,不同的参数类型在MyBatis的传递方式有所不同,但可以通过MyBatis内置的标签,如foreach、if等,来方便地处理动态SQL查询条件的构建。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值