# test-mbg **Repository Path**: lucien92_lu/test-mbg ## Basic Information - **Project Name**: test-mbg - **Description**: 测试MyBatis动态SQL - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-09-06 - **Last Updated**: 2021-09-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 结构 ```txt src/mian/java ├── TestMbgApplication --springboot启动类 └── com.lucine.mbg ├── config --配置 ├── controller --控制层 ├── entity --实体类 ├── mapper --映射类 └── server --服务层 └──impl --实现层 src/mian/resource ├── application.yml --springboot配置 ├── generator.properties --MyBatisGenerator数据源配置 └── generatorConfig.xml --MyBatisGenerator配置 ``` ### 说明 测试MyBatise的动态SQL功能 官方文档地址:https://mybatis.org/mybatis-dynamic-sql/docs/introduction.html #### 1.完整pom文件: ```xml 4.0.0 org.springframework.boot spring-boot-starter-parent 2.5.4 cn.lucien.mbg test-mbg 0.0.1-SNAPSHOT test-mbg Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator org.springframework.boot spring-boot-starter-aop org.springframework.boot spring-boot-starter-test test org.mybatis.spring.boot mybatis-spring-boot-starter 2.2.0 com.github.pagehelper pagehelper-spring-boot-starter 1.3.1 com.alibaba druid-spring-boot-starter 1.2.6 org.mybatis.generator mybatis-generator-core 1.4.0 org.mybatis.dynamic-sql mybatis-dynamic-sql 1.2.0 mysql mysql-connector-java runtime org.projectlombok lombok true org.springframework.boot spring-boot-maven-plugin org.projectlombok lombok ``` 主要集成的依赖为: ```xml org.mybatis.spring.boot mybatis-spring-boot-starter 2.2.0 org.mybatis.dynamic-sql mybatis-dynamic-sql 1.2.0 ``` #### 2.整合MyBatis逆向工程 详见: `application.yml` `generator.properties` `generatorConfig.xml` `com.lucien.mbg.config.Generator.java` #### 3.运行Generator.java生成逆向工程文件 `TMbg.java -- 测试用实体类` `TMbgDynamicSqlSupport.java -- 实体类(TMbg)的动态SQL支持类` `TMbgMapper.java -- 映射类` 由于 `generatorConfig.xml`中的 `` **注意:** ***targetRuntime***配置由之前的***MyBatis3***改为***MyBatis3DynamicSQL***,将不再生成*mapper.xml文件 #### 4.创建控制层,服务层以及实现层代码,测试动态SQL功能 ```java package com.lucien.mbg.server.impl; // 注意: 我测试的时候Eclipse需要手动import static org.mybatis.dynamic.sql.SqlBuilder.* import static org.mybatis.dynamic.sql.SqlBuilder.isIn; import java.util.List; import org.mybatis.dynamic.sql.SqlBuilder; import org.mybatis.dynamic.sql.render.RenderingStrategies; import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.lucien.mbg.entity.TMbg; import com.lucien.mbg.mapper.TMbgDynamicSqlSupport; import com.lucien.mbg.mapper.TMbgMapper; import com.lucien.mbg.server.ITMbgServer; /** * 实现层:测试MyBatis动态SQL * @author Lucen_Lu * @date 2021/09/06 */ @Service public class TMbgServerImpl implements ITMbgServer { /** 流方式操作数据,需要java8以上 */ private static final boolean STYLE_STREAM = true; @Autowired TMbgMapper mbgMapper; /* 示例:通过ID列表查询,并根据ID倒序排列*/ @Override public List selectByIds(List ids) { // Eclipse自动导入crtl+shift+O不奏效 // isIn(), 需要手动导入包,注意应为 import static: // import static org.mybatis.dynamic.sql.SqlBuilder.* // 否则isIn(ids)要写成SqlBuilder.isIn(ids) // 流方式操作数据,需要java8以上 if (STYLE_STREAM) { return mbgMapper.select(s -> { return s.where(TMbgDynamicSqlSupport.id, isIn(ids)); }); } // 非流方式操作数据 SelectStatementProvider selectStatement = // SqlBuilder // select id, name SqlBuilder.select(TMbgMapper.selectList) // from T_MBG .from(TMbgDynamicSqlSupport.TMbg) // where id in (ids) .where(TMbgDynamicSqlSupport.id, isIn(ids)) // orderBy id desc .orderBy(TMbgDynamicSqlSupport.id.descending()) // .build().render(RenderingStrategies.MYBATIS3); return mbgMapper.selectMany(selectStatement); } } ``` **注意:** Eclipse自动导入`crtl+shift+O`不奏效, `isIn()`, 需要手动`import static org.mybatis.dynamic.sql.SqlBuilder.*`,否则`isIn(ids)`要写成`SqlBuilder.isIn(ids)`. 某个大活人就是被导入包坑了很久.