MyBatisPlus利用代碼生成器生成代碼

藉助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 {
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章