MyBatis Dynamic SQL

The SQL Builder Class

private String selectPersonSql() {
  return new SQL() {{
    SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME");
    SELECT("P.LAST_NAME, P.CREATED_ON, P.UPDATED_ON");
    FROM("PERSON P");
    FROM("ACCOUNT A");
// left join on 
    INNER_JOIN("DEPARTMENT D on D.ID = P.DEPARTMENT_ID");
    INNER_JOIN("COMPANY C on D.COMPANY_ID = C.ID");
    WHERE("P.ID = A.ID");
    WHERE("P.FIRST_NAME like ?");
    OR();
    WHERE("P.LAST_NAME like ?");
    GROUP_BY("P.ID");
    HAVING("P.LAST_NAME like ?");
    OR();
    HAVING("P.FIRST_NAME like ?");
    ORDER_BY("P.ID");
    ORDER_BY("P.FULL_NAME");
  }}.toString();
}

Select Statements 源码

Select Statements

result用例

import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.ResultMap;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.SelectProvider;
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
import org.mybatis.dynamic.sql.util.SqlProviderAdapter;

...
    @SelectProvider(type=SqlProviderAdapter.class, method="select")
    @Results(id="AnimalDataResult", value={
        @Result(column="id", property="id", id=true),
        @Result(column="animal_name", property="animalName"),
        @Result(column="brain_weight", property="brainWeight"),
        @Result(column="body_weight", property="bodyWeight")
    })
    List<AnimalData> selectMany(SelectStatementProvider selectStatement);

    @SelectProvider(type=SqlProviderAdapter.class, method="select")
    @ResultMap("AnimalDataResult")
    AnimalData selectOne(SelectStatementProvider selectStatement);
...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Mybatis动态SQL是指在Mybatis框架中,根据不同的条件动态生成SQL语句的技术。通过使用Mybatis提供的动态SQL标签,可以根据不同的条件生成不同的SQL语句,从而实现更加灵活的数据查询和操作。动态SQL标签包括if、choose、when、otherwise、foreach等,可以根据需要灵活组合使用,生成符合要求的SQL语句。 ### 回答2: MyBatis动态SQL是一个非常有用的功能,它可以使开发人员在运行期间修改或组合SQL语句。通过使用这种方法,开发人员可以在不同情况下生成不同的SQL语句,从而使应用程序更加灵活。它的主要优点是减少代码重复,提高代码组织的可读性和代码的重用性。在一些需要在运行时动态生成SQL的情况下,这种方式显得尤为重要。 MyBatis动态SQL可以用在许多场景中,例如根据条件查询不同的结果集、动态生成表名等。MyBatis动态SQL的实现,可以借助属性检查器和OGNL表达式编辑器,还可以选用标签库中的if、where、foreach、choose等标签实现。在实际开发中,一些情况下需要动态构建SQL,比如: 1. 动态构建查询条件。通过使用where标签,可以根据输入参数的不同来拼接查询语句。 2. 动态构建排序条件。通过使用orderBy标签,可以根据不同的排序条件来动态构建排序语句。 3. 动态构建更新语句。通过使用set标签,可以根据不同的更新操作来动态构建更新语句。 4. 动态构建插入语句。通过使用foreach标签,可以根据不同的输入参数来动态构建插入语句。 5. 动态构建删除语句。通过使用if标签,可以根据不同的条件来动态构建删除语句。 总而言之,MyBatis动态SQL是一种强大的功能,可以提高我们代码的复用性和可维护性。它可以帮助我们快速构建灵活的SQL语句,并且能够适应不同的业务需求。因此,在编写MyBatis应用程序时,我们应该充分发挥这种功能的优势,提高我们的开发效率和代码质量。 ### 回答3: MyBatis动态SQL是通过MyBatis提供的特殊语法编写灵活且可重用的SQL语句。它利用了MyBatis强大的type handler机制和基于OGNL的表达式语言,可以方便地实现各种业务需求。 动态SQL允许我们基于不同的条件和参数来生成动态的SQL语句,从而实现灵活的查询和操作,常见的动态SQL语句包括IF、WHERE、TRIM、CHOOSE等。其中,IF语句可以根据传入的参数来判断是否包含某一部分SQL语句,WHERE语句可以构建WHERE子句,并自动处理AND和OR的逻辑关系,TRIM语句可以动态去除SQL语句中的空格和逗号,CHOOSE语句可以根据传入的参数选择不同的查询语句。 除了基本的动态SQL语句外,MyBatis还提供了foreach语句,它可以帮助我们循环处理集合类型的参数,并自动生成对应数量的占位符和参数列表。此外,MyBatis还可以通过继承BaseMapper接口并使用@SqlProvider注解自动生成CRUD操作的SQL语句,从而避免手动编写大量相似的SQL语句,并提高代码的可维护性和重用性。 总之,MyBatis动态SQL是一种强大的语法,可以方便地生成灵活、可重用的SQL语句,避免了大量重复劳动和错误。如果你掌握了MyBatis动态SQL的使用,相信会极大地提高你的开发效率和代码质量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值