一、使用方法 點我下載工具包
解壓壓縮包,文件如下,默認連接oracle數據庫,修改generatorConfig.xml改配置。雙擊run.bat文件運行
二、效果展示
工具生成的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()));