MyBatis动态SQL(一)
2019-07-13 22:12
1496 查看
MyBatis 的强大特性之一便是它的动态 SQL。动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多元素需要花时间了解。MyBatis 3 大大精简了元素种类,现在只需学习原来一半的元素便可。MyBatis 采用功能强大的基于 OGNL 的表达式来淘汰其它大部分元素。
1.if标签
映射文件配置:
<select id="query" resultMap="baseMap" parameterType="user"> select * from t_user <!-- 这里的1=1方便测试 --> where 1=1 <!-- 条件if标签通过判断name参数是否为空决定是否使用这个SQL语句 --> <if test="name!=null" > and name=#{name} </if> </select>
测试代码name=null的情况下:
@Test public void test() { List<User> list = mapper.query(new User()); for (User user : list) { System.err.println("在name=null的情况下"+user); } }
测试结果:
测试代码name!=null的情况下:
@Test public void test() { User testUser = new User(); testUser.setName("zhangsan"); List<User> list = mapper.query(testUser); for (User user : list) { System.err.println("在name=null的情况下"+user); } }
2. choose,when,otherwise
choose选择语句,差不多等同于java语句中的switch语句。通过创建多个标签元素来选择符合要求的元素。when表示在满足某种情况下调用该内容,otherwise表示在所有情况都不满足的情况下调用的内容。
配置标签代码使用方式:
<select id="query" resultMap="baseMap" parameterType="user"> select * from t_user where 1=1 <!-- 如果满足其中的条件就调用其中的SQL语句 --> <choose> <when test="no!=null"> and no=#{no} </when> <when test="name!=null"> and name=#{name} </when> <otherwise> <if test="age!=null" > and age=#{age} </if> </otherwise> </choose> </select>
3.where
上述配置代码中为了方便测试我都在where后面添加1=1来方便测试,但是有时候我们对where是否使用也需要动态决定。这个时候就可以使用where标签来解决这个问题。
<select id="queryById" resultType="user" parameterType="int"> select * from t_user <where> <if test="no!=null" > no=#{no} </if> </where> </select>
这里满足条件就会自动添加where并调用其中的SQL代码。
4.set
set标签主要用于SQL更新UPDATE代码中,用法如下代码:
<update id="update" parameterType="user"> update t_user <!-- 通过set来动态设置更新的参数 --> <set> <if test="name!=null">name=#{name}</if> <if test="age!=null">age=#{age}</if> </set> where no = #{no} </update>
5.trim
trim标签是一个格式化标签,可以用来代替set或者where标签的功能。具体用法如下代码:
<update id="update" parameterType="user"> update t_user <!-- <set> <if test="name!=null">name=#{name}</if> <if test="age!=null">age=#{age}</if> </set> --> <!-- prefix表示调用SQL语句时在最前面添加的前缀 prefixOverrides表示调用SQL语句时去掉的第一个指定内容 suffix表示调用SQL语句时在最后面添加的后缀 suffixOverride表示调用SQL语句时去掉的最后一个指定内容 --> <trim prefix="set" prefixOverrides="and | or"> <if test="name!=null"> and name=#{name}</if> <if test="age!=null"> or age=#{age}</if> </trim> where no = #{no} </update>
通过这个trim获得了跟set一样的效果,不过更具有灵活性。
相关文章推荐
- Mybatis动态SQL-if标签
- Spring3 整合MyBatis3 配置多数据源 动态选择SqlSessionFactory
- MyBatis参数传入集合之foreach动态sql
- mybatis自定义动态sql传入对象
- 告诉你什么是MyBatis的动态 SQL···
- Mybatis动态sql的foreach循环
- MyBatis学习 之 三、动态SQL语句
- MyBatis3-动态SQL语句
- Mybatis动态sql
- MyBatis参数传入集合之foreach动态sql
- 深入浅出Mybatis系列(九)---强大的动态SQL
- 0048 MyBatis动态SQL简易入门示例
- Mybatis之动态SQL语句
- mybatis高级版 利用动态sql片段加入 foreach 循环拼接 实现 单表批量查询、批量修改、批量删除、批量添加。
- MyBatis学习 之 三、动态SQL语句
- Mybatis第三篇【动态SQL】
- mybatis之入门到开发(三)之常用对象SqlSessionFactory和SqlSession,动态sql,输入映射和输出映射
- Mybatis总结(6)---Mybatis动态sql
- MyBatis动态SQL底层原理分析 与 JavaScript中的Date对象,以及UTC、GMT、时区的关系
- mybatis动态sql中的trim标签的使用(转)