藉助MybatisPlus的代碼生成器,可以生成Java實體類、mapper接口、映射文件以及service和controller,可以配置實體類是否支持AR等
第一步:創建Maven項目,按如下所示引入Maven依賴:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.1.RELEASE</version>
<scope>test</scope>
</dependency>
第二步:在pom.xml中加上如下配置以指定生成的Mapper XML文件在mybatis-config.xml中的配置有效:
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
第二步:按如下所示編寫代碼生成器工具類:
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) // <include> 與 <exclude> 只能配置一項
// -------------- ② -------------
// .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<Emp> {
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<Emp> {
}
- EmpMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hc.dao.EmpDao">
</mapper>
- EmpService.java
public interface EmpService extends IService<Emp> {
}
- EmpServiceImpl.java
@Service
public class EmpServiceImpl extends ServiceImpl<EmpDao, Emp> implements EmpService {
}
- EmpController.java
@Controller
@RequestMapping("/emp")
public class EmpController {
}