借助MybatisPlus的代码生成器,可以生成Java实体类、mapper接口、映射文件以及service和controller,可以配置实体类是否支持AR等
第一步:创建Maven项目,按如下所示引入Maven依赖:
junit
junit
4.12
test
org.apache.logging.log4j
log4j-api
2.12.1
org.apache.logging.log4j
log4j-core
2.12.1
org.projectlombok
lombok
1.18.10
ch.qos.logback
logback-classic
1.2.3
org.freemarker
freemarker
2.3.28
mysql
mysql-connector-java
8.0.13
com.alibaba
druid
1.1.12
com.baomidou
mybatis-plus
3.3.0
com.baomidou
mybatis-plus-generator
3.3.0
com.baomidou
mybatis-plus-core
3.3.0
com.baomidou
mybatis-plus-extension
3.3.0
com.baomidou
mybatis-plus-annotation
3.3.0
org.springframework
spring-context
5.2.1.RELEASE
org.springframework
spring-aop
5.2.1.RELEASE
org.springframework
spring-jdbc
5.2.1.RELEASE
org.springframework
spring-webmvc
5.2.1.RELEASE
org.springframework
spring-test
5.2.1.RELEASE
test
第二步:在pom.xml中加上如下配置以指定生成的Mapper XML文件在mybatis-config.xml中的配置有效:
src/main/java
**/*.xml
第二步:按如下所示编写代码生成器工具类:
public class MyBatisPlusCodeGenerator {
//包名
private static final String BASE_PACKAGE = "com.hc";
private static final String MAPPER_PACKAGE = "mapper";
private static final String SERVICE_PACKAGE = "service";
private static final String CONTROLLER_PACKAGE = "controller";
private static final String ENTITY_PACKAGE = "bean";
private static final String XML_PACKAGE = "mapper.impl";
// 模块名称
private static final String MODULE_NAME = "test";
//输出文件的路径
private static final String OUT_PATH = System.getProperty("user.dir")+ "/src/main/java";
//代码生成者
private static final String AUTHOR = "梁云亮";
//JDBC相关配置
private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String URL = "jdbc:mysql://127.0.0.1:3306/db_test?useSSL=false&serverTimezone=UTC&characterEncoding=utf8";
private static final String USER_NAME = "root";
private static final String PASSWORD = "root";
// 需要生成代码的表的名字
private static final String[] INCLUDE_TABLE = {"tb_emp"};
// private static final String[] EXCLUDE_TABLE = {"test"};
public static void main(String[] args) {
// ---- ① -----
// 全局配置
GlobalConfig globalConfig = new GlobalConfig().setOutputDir(OUT_PATH)// 输出目录
.setFileOverride(true)// 是否覆盖文件
.setActiveRecord(true) // 开启 activeRecord 模式
// .setEnableCache(false) // XML 二级缓存
// .setBaseResultMap(false) // XML ResultMap
// .setBaseColumnList(true) // XML columList
.setAuthor(AUTHOR)
.setIdType(IdType.AUTO)//主键策略
.setXmlName("%sMapper")
.setMapperName("%sDao")
.setServiceName("%sService") //设置service接口名字首字母没有I
.setServiceImplName("%sServiceImpl")
.setControllerName("%sController");
// 数据源配置
DataSourceConfig dataSource = new DataSourceConfig()
.setDbType(DbType.MYSQL)// 数据库类型
.setUrl(URL)
.setDriverName(DRIVER)
.setUsername(USER_NAME)
.setPassword(PASSWORD)
.setTypeConvert(new MySqlTypeConvert() {
@Override
public IColumnType processTypeConvert(GlobalConfig globalConfig, String
fieldType) {// 自定义数据库表字段类型转换(可选)
System.out.println("转换类型:" + fieldType);
// if ( fieldType.toLowerCase().contains( "tinyint" ) ) {
// return DbColumnType.BOOLEAN;
// }
return super.processTypeConvert(globalConfig, fieldType);
}
});
// 策略配置
StrategyConfig strategyConfig = new StrategyConfig()
.setCapitalMode(true)// 全局大写命名
.setTablePrefix("tb_")//表名前缀
.setEntityLombokModel(true)//使用lombok
.setNaming(NamingStrategy.underline_to_camel)// 表名生成策略
.setInclude(INCLUDE_TABLE) // 需要生成的表
// .setExclude(EXCLUDE_TABLE) // 与 只能配置一项
// -------------- ② -------------
// .setEntityColumnConstant(true) // 【实体】是否生成字段常量(默认 false)
// .setSuperEntityClass("com.hc.bean.BaseEntity") //自定义实体父类
// .setSuperEntityColumns(new String[]{"test_id"}) // 自定义实体,公共字段
// .setSuperMapperClass("com.hc.bean.BaseMapper") //自定义mapper父类
// .setSuperServiceClass("com.hc.bean.BaseService") //自定义service父类
// .setSuperServiceImplClass("com.hc.bean.BaseServiceImpl") //自定义service实现类父类
// .setSuperControllerClass("com.hc.bean.TestController")//自定义controller父类
// .setEntityBuilderModel(true) // 【实体】是否为构建者模型(默认 false)
// .setEntityBooleanColumnRemoveIsPrefix(true)//是否移除Boolean类型is前缀
// .setRestControllerStyle(true)
// .setControllerMappingHyphenStyle(true)
;
// 包配置
PackageConfig packageConfig = new PackageConfig()
// .setModuleName(MODULE_NAME)
.setParent(BASE_PACKAGE) // 自定义包路径
.setEntity(ENTITY_PACKAGE)
.setMapper(MAPPER_PACKAGE)
.setXml(XML_PACKAGE)
.setService(SERVICE_PACKAGE)
.setController(CONTROLLER_PACKAGE) ;// 这里是控制器包名
AutoGenerator mpg = new AutoGenerator()
.setGlobalConfig(globalConfig)
.setDataSource(dataSource)
.setStrategy(strategyConfig)
.setPackageInfo(packageConfig)
.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute(); // 执行生成
}
}
生成的项目的包层次关系如下:
- Emp.java
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("tb_emp")
public class Emp extends Model {
private static final long serialVersionUID = 1L;
@TableId(value = "empno", type = IdType.AUTO)
private Integer empno; // 编号
private String ename; // 员工姓名
private String job; // 工作
private Integer mgr; // 上级
private LocalDate hiredate; // 受顾日期
private BigDecimal sal; // 工资
private BigDecimal comm; // 资金
private Integer deptno; // 部门编号
@Override
protected Serializable pkVal() {
return this.empno;
}
}
- EmpDao.java
public interface EmpDao extends BaseMapper {
}
- EmpMapper.xml
- EmpService.java
public interface EmpService extends IService {
}
- EmpServiceImpl.java
@Service
public class EmpServiceImpl extends ServiceImpl implements EmpService {
}
- EmpController.java
@Controller
@RequestMapping("/emp")
public class EmpController {
}