Mybatis利用OGNL表达式处理动态sql的方法教程
作者:枯木生花 发布时间:2022-11-26 22:22:02
标签:mybatis,ognl表达式,动态sql
本文介绍的是关于Mybatis中用OGNL表达式处理动态sql的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:
常用的Mybatis动态sql标签有6种:
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 语句查询时特别有用)
(1) if
模糊查询
<select id="select1" resultType="BaseresultMap">
SELECT * FROM User WHERE Age = ‘18'
<if test="name != null">
AND name like #{name}
</if>
</select>
年龄18且可以模糊搜索姓名
(2)choose,when,otherwize
当Job参数有传入时,就找出对应工作的人,否则就找出Job为none的人,而不是所有人
<select id="select2" resultType="BaseresultMap">
SELECT * FROM User WHERE Age = ‘18'
<choose>
<when test="Job != null">
AND Job =#{Job}
</when>
<otherwise>
AND Job="none"
</otherwise>
</choose>
</select>
(3)foreach
<select id="select5" resultType="BaseresultBase">
select * from User where id in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
public List<User> select5(List<Integer> ids);
(4) where set trim
where,set
为什么要用where,因为单纯的写where可能会导致 where And ... 和 where .....情况的发生,Set也是一样的
当然 trim 标签是万能的
<select id="select3" resultType="BaseresultMap">
SELECT * FROM User
<where>
<if test="Age != null">
Age = #{Age}
</if>
<if test="Job != null">
AND Job like #{Job}
</if>
<where>
</select>
<update id="update1">
update User
<set>
<if test="username != null">username=#{username},</if>
<if test="password != null">password=#{password},</if>
<if test="Age != null">Age =#{Age}</if>
</set>
where id=#{id}
</update>
<pre code_snippet_id="2048504" snippet_file_name="blog_20161214_2_7439616" class="prettyprint lang-xml" name="code"><pre code_snippet_id="2048504" snippet_file_name="blog_20161214_2_7439616" name="code" class="html"><pre code_snippet_id="2048504" snippet_file_name="blog_20161214_2_7439616"></pre>
<pre></pre>
<pre></pre>
<p></p>
<pre></pre>
<pre></pre>
<pre></pre>
<pre code_snippet_id="2048504" snippet_file_name="blog_20161214_3_3393435" name="code" class="html"></pre><pre code_snippet_id="2048504" snippet_file_name="blog_20161214_3_3393435"></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
</pre><div class="save_code tracking-ad" data-mod="popu_249"><a href="javascript:;" rel="external nofollow" ><img src="http://static.blog.csdn.net/images/save_snippets.png"></a></div></pre>
来源:http://blog.csdn.net/qq_28007533/article/details/53619366
0
投稿
猜你喜欢
- Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能Jenkins是基于Java开发的一种持续集成工具
- 下面是我自己收集整理的2017年Java岗位的面试题,可以用它来好好准备面试。一、Java基础1. String类为什么是final的。2.
- MyBatis源码解析_获取SqlSessionFactory我们都知道,在Mybatis中,对数据库的增删改查,实际上是由SqlSessi
- 本文实例为大家分享了Android微信摇一摇功能的实现方法,供大家参考,具体内容如下import java.util.ArrayList;
- 很多学习Android程序设计的人都会发现每个人对代码的写法都有不同的偏好,比较明显的就是对控件响应事件的写法的不同。因此本文就把这些写法总
- Java中如何输出像1-2-3-4-5 这样的字符抱歉对于这个问题我甚至不能想到一个合适的标题,但是不重要 以下操作基于 jdk 1.8St
- 本博文将为您提供自Java 7以来增加的很棒的新功能的示例。我将展示每个Java版本的至少一项重大改进,一直到2020年秋季发布的Java
- 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都
- 本文是Neward & Associates的总裁Ted Neward为developerworks独家撰稿“你不知道5个……”系列
- Ribbon是Spring Cloud Netflix全家桶中负责负载均衡的组件,它是一组类库的集合。通过Ribbon,程序员能在不涉及到具
- 做Java编程,难免会遇到多线程的开发,但是JDK8这个CompletableFuture类很多开发者目前还没听说过,但是这个类实在是太好用
- 1.可能是缓存导致的。解决方法:清除缓存!2.全局编译可能项目依赖别的模块,别的模块修改未进行编译,这时须先对依赖模块进行编译补充知识:ID
- 单元测试是程序员对代码的自测,一般公司都会严格要求单元测试,这是对自己代码的负责,也是对代码的敬畏。一般单元测试都是测试Service层,下
- Eclipse 最佳字体 推荐:步骤:Eclipse->Windows[窗口]->Preferences[首选项]->Ge
- 1.docker安装seata 1.3.0镜像docker pull seataio/seata-server:1.3.02.运行容器获取配
- 1、动态SQL片段通过SQL片段达到代码复用 <!-- 动态条件分页查询 --> <sql i
- Redis是一个缓存消息中间件及具有丰富特性的键值存储系统。Spring Boot为Jedis客户端库和由Spring Data Redis
- 本文实例讲述了C#关闭指定名字进程的方法。分享给大家供大家参考。具体实现方法如下:public static void stopNamedP
- 通常来说,多线程的并发及条件断点的debug是很难完成的,或许本篇文章会给你提供一个友好的调试方法。让你在多线程开发过程中的调试更加的有的放
- 需求: 使用IO流将指定目录下的若干个音频文件的高潮部分,进行剪切,并重新拼接成一首新的音频文件 思路(以两首歌为例):第一首歌有