版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_22627687/article/details/82833927
一、使用方法 点我下载工具包
解压压缩包,文件如下,默认连接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()));