# 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)`.
某个大活人就是被导入包坑了很久.