真正的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的主要内容,如果未能解决你的问题,请参考以下文章