虽然mybatis-generator能生成dao,mapper,xml等文件,但是生成的代码也不是完全通用,所以这里我们要的mybatis-generator-core源码进行修改。
源码下载: https://github.com/chenxingxing6/my-mybatis-generator
1.生成自己想要的注释
/**
* 用户信息
*
* @author lanxinghua
* @date 2018/10/20
*/
public class UserBo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* ID
*/
private Long id;
/**
* 用户名
*/
private String userName;
2.通用的表字段,统一处理
/**
* 是否有效
*/
private Integer isValid;
/**
* 创建人
*/
private String createUser;
/**
* 创建时间
*/
private Long createTime;
/**
* 修改人
*/
private String opUser;
/**
* 修改时间
*/
private Long opTime;
/**
* 版本号
*/
private Integer lastVer;
<!-- 生成映射文件的包名和位置 -->
<sqlMapGenerator targetPackage="com.dfire.soa.item.mapper" targetProject="src">
<!-- 字段的初始化 -->
<columnSetting>
<insert>
<column name="is_valid" defaultValue="1"/>
<column name="create_time" defaultValue="unix_timestamp(now(3))*1000"/>
<column name="op_time" defaultValue="unix_timestamp(now(3))*1000"/>
<column name="last_ver" defaultValue="0"/>
</insert>
<update>
<column name="op_time" defaultValue="unix_timestamp(now(3))*1000"/>
<column name="last_ver" defaultValue="last_ver + 1"/>
<column name="create_time" hide="true"/>
</update>
</columnSetting>
</sqlMapGenerator>
3.我们数据库字段类型是tinyint,smallint的对应java类型为byte,而我们要Integer
javaTypeResolver type="org.mybatis.generator.internal.types.PandaJavaTypeResolverDefaultImpl"/>
我的想法
主要步骤就是,修改对应源码的类,比如我们对默认的注释不满意,那我们自己写一个类然后继承默认的类,然后实现自己的逻辑。然后就是在generatorConfig.xml文件对应的地方,将class文件指向我们自己定义的类,就是这么简单。而且很多场景都有人重写过对应的类,所以我们要什么,就去搜对应文档,然后改一下就好。
官方源码:https://github.com/mybatis/generator
这里我们要改生成Bo类时,类上面添加时间,作者名字,类属性添加数据库中对应的注释
package org.mybatis.generator.internal;
import org.apache.commons.lang3.StringUtils;
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.Method;
import org.mybatis.generator.api.dom.java.TopLevelClass;
import org.mybatis.generator.api.dom.xml.XmlElement;
/**
* User: lanxinghua
* Date: 2018/10/20 18:34
* Desc:
*/
public class MyCommentGenerator extends DefaultCommentGenerator {
//类上添加注释
@Override
public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
topLevelClass.addJavaDocLine("/**");
String remark = introspectedTable.getRemarks();
if (StringUtils.isNotBlank(remark)) {
topLevelClass.addJavaDocLine(" * " + remark);
}
topLevelClass.addJavaDocLine(" * ");
topLevelClass.addJavaDocLine(" * " + "@author " + getAuthor());
topLevelClass.addJavaDocLine(" * " + "@date " + getDateContent());
topLevelClass.addJavaDocLine(" */");
}
//属性上添加注释
@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
String remark = introspectedColumn.getRemarks();
if (StringUtils.isNotBlank(remark)) {
field.addJavaDocLine("/**");
field.addJavaDocLine(" * " + remark);
field.addJavaDocLine(" */");
}
}
//get方法添加注释
@Override
public void addGetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
}
//setter方法添加注释
@Override
public void addSetterComment(Method method, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
}
@Override
public void addComment(XmlElement xmlElement) {
}
}
添加几个属性
private String author;
private String date;
private String dateContent;
private static final String DEFAULT_DATE_FORMAT = "yyyy/MM/dd";
public void addConfigurationProperties(Properties properties) {
this.properties.putAll(properties);
suppressDate = isTrue(properties
.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_DATE));
suppressAllComments = isTrue(properties
.getProperty(PropertyRegistry.COMMENT_GENERATOR_SUPPRESS_ALL_COMMENTS));
addRemarkComments = isTrue(properties
.getProperty(PropertyRegistry.COMMENT_GENERATOR_ADD_REMARK_COMMENTS));
author = properties.getProperty("author");
author = author == null ? "" : author;
date = properties.getProperty("date");
date = date == null ? DEFAULT_DATE_FORMAT : date;
SimpleDateFormat sf = new SimpleDateFormat(date);
dateContent = sf.format(new Date());
}
public String getAuthor() {
return author;
}
public String getDateContent() {
return dateContent;
}
<!-- 需要修改源码 -->
<commentGenerator type="org.mybatis.generator.internal.MyCommentGenerator">
<!-- 文件编码 -->
<property name="javaFileEncoding" value="UTF-8" />
<!-- 忽略所有注解,使用自定义的注解生成 -->
<property name="suppressAllComments" value="true" />
<!-- 作者 -->
<property name="author" value="lanxinghua" />
<!-- 时间 value值为时间格式-->
<property name="date" value="yyyy/MM/dd" />
</commentGenerator>
其实想想,这也是非常简单的。不过我们应该要有点启发,如果经常有同样的事要干,我们就要想办法让这部分通用起来,不用把时间浪费在一些没意义的事情上。
Original url: Access
Created at: 2019-03-27 14:45:04
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
最新评论