项目中的一些单表的增删改查功能,逻辑简单,但是在创建service、mapper、xml的过程很耗费时间。我们可以通过整合mybatis-plus和mybatis-plus-generator来处理这些问题,说明:mybatis-plus只是给我们提供一种便捷的操作,节约了写简单sql的时间,但其自身还是支持原生sql的。对于一些逻辑复杂或者多表操作或者动态sql,建议写原生sql。
本文所有素材皆参考mybatis-plus官网,官网移步: MyBatis-Plus
创建过程可以参考网上相关教程。我就不再赘述!我的项目接口如下:
demo-parent
demo-client
demo-service
其中parent是父级pom项目,client是对外暴露接口的maven项目,service是web项目
4.0.0
park-user
com.body.park
1.0.0
park-user-service
1.0.0
park-user-service
Demo project for Spring Boot
jar
1.8
1.0.0
1.0.0
1.0.11
2.3.3
1.1.10
5.1.32
5.1.10
3.1.2
3.5.0
2.3
5.7.7
1.2.17
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.cloud
spring-cloud-starter-bootstrap
com.alibaba.cloud
spring-cloud-starter-dubbo
com.alibaba.spring
spring-context-support
${spring.context.support.version}
com.baomidou
mybatis-plus-boot-starter
${mybatis-plus.version}
com.alibaba
druid-spring-boot-starter
${druid.version}
mysql
mysql-connector-java
com.baomidou
mybatis-plus-generator
${mybatis.plus.generator.version}
org.apache.velocity
velocity-engine-core
${velocity.version}
org.projectlombok
lombok
com.github.pagehelper
pagehelper
${pagehelper.version}
cn.hutool
hutool-core
${hutool.version}
cn.hutool
hutool-json
${hutool.version}
log4j
log4j
${log4j.version}
org.springframework.boot
spring-boot-maven-plugin
server:
port: 10001 # 服务端口号
spring:
application:
name: park-user-service # 服务名
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 # nacos注册中心地址
datasource:
url: jdbc:mysql://127.0.0.1:3306/park-user?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username: 用户名
password: 密码
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
# 连接池
druid:
max-active: 20
initial-size: 1
min-idle: 3
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
test-while-idle: true
test-on-borrow: true
test-on-return: false
filters: stat,wall,log4j
# mybatis-plus相关配置
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml # xml文件地址
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true # 开启驼峰映射
cache-enabled: false # 全局关闭二级缓存
call-setters-on-nulls: true
# dubbo配置
dubbo:
protocol:
port: 20881
name: dubbo
application:
name: park-order-service
以上整合结束,下面是整个代码生成器!
com.baomidou
mybatis-plus-generator
${mybatis.plus.generator.version}
org.apache.velocity
velocity-engine-core
${velocity.version}
其中velocity-engine-core这个包是模板引擎,这个是mybatis-plus官方推荐的,如果更换模板引擎,需要在一会的类型变更,我就用了默认的模板引擎
package com.body.park.user;
import com.baomidou.mybatisplus.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.apache.commons.lang3.StringUtils;
import java.util.Scanner;
/**
* @Author james
* @DATE 2022/3/26 17:10
*/
public class Generator {
/**
*
* 读取控制台内容
*
*/
public static String scanner(String tip) {
Scanner scanner = new Scanner(System.in);
StringBuilder help = new StringBuilder();
help.append("请输入" + tip + ":");
System.out.println(help.toString());
if (scanner.hasNext()) {
String ipt = scanner.next();
if (StringUtils.isNotBlank(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "!");
}
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
//获取工作目录跟路径,测试下来就是项目父级目录的文件路径,当前香炉的工作路径是:D:/bodyPark/park-user
String projectPath = System.getProperty("user.dir");
//gc.setOutputDir 设置生成的文件输出目录,想将生成的文件存在在哪就设置什么路径
gc.setOutputDir(projectPath + "/park-user-service/src/main/resources");
//设置生成的类的作者
gc.setAuthor("xxx");
gc.setOpen(false);
//关闭xml文件中配置二级缓存,默认是true 开启的,这个如果没有关闭的话,mapper.xml文件中就会开启二级缓存
gc.setEnableCache(false);
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://127.0.0.1:3306/park-user?useUnicode=true&useSSL=false&characterEncoding=utf8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("密码");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
scanner("数据库名称");
//这个不需要设置,不然会影响类的package
pc.setModuleName("");
//类的包路径,moduleName如果设置的话,会将moduleName设置的值拼接在类名和parent之间
pc.setParent("com.body.park.user");
mpg.setPackageInfo(pc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
strategy.setControllerMappingHyphenStyle(true);
strategy.setTablePrefix(pc.getModuleName() + "_");
mpg.setStrategy(strategy);
mpg.execute();
}
}
在整个整合的过程中,肯定不是一次成功的,都是在一次次犯错,查资料,修改,调试之后,才总结出了一个适合自己的代码生成器。