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> 

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对我们的支持。

时间: 2017-06-13

OGNL表达式基本语法与用法详解

一.OGNL中的#.%和$符号 #.%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分.在这里我们简单介绍它们的相应用途. 1.#符号的三种用法 1)访问非根对象属性,例如示例中的#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀.实际上,#相当于ActionContext. getContext():#session.msg表达式相当于ActionContext.getContext().getSessi

通过实例深入学习Java的Struts框架中的OGNL表达式使用

Struts 2默认的表达式语言是OGNL,原因是它相对其它表达式语言具有下面几大优势: 1. 支持对象方法调用,如xxx.doSomeSpecial(): 2. 支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 | 值名],例如:@java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME: 3. 支持赋值操作和表达式串联,如price=100, discount=0.8, cal

Struts2 OGNL表达式实例详解

Object Graph Navigation Language:对象图导航语言,就是用点来访问成员变量 <s:property value="cat.name"/> 例1: struts.xml: <package name="ognl" namespace="/ognl" extends="struts-default"> <action name="og1" class=

Struts2 通过ognl表达式实现投影

projection(投影):俗话说就是过滤,就是过滤器把符合条件的过滤出来 struts.xml: <package name="ognl" namespace="/ognl" extends="struts-default"> <action name="pro" class="cn.edu.hpu.ognl.OgnlAction4"> <result name="

关于国际化、OGNL表达式语言

一.国际化 准备资源文件,资源文件的命名格式如下:baseName_language_country.propertiesbaseName_language.propertiesbaseName.properties其中baseName是资源文件的基本名,我们可以自定义,但language和country必须是java支持的语言和国家.如:中国大陆: baseName_zh_CN.properties美国: baseName_en_US.properties 现在为应用添加两个资源文件:第一个存

jsp页面中表达式语言中的$符号不起作用的解决方法

今天myeclipse里部署了之前做的一个测试项目,发现jsp里的$符号tomcat启动后页面上显示出来了,百度搜了下别人也有类似的问题出现过.经提醒原来是web.xml配置的version设置的是2.5而我tomcat5启动的.是tomcat的版本低于web的版本,从而导致$符号不能正常使用. 后将tomcat5改用tomcat6.jdk采用1.6 启动spring2.5项目.$显示问题解决. 以下是网上摘录的详细说明: 在jsp页面中用表达式语言中的$符号,如${pageScope.titl

vue 国际化 vue-i18n 双语言 语言包

1.安装vue-i18n 2.在main.js里面引用 import VueI18n from 'vue-i18n' Vue.use(VueI18n) 3.实例化i18n,并配置默认的语言模式,以及对应的文件(也是在main.js里使用) 如下.cn 中文包对应的是cn.js en 对应的是英文 en.js 包 const i18n = new VueI18n({ //定义默认语言 locale: 'cn', messages:{ 'cn': require('./common/lang/cn'

Spring实战之Bean定义中的SpEL表达式语言支持操作示例

本文实例讲述了Spring实战之Bean定义中的SpEL表达式语言支持操作.分享给大家供大家参考,具体如下: 一 配置 <?xml version="1.0" encoding="GBK"?> <!-- 指定Spring配置文件的根元素和Schema 导入p:命名空间和util:命名空间的元素 --> <beans xmlns="http://www.springframework.org/schema/beans"

Spring表达式语言SpEL用法详解

这篇文章主要介绍了spring表达式语言SpEL用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 (1)spring表达式语言是一个支持运行时查询和操作对象图得我强大表达式语言. (2)语言类似于EL:SpEL使用#{...}作为定界符.所有在大括号中的字符串均被认为是SpEL. (3)SpEL为bean的属性进行动态赋值提供了便利. (4)通过SpEL可以实现: 通过Bean的id对Bean进行引用 调用方法及引用对象的属性 计算表达式