真正的Mybatis动态sql —MyBatis Dynamic SQL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了真正的Mybatis动态sql —MyBatis Dynamic SQL相关的知识,希望对你有一定的参考价值。

参考技术A

这个库是一个用于生成动态SQL语句的框架。可以将它看作是一个类型安全的sQL模板库,它提供了对MyBatis3和Spring JDBC模板的额外支持。该库将生成供MyBatis或Spring使用的格式化的fuL LETE INET、SELECT和UPDATE语句。最常见的用例是生成可以直接由MyBatis使用的语句和一组数学参数。该库还将生成与Spring JDBC模板兼容的语句和参数对象。该库通过实现一个类似SQL的DSL来工作,该DSL创建一个对象,该对象包含完整的SQL语句和该语句所需的任何参数。

https://github.com/mybatis/mybatis-dynamic-sql

https://mybatis.org/mybatis-dynamic-sql/docs/introduction.html

org.mybatis.dynamic.sql.SqlTable 表定义包括表的实际名称(包括适当的模式)。如果需要,可以在选择语句中应用表别名。你的Table应该继承SqlTable 类。
org. mybatiss .dynamic.sql. sqlcolumn 用于定义在库中使用的列。应该使用SqlTable中的构建器方法创建SqlColumns。列定义包括:

我们建议使用以下使用模式以提供最大的灵活性。这个模式允许您以“限定”或“非限定”的方式使用表和列名,这看起来像自然的SQL。例如,在下面的列中,一个列可以被称为 firstName 或 user.firstName 。

该库将创建用作 MyBatis mapper 输入的类。这些类包括生成的SQL,以及与生成的SQL匹配的参数集。这两者都是MyBatis所要求的。这些对象应该是 MyBatis mapper 方法的唯一参数。
(注意: MyBatis Dynamic SQL 不需要XML文件就能工作的很好,但并不意味着不支持XML,毕竟 **MyBatis **最初被设计为是一个 XML 驱动的框架。当你使用关联查询,需要复杂的映射,那么使用XML 与 MyBatis Dynamic SQL 结合起来或者是更好选择,你的XML或许只需要包含一些)

mybatis学习

1.mybatis是一个ORM持久层框架的佼佼者,真正上实现了SQL语句与java代码分离。优秀的功能,动态分离,缓存,插件-pageHelper等

2.SQL语句使用in的时候,可以用数组封装in中的值。

3.批量操作数据的情况,可以把操作的数据封装在数组中

4.mybaits的入参处理:1.传递单个参数的形式(mybaits会自动进行参数的赋值) 2.传递多参数的时候(mybatis会自动封装在Map集合中)

3.Collection,List,Array作为参数,封装为Map,有一定规则的。

5.多参数传值的时候 #{名称}的名称是有规范的为[arg0,arg1,parm1,parm2] ,如果用#{username} and #{userpass} 会报错,用#{arg0} and #{arg1} 就不会报错。

可以用javabean处理:

技术图片

代码如下:

public Person getPersonByNameAndGender(Person person)

可以用Map传递多参数:

技术图片

代码如下:

public Person getPersonByNameAndGender(Map<String,Object> param);

利用注解@parm:

技术图片

代码如下:

public Person getPersonByNameAndGender(@Param("username") String username,@Param("gender") String gender)

collection集合处理参数:

技术图片

也可以用别名来代替key值:

  public Person getPersonByCollection(@Param("test") int[] ids);

技术图片

技术图片

技术图片

动态遍历foreach;

利用<trim>标签

 <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="id != null" >
        ID,
      </if>
      <if test="regType != null" >
        regType,
      </if>
      <if test="lastLandIp != null" >
        lastLandIp,
      </if>
      <if test="pwd != null" >
        PWD,
      </if>
      <if test="userName != null" >
        USERNAME,
      </if>
      <if test="email != null" >
        EMAIL,
      </if>
      <if test="isActivation != null" >
        ISACTIVATION,
      </if>
      <if test="emailActiveDate != null" >
        EMAILACTIVEDATE,
      </if>
      <if test="mobilePhone != null" >
        MOBILEPHONE,
      </if>
      <if test="isBindPhone != null" >
        ISBINDPHONE,
      </if>
      <if test="bindPhoneDate != null" >
        BINDPHONEDATE,
      </if>
      <if test="nickName != null" >
        NICKNAME,
      </if>
      <if test="male != null" >
        MALE,
      </if>
      <if test="birth != null" >
        BIRTH,
      </if>
      <if test="identityCode != null" >
        IDENTITYCODE,
      </if>
      <if test="identityType != null" >
        IDENTITYTYPE,
      </if>
      <if test="province != null" >
        PROVINCE,
      </if>
      <if test="city != null" >
        CITY,
      </if>
      <if test="address != null" >
        ADDRESS,
      </if>
      <if test="postCode != null" >
        POSTCODE,
      </if>
      <if test="homePhone != null" >
        HOMEPHONE,
      </if>
      <if test="regTime != null" >
        REGTIME,
      </if>
      <if test="lastLandTime != null" >
        LASTLANDTIME,
      </if>
      <if test="tempLastTime != null" >
        TEMPLASTTIME,
      </if>
      <if test="status != null" >
        STATUS,
      </if>
      <if test="payPwd != null" >
        PAYPWD,
      </if>
        ZM_SITEID,
      <if test="addDate != null" >
        ADDDATE,
      </if>
      <if test="realName != null" >
        REALNAME,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
      <if test="id != null" >
        #{id,jdbcType=DECIMAL},
      </if>
      <if test="regType != null" >
        #{regType,jdbcType=DECIMAL},
      </if>
      <if test="lastLandIp != null" >
        #{lastLandIp,jdbcType=VARCHAR},
      </if>
      <if test="pwd != null" >
        #{pwd,jdbcType=VARCHAR},
      </if>
      <if test="userName != null" >
        #{userName,jdbcType=VARCHAR},
      </if>
      <if test="email != null" >
        #{email,jdbcType=VARCHAR},
      </if>
      <if test="isActivation != null" >
        #{isActivation,jdbcType=DECIMAL},
      </if>
      <if test="emailActiveDate != null" >
        #{emailActiveDate,jdbcType=TIMESTAMP},
      </if>
      <if test="mobilePhone != null" >
        #{mobilePhone,jdbcType=VARCHAR},
      </if>
      <if test="isBindPhone != null" >
        #{isBindPhone,jdbcType=DECIMAL},
      </if>
      <if test="bindPhoneDate != null" >
        #{bindPhoneDate,jdbcType=TIMESTAMP},
      </if>
      <if test="nickName != null" >
        #{nickName,jdbcType=VARCHAR},
      </if>
      <if test="male != null" >
        #{male,jdbcType=DECIMAL},
      </if>
      <if test="birth != null" >
        #{birth,jdbcType=TIMESTAMP},
      </if>
      <if test="identityCode != null" >
        #{identityCode,jdbcType=VARCHAR},
      </if>
      <if test="identityType != null" >
        #{identityType,jdbcType=DECIMAL},
      </if>
      <if test="province != null" >
        #{province,jdbcType=VARCHAR},
      </if>
      <if test="city != null" >
        #{city,jdbcType=VARCHAR},
      </if>
      <if test="address != null" >
        #{address,jdbcType=VARCHAR},
      </if>
      <if test="postCode != null" >
        #{postCode,jdbcType=VARCHAR},
      </if>
      <if test="homePhone != null" >
        #{homePhone,jdbcType=VARCHAR},
      </if>
      <if test="regTime != null" >
        #{regTime,jdbcType=TIMESTAMP},
      </if>
      <if test="lastLandTime != null" >
        #{lastLandTime,jdbcType=TIMESTAMP},
      </if>
      <if test="tempLastTime != null" >
        #{tempLastTime,jdbcType=TIMESTAMP},
      </if>
      <if test="status != null" >
        #{status,jdbcType=DECIMAL},
      </if>
      <if test="payPwd != null" >
        #{payPwd,jdbcType=VARCHAR},
      </if>
       1,
      <if test="addDate != null" >
        #{addDate,jdbcType=TIMESTAMP},
      </if>
      <if test="realName != null" >
        #{realName,jdbcType=VARCHAR},
      </if>
    </trim>

 

以上是关于真正的Mybatis动态sql —MyBatis Dynamic SQL的主要内容,如果未能解决你的问题,请参考以下文章

mybatis ——xml方式与动态sql

MyBatis 构造动态 SQL 语句

MyBatis的设计思想

mybatis学习

MyBatis动态SQL————MyBatis动态SQL标签的用法

):MyBatis动态SQL