栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis-动态 SQL 语句

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatis-动态 SQL 语句

MyBatis-动态 SQL 语句 1.动态 SQL-官方文档 1.文档地址

https://mybatis.org/mybatis-3/zh/dynamic-sql.html

2.为什么需要动态 SQL

1、动态 SQL 是 MyBatis 的强大特性之一

2、使用 JDBC 或其它类似的框架,根据不同条件拼接 SQL 语句非常麻烦,例如拼接时要 确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号等

3、 SQL 映射语句中的强大的动态 SQL 语言, 可以很好的解决这个问题.

2.动态 SQL-基本介绍

● 基本介绍

  1. 在一个实际的项目中,sql 语句往往是比较复杂的
  2. 为了满足更加复杂的业务需求,MyBatis 的设计者,提供了动态生成 SQL 的功能。

● 动态 SQL 必要性

  1. 比如我们查询Monster 时,如果程序员输入的age 不大于0, 我们的sql语句就不带age 。
  2. 更新 Monster 对象时,没有设置的新的属性值,就保持原来的值,设置了新的值,才更 新

● 解决方案分析

  1. 从上面的需求我们可以看出,有时我们在生成 sql 语句时,在同一个方法中,还要根据 不同的情况生成不同的 sql 语句.
  2. 解决方案: MyBatis 提供的动态 SQL 机制

● 动态 SQL 常用标签

动态 SQL 提供了如下几种常用的标签,类似我们 Java 的控制语句:

  1. if [判断]
  2. where [拼接 where 子句]
  3. choose/when/otherwise [类似 java 的 switch 语句, 注意是单分支]
  4. foreach [类似 in ]
  5. trim [替换关键字/定制元素的功能]
  6. set [在 update 的 set 中,可以保证进入set 标签的属性被修改,而没有进入 set 的,保持原来的值]
3.动态 SQL-案例演示 1.新建 Module dynamic-sql

2.if 标签应用实例

● 需求:请查询 age 大于 10 的所有妖怪,如果程序员输入的 age 不大于 0, 则输出所有 的妖怪!

1.修改MonsterMapper.java

//● 需求:请查询 age 大于 10 的所有妖怪,如果程序员输入的 age 不大于 0, 则输出所有 的妖怪!
//@Param注解是Mybatis用于指定参数名称的注解,建议都写上
List findMonsterByAge(@Param("age") Integer age);

2.修改MonsterMapper.xml



   select * from monster
      
      
         
            llp name=#{name}
         
         
            and id=#{id}
         
      

  1. 修改 MonsterMapperTest.java 并完成测试
@Test
public void findMonsterByName_Trim(){
    Map map = new HashMap<>();
    map.put("id",12);
    map.put("name","牛魔王");
    // select * from monster where name=? and id=?
    List monsterList = monsterMapper.findMonsterByName_Trim(map);
    System.out.println(monsterList);
}
7.set 标签应用实例

应用场景:set 元素可以用于动态包含需要更新的列,忽略其它不更新的列,set 元素会动态地在行首插入 SET 关键字,并会删掉额外的逗号(这些逗号是在使用条件语句给列赋值时引入的)。或者,你可以通过使用trim元素来达到同样的效果:


  ...

● 需求: 请对指定 id 的妖怪进行 修改,如果没有设置新的属性,则保持原来的值

  1. 修改 MonsterMapper.java
//测试 Set 标签
 void updateMonster_set(Map map);
  1. 修改 MonsterMapper.xml

   UPDATE monster
   
   
      
         age = #{age},
      
      
          birthday = #{birthday},
      
      
          email = #{email},
      
      
          gender = #{gender},
      
      
          name = #{name},
      
      
          salary = #{salary},
      
   
    WHERe id = #{id}

  1. 修改 MonsterMapperTest.java 并完成测试
@Test
public void updateMonster_set() {
    Map map = new HashMap();
    map.put("id", 1);
    map.put("name", "牛魔王");
    map.put("age", 10);
    // UPDATE monster SET age = ?, name = ? WHERe id = ?
    monsterMapper.updateMonster_set(map);
    if (sqlSession != null) {
        sqlSession.commit();
        sqlSession.close();
    }
    System.out.println("操作成功~");
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1006265.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号