MyBatis Generator 配置,自定義中文註釋,自動化生成pojo(bean)

一、使用方法      點我下載工具包

解壓壓縮包,文件如下,默認連接oracle數據庫,修改generatorConfig.xml改配置。雙擊run.bat文件運行
chenyuchao

二、效果展示
工具生成的pojo類,我重寫了mybatis的註釋,改成如下中文風格(包括顯示錶註釋、列註釋等),另外pojo類都會額外生成包含全字段的constructor和tostring()方法

package pojo;

import java.util.Date;

/**
 * 創建時間: 2018-09-25 12:50     創建人: mysql     主機名: DESKTOP-4SGV6NG
 *
 * 對應數據庫表: CHENYUCHAO.STUDENT
 *
 * 學生信息
 *
 */
public class Student {
    //主鍵id    列名稱: ID    列類型(jdbc): DECIMAL    列默認值: 
    private Integer id;

    //姓名    列名稱: NAME    列類型(jdbc): VARCHAR    列默認值: 
    private String name;

    //性別    列名稱: SEX    列類型(jdbc): VARCHAR    列默認值: null
    private String sex;

    //年齡    列名稱: AGE    列類型(jdbc): DECIMAL    列默認值: 
    private Long age;

    //出生日期    列名稱: BIRTHDAY    列類型(jdbc): TIMESTAMP    列默認值: current_timestamp
    private Date birthday;

    public Student(Integer id, String name, String sex, Long age, Date birthday) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.birthday = birthday;
    }

    public Student() {
        super();
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex == null ? null : sex.trim();
    }

    public Long getAge() {
        return age;
    }

    public void setAge(Long age) {
        this.age = age;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(getClass().getSimpleName());
        sb.append(" [");
        sb.append("Hash = ").append(hashCode());
        sb.append(", id=").append(id);
        sb.append(", name=").append(name);
        sb.append(", sex=").append(sex);
        sb.append(", age=").append(age);
        sb.append(", birthday=").append(birthday);
        sb.append("]");
        return sb.toString();
    }
}

三、generatorConfig.xml 配置文件展示

<?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">


<!-- 陳宇超整理,最後一次更新2018/08 -->

<generatorConfiguration>


	<classPathEntry location="ojdbc6.jar" />

	<!-- MyBatis3Simple簡化配置,MyBatis3滿配置,包括XXExample類和複雜的dao、mapper.xml -->
	<context id="OracleContext" targetRuntime="MyBatis3Simple">

		<!--編碼 -->
		<property name="javaFileEncoding" value="UTF-8" />

		<!--額外配置的生成tostring()方法的插件,mybatis支持很多插件,這些插件都在 org.mybatis.generator.plugins包下 -->
		<plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
		
		<!--註釋 type="cyc4j.MyComment"這裏是我自己寫的註釋實現類(我將代碼寫死了,完全忽略下面三個屬性),你們使用時可以刪除我的實現,使用默認即可。 -->
		<commentGenerator type="cyc4j.MyComment">

			<!--是否產生註釋,這是總的開關,true表示不生成註釋,下面的三個配置都將失效 -->
			<property name="suppressAllComments" value="false" />

			<!--生成的註釋中是否包含時間戳,默認false表示包含,爲true則表示不包含 效果如:@mbg.generated Mon Oct 23 
				11:42:12 CST 2017 -->
			<property name="suppressDate" value="true" />

			<!--當屬性爲false或未指定時,生成元素時,所有生成的註釋將不包括表和列註釋 -->
			<property name="addRemarkComments" value="true" />

			<!--格式化suppressDate中的時間戳 效果如:@mbg.generated 2017-10-23 11:58:43 -->
			<!-- <property name="dateFormat" value="yyyy-MM-dd HH:mm:ss" /> -->

		</commentGenerator>


		<!--jdbc連接 -->
		<jdbcConnection driverClass="oracle.jdbc.OracleDriver"
			connectionURL="jdbc:oracle:thin:@localhost:1521:boy"
			userId="chenyuchao" password="123">
			<property name="remarksReporting" value="true"></property><!--remarksReporting使得jdbc可以獲取到字段和表頭註釋 -->
		</jdbcConnection>


		<!--類型解析器 -->
		<javaTypeResolver>

			<!--指定是否應強制對DECIMAL和NUMERIC字段使用java.math.BigDecimal,而不是在可能時替換整數類型 oracle中number(1~4) 
				-> short; number(5~9) -> Integer; number(10~18) -> long; number(18+) -> BigDecimal -->
			<property name="forceBigDecimals" value="false" />

			<!-- 指定是否應強制在DATE,TIME和TIMESTAMP字段中使用JSR-310數據類型,而不是使用java.util.Date 如果爲true,則類型將按如下方式解析: 
				date -> java.time.LocalDate; time -> java.time.LocalTime; timestamp -> java.time.LocalDateTime -->
			<property name="useJSR310Types" value="true" />

		</javaTypeResolver>


		<!--pojo位置 targetPackage指定生成類所在的包 -->
		<javaModelGenerator targetPackage="pojo"
			targetProject="./">

			<!--自動爲每一個生成的類創建一個構造方法,構造方法包含了所有的field -->
			<property name="enableSubPackages" value="false" />

			<!--設置是否在getter方法中,對String類型字段調用trim()方法 -->
			<property name="trimStrings" value="true" />

			<!-- 在targetPackage的基礎上,根據數據庫的schema再生成一層package,最終生成的類放在這個package下,默認爲false -->
			<property name="constructorBased" value="true" />

		</javaModelGenerator>


		<!--mapper.xml位置  -->
		<sqlMapGenerator targetPackage="dao"
			targetProject="./">
			<property name="enableSubPackages" value="false" />
		</sqlMapGenerator>


		<!--interface位置 -->
		<javaClientGenerator type="XMLMAPPER"
			targetPackage="dao" targetProject="./">
			<property name="enableSubPackages" value="false" />
		</javaClientGenerator>


		<!-- <table tableName="user" domainObjectName="User" /> --><!-- 表名是user,pojo類名是User -->
		<table tableName="%" schema="CHENYUCHAO" /><!-- 暴力點,直接生成chenyuchao表空間下的所有表 -->

	</context>
</generatorConfiguration>

<!-- 陳宇超整理,最後一次更新2018/08 -->

四、一點經驗
MyBatis Generator 源碼的JavaTypeResolverDefaultImpl類中記錄了類型轉換關係,時間類型最終都被解析出 util.Date 類型。這麼做還是很有道理的。

在oracle數據庫中birthday字段是date類型,那麼要想精度不丟失,使用jdbc插入語句應當這麼寫

String sql = “insert into student(id,name,sex,age,birthday) values(?,?,?,?,?)”;
int x = queryRunner.update(sql, 111111, “wangdachui”, “man”, 21, new java.sql.Timestamp(new java.util.Date().getTime()));

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章