springcloud整合MybatisPlus
一、项目引入mybatis-plus
1、引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
2、配置文件新增配置
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&allowMultiQueries=true&rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
mapper-locations: classpath:mapper/**/*Mapper.xml
global-config:
db-config:
#主键类型 0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID";
id-type: assign_id
# 默认数据库表下划线命名
table-underline: true
configuration:
# 返回类型为Map,显示null对应的字段
call-setters-on-nulls: true
# 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
3、启动类需要增加一个@MapperScan注解
@SpringBootApplication
@MapperScan("com.lcz.springcloud.mapper")
public class SpringcloudApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudApplication.class, args);
}
}
这时候就可以启动项目了,mybatis-plus已经整合完成。
4、mybatis-plus逆向生成代码,我这里是放在test包下面的
package com.lcz.springcloud.mybatisplus;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.mysql.cj.jdbc.Driver;
import org.junit.Before;
import org.junit.Test;
public class MyBatisGenerator {
static AutoGenerator mpg = null;
String jdbcUsername="root";
String jdbcPassword="root";
String jdbcUrl="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai";
String parent = "com.lcz.springcloud";
String module;
String[] tablePrefix;
String[] tables;
public void initTables(){
tablePrefix = new String[] {"zs"};
tables = new String[] {"user"};
}
/**
* 新增模块
*/
@Test
public void newModule() {
initAutoGenerator();
mpg.getGlobalConfig().setFileOverride(false);
TemplateConfig tc = new TemplateConfig();
// 设置不生成controller
tc.setController(null);
mpg.setTemplate(tc);
mpg.execute();
}
/**
* 更新实体
*/
@Test
public void updateEntity() throws InterruptedException {
int i = 0;
do {
System.err.println("!!!更新实体会覆盖实体类,请注意合并实体类代码!!!");
i++;
Thread.sleep(1000L);
}while (i < 5);
for (String t : tables){
// fix 缓存
initAutoGenerator();
mpg.getGlobalConfig().setFileOverride(true);
mpg.getStrategy().setInclude(t);
// 只更新entity
TemplateConfig tc = new TemplateConfig();
tc.setMapper(null);
tc.setXml(null);
tc.setService(null);
tc.setServiceImpl(null);
tc.setController(null);
mpg.setTemplate(tc);
mpg.execute();
}
}
@Before
public void init() {
initTables();
}
void initAutoGenerator(){
mpg = new AutoGenerator();
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
mpg.setCfg(cfg);
// 全局配置
GlobalConfig gc = new GlobalConfig();
// 配置主键生成策略,此处为 ASSIGN_ID(可选)
gc.setIdType(IdType.ASSIGN_ID);
// 拼接出代码最终输出的目录
gc.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
// 重新生成文件时是否覆盖,false 表示不覆盖(可选)
gc.setFileOverride(true);
//是否支持AR模式
gc.setActiveRecord(false);
//是否开启缓存
gc.setEnableCache(false);
//生成resultMap
gc.setBaseResultMap(false);
//在xml中生成基础列
gc.setBaseColumnList(false);
//设置作者
gc.setAuthor("mybatis-plus-generator");
// 配置是否打开目录,false 为不打开(可选)
gc.setOpen(false);
// 是否开启swagger
gc.setSwagger2(false);
// 自定义文件命名,注意 %s 会自动填充表实体属性!
gc.setEntityName("%s");
gc.setMapperName("%sMapper");
gc.setXmlName("%sMapper");
gc.setServiceName("%sService");
gc.setServiceImplName("%sServiceImpl");
gc.setControllerName("%sController");
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.MYSQL);
dsc.setDriverName(Driver.class.getName());
dsc.setUsername(jdbcUsername);
dsc.setPassword(jdbcPassword);
dsc.setUrl(jdbcUrl);
mpg.setDataSource(dsc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setTablePrefix(tablePrefix);
// 表名生成策略
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
// 需要生成的表
strategy.setInclude(tables);
// 设置lombok
strategy.setEntityLombokModel(true);
// 【实体】是否生成字段常量(默认 false)
strategy.setEntityColumnConstant(true);
strategy.setEntityBooleanColumnRemoveIsPrefix(false);
// 【实体】是否为构建者模型(默认 false)
strategy.setEntityBuilderModel(true);
// 设置乐观锁字段
strategy.setVersionFieldName("version");
mpg.setStrategy(strategy);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setEntity("entity");
pc.setMapper("mapper");
pc.setService("service");
pc.setServiceImpl("service.impl");
pc.setController("controller");
pc.setParent(parent);
pc.setModuleName(module);
mpg.setPackageInfo(pc);
// 关闭默认生成
// TemplateConfig tc = new TemplateConfig();
// tc.setController(null);
// tc.setService(null);
// tc.setServiceImpl(null);
// mpg.setTemplate(tc);
}
}
5、引入对应的依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
<scope>test</scope>
</dependency>
我的项目目录,红色圈住的就是逆向工程所在的目录
二、mybatis-plus和mybatis的区别
一句话概括:mybatis-plus只是在mybatis的基础上做增强,不做修改,用于简化开发,提高效率。
mybatis-plus简化了crud,可以直接调用里面的方法增删改查方法。复杂一点的sql也可以通过语句去拼接,但是不太建议,还是写xml文件比较好维护。
举个简单例子:
mybatis增加的时候,需要手写xml文件
而mybatis-plus直接调用save方法就可以了
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/add")
public void add(){
User user = new User();
user.setName("hwl");
user.setPassword("456");
userService.save(user);
// userService.saveByXml(user);
}
}
三、mybatis-plus和mybatis的分页
需要增加一个配置,不然会导致分页失效
@Configuration
public class MybatisConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
四、Mybatis-plus的简单使用
下面这幅图就是mybatis-plus的一些条件拼接对象
如果要使用的话,就必须先定义一个对象QueryWraaper对象,例如下图。
我这里根据关键字模糊搜索去查询,就可以选择like这个条件拼接,注意:这里如果用getOne的话,查出来有2个,会报错,所以要加上queryWrapper.last(“limit 1”)这个条件才可以。
@GetMapping("/get/byName")
public User getByName(String name){
QueryWrapper<User> queryWrapper = new QueryWrapper();
queryWrapper.like(User.NAME,name);
queryWrapper.last("limit 1");
User user = userService.getOne(queryWrapper);
return user;
}