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> 

总结

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

(0)

相关推荐

  • 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表达式基本语法与用法详解

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

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

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

  • 通过实例深入学习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

  • 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条件判断

  • Mybatis如何使用ognl表达式实现动态sql

    本文讲述在mybatis中如何使用ognl表达式实现动态组装sql语句 新建Users实体类: public class Users { private Integer uid; private String userName; private String tel; //添加上面私有字段的get.set方法 } 新建一个Dao接口类,mybatis配置文件在配置namespace属性时需要加入这个类的完整类名,找到这个类里的方法执行: public interface UserDao { /*

  • 自己动手实现mybatis动态sql的方法

    发现要坚持写博客真的是一件很困难的事情,各种原因都会导致顾不上博客.本来打算写自己动手实现orm,看看时间,还是先实现一个动态sql,下次有时间再补上orm完整的实现吧. 用过mybatis的人,估计对动态sql都不陌生,如果没有用过,就当看看热闹吧.我第一次接触mysql是在大四的时候,当时就觉得动态sql这东西很牛,很灵活,一直想搞明白怎么实现的,尽管当时已经能够写ioc,mvc和简单的orm框架(仿mybaits但是没有动态sql部分),但是仍然找不到mybatis核心的动态sql到底在哪

  • Mybatis多表查询与动态SQL特性详解

    目录 1.较复杂的查询操作 1.1 参数占位符 #{} 和 ${} 1.2SQL注入 1.3like查询 1.4resultType与resultMap 1.4多表查询 1.4.1一对一表映射 1.4.2一对多表映射 2.动态SQL 2.1if标签 2.2trim标签 2.3where标签 2.4set标签 2.5foreach标签 总结 1.较复杂的查询操作 1.1 参数占位符 #{} 和 ${} #{}:预处理符,如将id=#{2}替换为id=?,然后使用2替换?. ${}:替换符,如将id

  • MyBatis在注解上使用动态SQL方式(@select使用if)

    目录 MyBatis在注解上使用动态SQL 1.用script标签包围 2.用Provider去实现SQL拼接 3.说明 MyBatis xml注释SQL的注意事项 注意事项 MyBatis在注解上使用动态SQL 1.用script标签包围 然后像xml语法一样书写 @Select({"<script>",                 "SELECT * FROM tbl_order",                 "WHERE 1=1

  • 利用PM2部署node.js项目的方法教程

    前言 大家在开发中应该发现了,如果直接通过node app来启动,如果报错了可能直接停在整个运行,supervisor感觉只是拿来用作开发环境的.再网上找到pm2.目前似乎最常见的线上部署nodejs项目的有forever,pm2这两种.下面本文将详细介绍利用PM2部署node.js项目的方法教程,需要的朋友们下面来一起看看详细的介绍: 使用场合: supervisor是开发环境用. forever管理多个站点,每个站点访问量不大,不需要监控. pm2 网站访问量比较大,需要完整的监控界面. P

  • Java的MyBatis框架中对数据库进行动态SQL查询的教程

    其实MyBatis具有的一个强大的特性之一通常是它的动态 SQL 能力. 如果你有使用 JDBC 或其他 相似框架的经验,你就明白要动态的串联 SQL 字符串在一起是十分纠结的,确保不能忘了空格或在列表的最后省略逗号.Mybatis中的动态 SQL 可以彻底处理这种痛苦.对于动态SQL,最通俗简单的方法就是我们自己在硬编码的时候赋予各种动态行为的判断,而在Mybatis中,用一种强大的动态 SQL 语 言来改进这种情形,这种语言可以被用在任意映射的 SQL 语句中.动态 SQL 元素和使用 JS

  • Mybatis中输入输出映射与动态Sql图文详解

    一.输入映射 我们通过配置parameterType的值来指定输入参数的类型,这些类型可以是简单数据类型.POJO.HashMap等数据类型 1.简单类型 2.POJO包装类型 ①这是单表查询的时候传入的POJO包装类型,即可以直接传入实体类,但是当多表查询的时候,就需要自定义POJO类型 ②我们使用自定义POJO类型来具体的了解一下 先设计 包装类型如下,其中UserPOJO是除了User本身之外的添加的其他跟User相关的属性的包装类,UserVo是用于视图层面的包装类型,同样也是作为Map

  • MyBatis执行动态SQL的方法

    大家基本上都知道如何使用 MyBatis 执行任意 SQL,使用方法很简单,例如在一个 XXMapper.xml 中: <select id="executeSql" resultType="map"> ${_parameter} </select> 你可以如下调用: sqlSession.selectList("executeSql", "select * from sysuser where enabled

  • Mybatis Plus使用XML编写动态sql的超简易方法

    目录 使用xml编写动态sql 动态SQL语句的原理 入口类:MybatisSqlSessionFactoryBuilder MybatisMapperAnnotationBuilder动态构造 具体的AbstractMethod实例类,构造具体的方法SQL语句 小结一下 使用xml编写动态sql 在Resources文件夹下创建一个Mapper文件夹 比如我们需要在User表中使用增删改查,创建UserMapper.xml,对应MybatisPlus中的UserMapper接口 之后我们在ap

随机推荐