mybatis入门篇:mybatis动态SQL
1、if用法
<select id="selectUser" resultType="com.forest.owl.entity.User">
    select * from user
    where 1=1
    <if test="userName != null and userName != '' ">
        and user_name like concat('%', #{userName}, '%')
    </if>
    <if test="userPhone != null and userPhone !='' ">
        and user_phone=#{userPhone}
    </if>
</select>
2、choose
<select id="selectUser" resultType="com.forest.owl.entity.User">
    select * from user
    where 1=1 /*此处不可忽略*/
    <choose>
        <when test="id != null">
            and id=#{id}
        </when>
        <when test="userName != null and userName !='' ">
            and user_name=#{userName}
        </when>
        <otherwise>
            and 1=2 /*此处不可忽略*/
        </otherwise>
    </choose>
</select>
3、where
where标签内如果没有符合条件的选项,则最后生成的sql语句不含where;如果有符合条件的,则生成的sql语句会自动去除两端的and
<select id="selectUser" resultType="com.forest.owl.entity.User">
    select * from user
    <where>
        <if test="userName != null and userName != '' ">
        and user_name like concat('%', #{userName}, '%')
        </if>
        <if test="userEmail != null and userEmail != '' ">
        and user_email = #{userEmail}
        </if>
    </where>
</select>
4、set
<update id="updateUserById">
    update user
    <set>
        <if test="userName != null and userName != '' ">
        user_name=#{userName},
        </if>
        id=#{id}  /*此处不可忽略*/
    </set>
    where id=#{id}
</update>
5、foreach
collection:必填,值为要迭代循环的属性名。
item:变量名,值为要从迭代对象中取出的每一个值
index:索引的属性名。在集合数组下为索引值,在Map对象下为Map的key值。
参数为List的情况
<select id="selectByIdList" resultType="com.forest.owl.entity.User">
    select * from user
    where id in
    <foreach collection="list" open="(" close=")" separator="," item="id" index="i">
    #{id}
    </foreach>
</select>
参数为Map的情况
    <update id="updateByMap">
        update user
        set
        <foreach collection="_parameter" item="val" index="key" separator=",">
            ${key}=#{val}
        </foreach>
        where id=#{id}
    </update>
6、bind
bind标签可以使用OGML表达式创建一个变量病绑定到上下文中。
如
<if test="userName != null and userName != '' ">
and user_name like concat('%', #{userName}, '%')
</if>
可以通过bind改写成
<if test="userName != null and userName != '' ">
    <bind name="userNameLike" value=" '%' + userName + '%' "/>
    and user_name #{userNameLike}
</if>
7、如果测试的时候想知道映射XML中方法执行的参数 可以这么做:
public class StringUtil{
    public static void print(Object parameter){
        System.out.println(parameter);
    }
}
<bind name="print" value="@com.forest.owl.util.StringUtil@print(_parameter)" />
8、鉴别器映射(discriminator)
有时单独一个映射会需要返回不同数据类型的结果集,discriminator就是为了用来处理这种情况。
因为感觉这个标签不会很常用,所以不做进一步了解,暂时给出简单的代码,后续有需要再回来翻阅:
  <resultMap id="UserAndRole" extends="BaseResultMap" type="com.forest.owl.entity.User">
    <discriminator javaType="int" column="enabled">
      <" resultMap="resultMap1"/>
      <" resultMap="resultMap2"/>
    </discriminator>
  </resultMap>
mybatis入门篇:mybatis动态SQL的更多相关文章
- Spring Boot MyBatis升级篇-注解-动态SQL(if test)-方案二:@Provider(8)
		
1)动态语言注解(2)@Provider使用思路(3)@SelectProvider小试牛刀(4)@SelectProvider初露锋芒(5)@SelectProvider过关斩将(6)@Insert ...
 - 持久层之 MyBatis: 第二篇 :动态SQL And多表查询
		
MyBatis入门到精通 完整CRUD UserDaoImpl 编写UserDao对应的UserDaoMapper.xml 添加UserDao的测试用例 编写UserDao的测试用例 解决数据库字段名 ...
 - mybatis入门基础(五)----动态SQL
		
一:动态SQL 1.1.定义 mybatis核心对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接.组装. 1.2.案例需求 用户信息综合查询列表这个statement的定义使用动态s ...
 - Mybatis第三篇【动态SQL】
		
动态SQL 何为动态SQL??回顾一下我们之前写的SSH项目中,有多条件查询的情况,如下图 我们当时刚开始做的时候,是需要在Controller中判断SQL是否已经有条件了,因为SQL语句需要拼接起来 ...
 - MyBatis学习总结_11_MyBatis动态Sql语句
		
MyBatis中对数据库的操作,有时要带一些条件,因此动态SQL语句非常有必要,下面就主要来讲讲几个常用的动态SQL语句的语法 MyBatis中用于实现动态SQL的元素主要有: if choose(w ...
 - MyBatis:学习笔记(4)——动态SQL
		
MyBatis:学习笔记(4)——动态SQL
 - SSM框架之Mybatis(6)动态SQL
		
Mybatis(6)动态SQL 1.动态SQL 出现原因:有些时候业务逻辑复杂时,我们的 SQL 是动态变化的,此时在前面的学习中我们的 SQL 就不能满足要求了 1.1.if标签 我们根据实体类的不 ...
 - Spring mybatis源码篇章-动态SQL节点源码深入
		
通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-动态SQL基础语法以及原理 前话 前文描述到通过mybatis默认的解析驱动类org.apache.ibat ...
 - SSM框架开发web项目系列(四) MyBatis之快速掌握动态SQL
		
前言 通过前面的MyBatis部分学习,已经可以使用MyBatis独立构建一个数据库程序,基本的增删查改/关联查询等等都可以实现了.简单的单表操作和关联查询在实际开的业务流程中一定会有,但是可能只会占 ...
 - Mybatis分页查询与动态SQL
		
一.Mybatis的分页查询 由于第一二节较为详细讲述了Mybatis的环境搭建,文件配置,SQL编写和Java代码实现,所以接下来的讲述都将只抽取关键代码和mapper文件中的关键sql,详细的流程 ...
 
随机推荐
- JavaScript语言里判断一个整数是偶数还是奇数,并输出判断结果
			
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
 - LR-SVM(有待重新整理)
			
参考:http://www.zhihu.com/question/26768865 总结: 1)在线学习:SVM不支持在线学习,LR支持 2)不平衡数据:SVM不依赖于数据的分布,所以数据是否平衡影响 ...
 - ORACLE用户表空间使用情况查询
			
1.查询用户使用的表空间: select username,default_tablespace,temporary_tablespace from dba_users where username ...
 - 51单片机---点亮一个LED灯
			
1 程序源码 #include <REGX52.H> `包含51单片机的头文件` sbit led = P0^0; int main(void) { while(1) { led = 1; ...
 - Favorite Donut(HDU 5442)最小表示法+二分
			
题目给出一个字符串,由a~z表示甜度,随字典序增大,字符串首尾相连形成一个圈,要求从一个位置开始字典序最大的字符串,输出位置以及是顺时针还是逆时针表示.顺时针用0表示,逆时针用1表示. 此题只需要查找 ...
 - maya模板lock工具
			
#lockTemple import maya.cmds as mcimport stringif mc.window('LockWin',ex=1)==1: mc.deleteUI(' ...
 - 一张图看懂AI、机器学习和深度学习的区别
			
AI(人工智能)是未来,是科幻小说,是我们日常生活的一部分.所有论断都是正确的,只是要看你所谈到的AI到底是什么. 例如,当谷歌DeepMind开发的AlphaGo程序打败韩国职业围棋高手Lee Se ...
 - java_集合类_简
			
Collection 来源于Java.util包,实用常用的数据结构,字面意思就是容器 主要方法 boolean add(Object o)添加对象到集合 boolean remove(Object ...
 - C++ operator 学习
			
1.概述 1.1what operator 是c++的一个关键字,和运算符如(=)一起使用,表示一个运算符重载函数 1.2why 对于C++提供的所有操作符,通常只支持对于基本数据类型和标准库中提供的 ...
 - tensorflow 代码阅读
			
具体实现: https://github.com/tensorflow/tensorflow/tree/master/tensorflow/core/framework 『深度长文』Tensorflo ...