mybatis generator為實體類生成自定義注釋(讀取數據庫字段的注釋添加到實體類,不修改源碼)


我們都知道mybatis generator自動生成的注釋沒什么實際作用,而且還增加了代碼量。如果能將注釋從數據庫中撈取到,不僅能很大程度上增加代碼的可讀性,而且減少了后期手動加注釋的工作量。

1、首先定義注釋生成插件

MyCommentGenerator.java 

package com.ilovey.mybatis.comment; import org.mybatis.generator.api.IntrospectedColumn; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.dom.java.Field; import org.mybatis.generator.api.dom.java.InnerClass; import org.mybatis.generator.api.dom.java.Method; import org.mybatis.generator.internal.DefaultCommentGenerator; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Properties; /** * mybatis generator生成注釋插件 * <p> * Created by huhaichao on 2017/5/15. */ public class MyCommentGenerator extends DefaultCommentGenerator { private Properties properties; private Properties systemPro; private boolean suppressDate; private boolean suppressAllComments; private String currentDateStr; public MyCommentGenerator() { super(); properties = new Properties(); systemPro = System.getProperties(); suppressDate = false; suppressAllComments = false; currentDateStr = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date()); } public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { if (suppressAllComments) { return; } StringBuilder sb = new StringBuilder(); field.addJavaDocLine("/**"); sb.append(" * "); sb.append(introspectedColumn.getRemarks()); field.addJavaDocLine(sb.toString().replace("\n", " ")); field.addJavaDocLine(" */"); } public void addFieldComment(Field field, IntrospectedTable introspectedTable) { } public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) { } public void addGetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { } public void addSetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) { } public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) { } public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) { } }

2、然后為mybatisgenerator配置插件

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <context id="context1"> <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/> <!-- 使用自定義的插件 --> <commentGenerator type="com.ilovey.mybatis.comment.MyCommentGenerator"> </commentGenerator> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF8" userId="root" password="123456"> </jdbcConnection> <javaModelGenerator targetPackage="com.ilovey.biz.entity.base" targetProject="ilovey.biz/src/main/java"/> <sqlMapGenerator targetPackage="com.ilovey.biz.mapper.base" targetProject="ilovey.biz/src/main/resources"/> <javaClientGenerator targetPackage="com.ilovey.biz.mapper.base" targetProject="ilovey.biz/src/main/java" type="XMLMAPPER"/> <table tableName="us_user_info" domainObjectName="UsUserInfo"> <generatedKey column="id" sqlStatement="MySql" identity="true"/> </table> </context> </generatorConfiguration>

3、使用mybatis generator自動生成代碼

由於使用的是maven項目,而且使用了了自定義的插件,所以采用 main方法啟動,適用場景更對,而且能將代碼生成到對應的工程目錄下,免去拷貝的過程(當然也可以用maven插件、控制台、eclipse插件等多種方式啟動)。

注意:當前類所在的工程要添加mybatis generator的依賴包

啟動類如下

package com.ilovey.mybatis; import org.mybatis.generator.api.MyBatisGenerator; import org.mybatis.generator.config.Configuration; import org.mybatis.generator.config.xml.ConfigurationParser; import org.mybatis.generator.internal.DefaultShellCallback; import java.io.InputStream; import java.util.ArrayList; import java.util.List; /** * 運行此方法生成mybatis代碼 * 生成代碼自動放入對應目錄 * 配置文件targetProject應從項目名稱開始到要生成到的classpath * Created by huhaichao on 2017/5/15. */ public class MyBatisGeneratorRun { public static void main(String[] args) throws Exception{ MyBatisGeneratorRun app = new MyBatisGeneratorRun(); System.out.println(app.getClass().getResource("/").getPath()); app.generator(); System.out.println(System.getProperty("user.dir")); } public void generator() throws Exception{ List<String> warnings = new ArrayList<String>(); boolean overwrite = true; InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream("generatorConfig.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(resourceAsStream); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); for(String warning:warnings){ System.out.println(warning); } } } 

再貼下項目的maven依賴,有需要的可以看下

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>party.lovey</groupId> <artifactId>generator</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <dependencies> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.29</version> </dependency> </dependencies> </project>

4、生成效果

package com.ilovey.biz.entity.base;

import java.io.Serializable;
import java.util.Date;

public class UsUserInfo implements Serializable {
    /**
     * 
     */
    private Integer id;

    /**
     * 用戶id
     */
    private Integer userId;

    /**
     * 昵稱
     */
    private String nickName;

    /**
     * 頭像
     */
    private String headImage;

    /**
     * 手機號碼
     */
    private String mobile;

    /**
     * 性別(0保密,1男,2女)
     */
    private Integer sex;

    /**
     * 地區
     */
    private Integer region;

    /**
     * 個性簽名
     */
    private String signature;

    /**
     * 創建時間
     */
    private Date createTime;

    /**
     * 更新時間
     */
    private Date updateTime;

    //setter 和 getter方法省略
}

此外,mybatis的插件還有着更強大的功能,比如支持分頁功能,修復因別名造成的delete語句錯誤等,需要這些插件的朋友可以在底部留言。

 

原文地址:https://www.cnblogs.com/cblogs/p/9432129.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM