【JavaEE & Spring】MyBatis 操作数据库 - 进阶

MyBatis 操作数据库 - 进阶

  • 1. 动态SQL
    • 1.1 \标签
    • 1.2 \标签
    • 1.3 \标签
    • 1.4 \标签
    • 1.5 \标签
    • 1.6 \标签

1. 动态SQL

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

1.1 标签

在注册⽤⼾的时候,可能会有这样⼀个问题,如下图所⽰:
【JavaEE & Spring】MyBatis 操作数据库 - 进阶_第1张图片
注册分为两种字段:必填字段和⾮必填字段,那如果在添加⽤⼾的时候有不确定的字段传⼊,程序应该如何实现呢?

这个时候就需要使⽤动态标签 来判断了,⽐如添加的时候性别 gender 为⾮必填字段,具体实现如下:【JavaEE & Spring】MyBatis 操作数据库 - 进阶_第2张图片
Mapper.xml实现:

<select id="insertUserByCondition">
        insert into userinfo (
        <trim suffixOverrides=",">
            <if test="username != null">
                username,
            if>
            <if test="password != null">
                `password`,
            if>
            <if test="age != null">
                age,
            if>
            <if test="gender != null">
                gender,
            if>
            <if test="phone != null">
                phone
            if>
        trim>

        )
        values (
        <trim suffixOverrides=",">
            <if test="username != null">
                #{username},
            if>
            <if test="password != null">
                #{password},
            if>
            <if test="age != null">
                #{age},
            if>
            <if test="gender != null">
                #{gender},
            if>
            <if test="phone != null">
                #{phone}
            if>
        trim>
        )
    select>

或者使⽤注解⽅式(不推荐)
【JavaEE & Spring】MyBatis 操作数据库 - 进阶_第3张图片

1.2 标签

之前的插⼊⽤⼾功能,只是有⼀个 gender 字段可能是选填项,如果有多个字段,⼀般考虑使⽤标签结合标签,对多个字段都采取动态⽣成的⽅式。

标签中有如下属性:

  • prefix:表⽰整个语句块,以prefix的值作为前缀
  • suffix:表⽰整个语句块,以suffix的值作为后缀
  • prefixOverrides:表⽰整个语句块要去除掉的前缀
  • suffixOverrides:表⽰整个语句块要去除掉的后缀

1.3 标签

【JavaEE & Spring】MyBatis 操作数据库 - 进阶_第4张图片

1.4 标签

【JavaEE & Spring】MyBatis 操作数据库 - 进阶_第5张图片

1.5 标签

对集合进⾏遍历时可以使⽤该标签。标签有如下属性:

  • collection:绑定⽅法参数中的集合,如 List,Set,Map或数组对象
  • item:遍历时的每⼀个对象
  • open:语句块开头的字符串
  • close:语句块结束的字符串
  • separator:每次遍历之间间隔的字符串

【JavaEE & Spring】MyBatis 操作数据库 - 进阶_第6张图片

1.6 标签

问题分析:
在xml映射⽂件中配置的SQL,有时可能会存在很多重复的⽚段,此时就会存在很多冗余的代码
【JavaEE & Spring】MyBatis 操作数据库 - 进阶_第7张图片
我们可以对重复的代码⽚段进⾏抽取,将其通过 标签封装到⼀个SQL⽚段,然后再通过 标签进⾏引⽤。
【JavaEE & Spring】MyBatis 操作数据库 - 进阶_第8张图片

你可能感兴趣的:(#,Java,java-ee,spring,mybatis)