week17_day01_Mybatis03之动态sql

动态Sql标签

  1. where
    连接条件
    在这里插入图片描述
    a. 去掉where标签直接跟着关系词(and或or)
    在这里插入图片描述
    b. where标签无条件下不会拼接where字段
    在这里插入图片描述

  1. if
    做的判断:提供了一个条件
    如果满足条件:拼接if标签中的语句
    如果不满足:则不会拼接
    在这里插入图片描述

test属性中的判断:
大于:gt
小于:lt
连接条件:and或者or
等于:==
不等于:!=
大于等于:比如判断age≥20 → age gt 20 or age == 20
小于等于:比如判断age≤20 → age lt 20 or age == 20
字符串比较:字符串用 ‘’ ,比如判断username为songge → username == ‘songge’
字符串长度:’songge’.length ,如果要判断username的长度 → username.length

业务:如果年龄大于等于20 查询条件 age ≥ #{age}
如果年龄小于20 查询条件 age < #{age}
在这里插入图片描述
在这里插入图片描述


if标签有else吗
if标签是没有else,如果你想写else那么你就写两个if标签,test属性中的条件是相反的
在这里插入图片描述


  1. choose-when-otherwise
    做的就是if-else
    when代表的是if
    otherwise代表else
    when标签中也是去写test属性 → 用法和if标签中的test一致
    → when标签和otherwise标签要作为choose标签的子标签

重写一下if标签中关于年龄判断的案例
在这里插入图片描述


  1. trim(去除)
    去除功能:
    prifixOverrides:如果最前面包含某个词 → 去除掉
    suffixOverrides:如果最后面包含某个词 → 去除掉
    补充功能:
    prefix:在trim标签最前面补充
    suffix:在trim标签最后面补充

业务:updateUser → update 传入的user对象的全部字段(不管是否为null全部更新)
updateSelectiveUser → update传入的user对象不为null的字段

a. 引出trim标签的使用
在这里插入图片描述
b. trim标签去除内容
在这里插入图片描述
c. 其他属性的使用
在这里插入图片描述


  1. set
    更新语句 update标签中使用
    更新语句的部分放到set标签 → 功能类似于:
<trim prefix=”set” suffixOverrides=”,”> 

在这里插入图片描述


  1. sql、include
    做的事情是
    sql标签:定义sql → 定义了映射文件中的全局变量
    include标签:引用sql → 引用这个全局变量
    在这里插入图片描述
    两种常见的使用情况:
    a. 将查询结果的列写入到sql片段中
    在这里插入图片描述
    b. 通用的条件写入到sql片段中
    在这里插入图片描述

  1. selectKey
    在执行insert语句之前或之后额外的执行一次查询

业务:user这张表id是自增,执行insert(user)时,不定义id →
执行完之后,user对象上我们又想要获得自增的id

a. order=after
在这里插入图片描述
b. order=before
业务:password利用uuid来进行生成 → 构造user时就不设置password → 利用selectKey来设置
在这里插入图片描述


  1. foreach
    遍历

a. 无注解数组
在这里插入图片描述

b. 无注解list
区别在于collection中的写法是不同的
在这里插入图片描述

c. @Param注解
不管你传入的是数组还是list → 写啥用啥
在这里插入图片描述


d. 另一个使用场景:insertList(一次性插入多条数据)
在这里插入图片描述


  1. useGenerateKeys keyProperty获得自增的主键(只有主键可以自增的数据库才可以这样做,mysql就可以)
    insert标签中使用属性 → useGenerateKeys和keyProperty

a. 单条数据获得自增主键
在这里插入图片描述
b. 多条数据获得自增主键
在这里插入图片描述


注意:
在这里插入图片描述
这种异常信息一般是:sql语句写错了,应当检查映射文件中的sql语句。


作业:使用今天学过的sql标签 实现一个批量输入user对象的接口

int insertUsers(List<User> users)
int insertUsers(@Param("users")List<User> users) 

该接口的users能够获得自增的主键

在这里插入图片描述
在这里插入图片描述
测试:


    @Test
    public void Homework1(){
        User user6 = new User(null,"student6","zhengdaodeguang",18,"male",null);
        User user7 = new User(null,"student7","zhengdaodeguang",18,"male",null);
        User user8 = new User(null,"student8","zhengdaodeguang",18,"male",null);
        User user9 = new User(null,"student9","zhengdaodeguang",18,"male",null);
        List<User> users = new ArrayList<>();
        users.add(user6);
        users.add(user7);
        users.add(user8);
        users.add(user9);

        int i = userMapper.insertUsers3(users); //i = 4
        for (User user : users) {
            logger.info(user);
        }
    }


    @Test
    public void Homework2(){
        User user6 = new User(null,"student6","zhengdaodeguang",18,"male",null);
        User user7 = new User(null,"student7","zhengdaodeguang",18,"male",null);
        User user8 = new User(null,"student8","zhengdaodeguang",18,"male",null);
        User user9 = new User(null,"student9","zhengdaodeguang",18,"male",null);
        List<User> users = new ArrayList<>();
        users.add(user6);
        users.add(user7);
        users.add(user8);
        users.add(user9);

        int i = userMapper.insertUsers2(users); //i = 4
        for (User user : users) {
            logger.info(user);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-玫瑰少年-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值