• 【MyBatisⅡ】动态 SQL


    目录

    🎒1 if 标签

    🫖2 trim 标签

    👠3 where 标签

    🦺4 set 标签

    🎨5 foreach 标签


    动态 sql 是Mybatis的强⼤特性之⼀,能够完成不同条件下不同的 sql 拼接。

    在 xml 里面写判断条件。

    动态SQL 在数据库里的体现就是,phtot 这个字段在数据输入的时候,在没有默认值情况下,可以为空。

     

     在 SQL 中,空和 NULL 是两个不同的概念。空什么也没有显示,而 NULL 显示了 NULL。

    1 if 标签

    1. /**
    2. * 动态 sql
    3. * if 标签
    4. * @param userInfo
    5. * @return
    6. */
    7. int add2(UserInfo userInfo);
    1. "add2">
    2. insert into userinfo(username,password
    3. <if test="photo != null">
    4. ,photo
    5. if>
    6. )values(#{username},#{password}
    7. <if test="photo != null">
    8. ,#{photo}
    9. if>
    10. )
    1. @Test
    2. void add2() {
    3. UserInfo userInfo = new UserInfo();
    4. userInfo.setUsername("猪八戒");
    5. userInfo.setPassword("569875");
    6. userInfo.setPhoto("lion.png");
    7. int result = userMapper.add2(userInfo);
    8. System.out.println(result);
    9. }

     

    1. @Test
    2. void add2() {
    3. UserInfo userInfo = new UserInfo();
    4. userInfo.setUsername("如来佛祖");
    5. userInfo.setPassword("99999");
    6. int result = userMapper.add2(userInfo);
    7. System.out.println(result);
    8. }

    2 trim 标签

    多个字段可以为空的情况下,只要有一个字段不为空,就需要用到添加操作。动态拼接。

    1. /**
    2. * trim 标签
    3. * @param userInfo
    4. * @return
    5. */
    6. int add3(UserInfo userInfo);
    1. "add3">
    2. insert into userinfo
    3. "(" suffix=")" suffixOverrides=",">
    4. <if test="username!=null">
    5. username,
    6. if>
    7. <if test="password!=null">
    8. password,
    9. if>
    10. <if test="photo!=null">
    11. photo
    12. if>
    13. values
    14. "(" suffix=")" suffixOverrides=",">
    15. <if test="username!=null">
    16. #{username},
    17. if>
    18. <if test="password!=null">
    19. #{password},
    20. if>
    21. <if test="photo!=null">
    22. #{photo}
    23. if>

     

    1. @Test
    2. void add3() {
    3. UserInfo userInfo = new UserInfo();
    4. userInfo.setUsername("观音菩萨");
    5. userInfo.setPassword("3785");
    6. int result = userMapper.add3(userInfo);
    7. System.out.println(result);
    8. }

     

    1. @Test
    2. void add3() {
    3. UserInfo userInfo = new UserInfo();
    4. userInfo.setUsername("卓耿");
    5. userInfo.setPassword("sfgoz");
    6. userInfo.setPhoto("dragon.jpn");
    7. int result = userMapper.add3(userInfo);
    8. System.out.println(result);
    9. }

     

     

    3 where 标签

    根据传入参数,来决定 SQL 语句是否有 where 关键字。动态生成 where 语句。

    对于 int 类型,不传的话,默认为 0 ,而不是 null。

    where 标签除了动态生成 where 语句外,还可以自动的去掉语句前面的 and。所以 and 只能放在语句的前面,放在最后面会报错!

    1. /**
    2. * where 标签
    3. * @param userInfo
    4. * @return
    5. */
    6. List getListByWhere(UserInfo userInfo);
    1. @Test
    2. void getListByWhere() {
    3. UserInfo userInfo = new UserInfo();
    4. userInfo.setId(1);
    5. List list = userMapper.getListByWhere(userInfo);
    6. System.out.println(list);
    7. }

    1. @Test
    2. void getListByWhere() {
    3. UserInfo userInfo = new UserInfo();
    4. userInfo.setUsername("白骨精");
    5. List list = userMapper.getListByWhere(userInfo);
    6. System.out.println(list);
    7. }

     

    也可以使用 trim 标签完成上述 where 标签的功能,代码如下:

    4 set 标签

    用于修改。

    1. /**
    2. * set 标签
    3. * @param userInfo
    4. * @return
    5. */
    6. int update2(UserInfo userInfo);

     

    1. "update2">
    2. update userinfo
    3. <if test="username!=null">
    4. username=#{username},
    5. if>
    6. <if test="password!=null">
    7. password=#{password},
    8. if>
    9. <if test="photo!=null">
    10. photo=#{photo}
    11. if>
    12. where id=#{id}

     

    1. @Test
    2. void update2() {
    3. UserInfo userInfo = new UserInfo();
    4. userInfo.setUsername("小玫瑰");
    5. userInfo.setId(6);
    6. userInfo.setPassword("palsov");
    7. userInfo.setPhoto("rose.jpg");
    8. int result = userMapper.update2(userInfo);
    9. System.out.println(result);
    10. }

    1. @Test
    2. void update2() {
    3. UserInfo userInfo = new UserInfo();
    4. userInfo.setUsername("卡莉熙");
    5. userInfo.setId(4);
    6. userInfo.setPassword("msjf");
    7. int result = userMapper.update2(userInfo);
    8. System.out.println(result);
    9. }

     

    可以看出,set 标签会自动去除末尾的逗号! 

    5 foreach 标签

    多条 sql 数据删除的时候。批量删除。

    1. /**
    2. * foreach 标签
    3. * @param ids
    4. * @return
    5. */
    6. int delByIds(List ids);
    1. "delByIds">
    2. delete from userinfo
    3. where id in
    4. "ids" open="(" close=")" item="id" separator=",">
    5. #{id}
    1. @Test
    2. void delByIds() {
    3. List list = new ArrayList(){{
    4. add(1);
    5. add(2);
    6. add(3);
    7. }};
    8. int ret = userMapper.delByIds(list);
    9. System.out.println(ret);
    10. }


     

  • 相关阅读:
    【机械臂、无人机规控篇】(9)机械臂轨迹规划、跟踪控制方向
    中文语法纠错开源大模型
    Python中 whl包、tar.gz包的区别
    qpoases解MPC控制
    文本格式清理工具 TextSoap mac中文版软件特色
    webpack 3 + Vue2 使用dotenv配置多环境
    rk3588 大小核启动
    JVM 问题排查-可视化工具
    冰冰学习笔记:内存地址空间
    在 SpringBoot 项目中使用 Swagger 接口文档演示
  • 原文地址:https://blog.csdn.net/qq_41233305/article/details/132617312