MyBatis Generator 配置,自定义中文注释,自动化生成pojo(bean)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_22627687/article/details/82833927

一、使用方法      点我下载工具包

解压压缩包,文件如下,默认连接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()));

猜你喜欢

转载自blog.csdn.net/qq_22627687/article/details/82833927