Mybatis-学习笔记(5)动态SQL
2024-08-31 21:24:00
1、Mybatis采用功能强大的基于ONGL的表达式来完成动态SQL。
2、ONGL常用的元素有:
1》if
<if test="id != null ">
and id = #{id}
</if>
Mybatis中,#{id}表达式获取参数有两种方式:一是从HashMap中获取集合中的property对象;二是从Java Bean中获取property对象。
2》choose
<choose>
<when test="id != null">
and id = #{id}
</when>
<when test="loginname != null and password != null">
and loginname = #{loginname} and password = #{password}
</when>
<otherwise>
and sex = '男'
</otherwise>
</choose>
3》where
<where>
<if test="state != null ">
state = #{state}
</if>
<if test="id != null ">
and id = #{id}
</if>
<if test="loginname != null and password != null">
and loginname = #{loginname} and password = #{password}
</if>
</where>
where元素知道只有在一个以上的if条件有值的情况下才去插入where子句。而且,如果最后的内容是“and”或“or”开头,where元素也知道如何将它们去掉。
4》set
update tb_employee
<set>
<if test="loginname != null">loginname=#{loginname},</if>
<if test="password != null">password=#{password},</if>
<if test="name != null">name=#{name},</if>
<if test="sex != null">sex=#{sex},</if>
<if test="age != null">age=#{age},</if>
<if test="phone != null">phone=#{phone},</if>
<if test="sal != null">sal=#{sal},</if>
<if test="state != null">state=#{state}</if>
</set>
where id=#{id}
set元素可以动态前置set关键字,同时也会消除无关的逗号。
5》foreach
<select id="selectEmployeeIn" resultType="com.lfy.bean.Emp">
SELECT *
FROM tb_employee
WHERE ID in
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
</select>
该元素主要应用于构建in条件语句。doreach元素的功能非常强大,它允许指定一个集合,声明可以用在元素体内的集合项和索引变量。也可以指定开闭匹配的字符串以及在迭代中间放置分隔符。
6》bind
<select id="selectEmployeeLikeName" resultType="com.lfy.bean.Emp">
<bind name="pattern" value="'%' + _parameter.getName() + '%'" />
SELECT * FROM tb_employee
WHERE loginname LIKE #{pattern}
</select>
bind元素可以从ONGL表达式中创建一个变量并将其绑定到上下文。
最新文章
- BZOJ1013: [JSOI2008]球形空间产生器sphere
- 如何使用SSL pinning来使你的iOS APP更加安全
- Windows Sever关于80端口之争
- P3376 【模板】网络最大流
- Python学习教程(learning Python)--3.3 分支语句的条件表达式详解
- BZOJ 1001: [BeiJing2006]狼抓兔子 最小割
- mysql数据库文件默认保存目录(windows)
- Java学习之内部类
- 缓存1 静态缓存-->;读库保存成php文件 mkdir-->;file_put_contents-->;var_export -->;include
- 今天给大家分享一下PS快捷键大全
- Grafana4.2安装
- BZOJ 2342: [Shoi2011]双倍回文 [Manacher + set]
- ArrayList的addAll方法
- fastclick.js插件使用简单说明
- Pandas:让你像写SQL一样做数据分析
- textarea 标签 属性
- [原创] 浅谈ETL系统架构如何测试?
- Python Django 获取表单数据的三种方式
- hive sql 修改列名
- signal(SIGCHLD, SIG_IGN);的使用及验证