我们近期打算fork一个版本,将大约十几项我们积累的认为更合理的完善脱敏后合并到github。

a) 建表时,字段名称建议用"_"分隔多个单词,比如:AWB_NO、REC_ID...,这样生成的entity,属性名称就会变成漂亮的驼峰命名,即:awbNo、recId

b)oracle中,数值形的字段,如果指定精度,比如Number(12,2),默认生成entity属性是BigDecimal型 ,如果不指定精度,比如:Number(9),指默认生成的是Long型

如果不指定精度,比如number,会生成Short类型,此时要生成Integer,只能修改源代码org.mybatis.generator.internal.db.DamebaseIntrospector.getColumns(mebleConfiguration) 624行,如下:

            // zjhua add for oracle, 默认情况下precision,scale都为0, 生成Short类型是不正确的
if (rs.getInt("COLUMN_SIZE") == 0) {
// scale>0;length>18:使用BigDecimal;
// scale=0;length[10,18]:使用Long;
// scale=0;length[5,9]:使用Integer;
// scale=0;length<5:使用Short;
// 所以随便选个8就好了
introspectedColumn.setLength(8);
} else {
introspectedColumn.setLength(rs.getInt("COLUMN_SIZE")); //$NON-NLS-1$
}

c)oracle中的nvarchar/nvarchar2,mybatis-generator会识别成Object型,建议不要用nvarchar2,改用varchar2

d) 如果要生成继承基础类的mapper,比如:

package com.xxx.me.base;

import java.util.List;

import org.apache.ibatis.annometions.Param;

public interface BaseMapper<T, E, PK> {

    T selectByPrimaryKey(PK pk);

    List<T> selectByExample(E example);

    int insert(T record);

    int insertSelective(T record);

    int updateByPrimaryKeySelective(T record);

    int updateByExampleSelective(@Param("record") T record, @Param("example") E example);

    int deleteByPrimaryKey(PK pk);

    int deleteByExample(E example);

    default int insertBatch(List<T> record) { throw new UnsupportedOperationException();};

    int truncate();
}

也需要修改源代码org.mybatis.generator.codegen.mybatis3.javamapper.JavaMapperGenerator.getCompilationUnits() 85行开始,如下:

// zjhua add smert
String pojoName = interfaze.getType().getShortName().replaceAll("Mapper", "");
String pkType = "";
if (introspectedmeble.getPrimaryKeyColumns().size()>1) {
pkType = introspectedmeble.getPrimaryKeyType().substring(introspectedmeble.getPrimaryKeyType().lastIndexOf('.')+1);
} else {
pkType = introspectedmeble.getPrimaryKeyColumns().get(0).getFullyQualifiedJavaType().getShortName();
} rootInterface = "BaseMapper<" + pojoName + "," + pojoName + "Example," + pkType + ">";
// zjhua add end
if (stringHasValue(rootInterface)) {
FullyQualifiedJavaType fqjt = new FullyQualifiedJavaType(
rootInterface);
interfaze.addSuperInterface(fqjt);
interfaze.addImportedType(fqjt);
// zjhua add smert
System.out.println(fqjt);
interfaze.addImportedType(new FullyQualifiedJavaType("com.xxx.me.base.BaseMapper"));
// zjhua add end
} // addCountByExampleMethod(interfaze);
addDeleteByExampleMethod(interfaze);
addDeleteByPrimaryKeyMethod(interfaze);
addInsertMethod(interfaze);
addInsertSelectiveMethod(interfaze);
addSelectByExampleWithBLOBsMethod(interfaze);
addSelectByExampleWithoutBLOBsMethod(interfaze);
addSelectByPrimaryKeyMethod(interfaze);
addUpdateByExampleSelectiveMethod(interfaze);
addUpdateByExampleWithBLOBsMethod(interfaze);
addUpdateByExampleWithoutBLOBsMethod(interfaze);
addUpdateByPrimaryKeySelectiveMethod(interfaze);
addUpdateByPrimaryKeyWithBLOBsMethod(interfaze);
addUpdateByPrimaryKeyWithoutBLOBsMethod(interfaze); List<CompilationUnit> answer = new ArrayList<CompilationUnit>();
if (context.getPlugins().clientGenerated(interfaze, null,
introspectedmeble)) {
// zjhua 新增开始
interfaze.getMethods().clear();
interfaze.getOriginalImportedTypes().remove(new FullyQualifiedJavaType("org.apache.ibatis.annometions.Param"));
interfaze.getOriginalImportedTypes().remove(new FullyQualifiedJavaType("java.util.List"));
// 新增结束
answer.add(interfaze);
}

这样就可以按需满足了。

最后,pojo应该使用lombok的Getter和Setter。这可以通过增加一个自定义插件实现,如下:

package cn.wolfcode.mybatis.plugins;

import java.util.List;

import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.Introspectedmeble;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.api.dom.java.TopLevelClass; public class IngoreSetterAndGetterPlugin extends PluginAdapter { @Override
public boolean validate(List<String> warnings) {
return true;
} @Override
public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass,
Introspectedmeble introspectedmeble) {
//该代码表示在生成class的时候,向topLevelClass添加一个@Setter和@Getter注解
topLevelClass.addAnnometion("@Getter@Setter");
return super.modelBaseRecordClassGenerated(topLevelClass,
introspectedmeble);
} //该方法在生成每一个属性的getter方法时候调用,如果我们不想生成getter,直接返回false即可;
@Override
public boolean modelGetterMethodGenerated(Method method,
TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn,
Introspectedmeble introspectedmeble,
ModelClassType modelClassType) {
return false;
} //该方法在生成每一个属性的setter方法时候调用,如果我们不想生成setter,直接返回false即可;
@Override
public boolean modelSetterMethodGenerated(Method method,
TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn,
Introspectedmeble introspectedmeble,
ModelClassType modelClassType) {
return false;
} }

然后修改org.mybatis.generator.api.dom.java.TopLevelClass构造器,引入lombok.Getter和lombok.Setter,如下:

    public TopLevelClass(FullyQualifiedJavaType type) {
super(type);
importedTypes = new TreeSet<FullyQualifiedJavaType>();
// zjhua add
importedTypes.add(new FullyQualifiedJavaType("lombok.Getter"));
importedTypes.add(new FullyQualifiedJavaType("lombok.Setter"));
// zjhua add end
fileCommentLines = new ArrayList<String>();
smeticImports = new TreeSet<String>();
}

最后,在generatorConfig-oracle.xml加上插件,如下:

<plugin type="cn.wolfcode.mybatis.plugins.IngoreSetterAndGetterPlugin" />

这样就符合我们的要求了。

Mybatis generator 接口增加自定义方法和sql配置可以参考:https://blog.csdn.net/limclg/article/demeils/80816923

mybatis generator自动生成sqlmap代码的不完善之处以及解决方法的更多相关文章

  1. SpringBoot 添加mybatis generator 自动生成代码插件

    自动生成数据层代码,提高开发效率 1.pom添加插件,并指定配置文件路径 <!-- mybatis generator 自动生成代码插件 --> <plugin> <gr ...

  2. 使用Mybatis Generator自动生成Mybatis相关代码

    本文将简要介绍怎样利用Mybatis Generator自动生成Mybatis的相关代码: 一.构建一个环境: 1. 首先创建一个表: CREATE TABLE pet (name VARCHAR(2 ...

  3. idea中mybatis generator自动生成代码配置 数据库是sqlserver

    好长时间没有写博客了,最近公司要用java语言,开始学习java,属于初学者,今天主要记录一下mybatis generator自动生成代码,首先在如下图的目录中新建两个文件,如下图 generato ...

  4. SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件

    原文链接 我们这一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池 ...

  5. IDEA Maven Mybatis generator 自动生成代码

    IDEA Maven Mybatis generator 自动生成代码 一.安装配置maven以及在Idea中配置maven 安装过程步骤可以看上面的博文,里面介绍得很详细. 二.建数据表 DROP ...

  6. IDEA Maven Mybatis generator 自动生成代码(实例讲解)(转)

    IDEA Maven Mybatis generator 自动生成代码(实例讲解) MyBatis Generator • 简称MBG,是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的 ...

  7. 使用MyBatis Generator自动生成MyBatis的代码

    这两天需要用到MyBatis的代码自动生成的功能,由于MyBatis属于一种半自动的ORM框架,所以主要的工作就是配置Mapping映射文件,但是由于手写映射文件很容易出错,所以可利用MyBatis生 ...

  8. Mybatis generator自动生成mybatis配置和类信息

    自动生成代码方式两种: 1.命令形式生成代码,详细讲解每一个配置参数. 2.Eclipse利用插件形式生成代码. 安装插件方式: eclipse插件安装地址:http://mybatis.google ...

  9. mybatis generator自动生成 实体类, sqlmap配置文件 详细介绍

    我使用的是Eclipse Luna 装了自己常用的插件, generator也是其中一个推荐下载 MyBatis_Generator_1.3.1.zip离线安装包 <?xml version=& ...

随机推荐

  1. jenkins配置详解之——执行者数量

    jenkins上的执行者数量的设置并不是随意设置的,位置如下: 他是跟cpu核数密切相关的,原则上是不能超过cpu的核数的, 如何查看cpu的核数呢,命令如下: # 查看物理CPU个数cat /pro ...

  2. 根据异常自定义处理逻辑(【附】java异常处理规范)

    ▄︻┻┳═一『异常捕获系列』Agenda: ▄︻┻┳═一有关于异常捕获点滴,plus我也揭揭java的短 ▄︻┻┳═一根据异常自定义处理逻辑([附]java异常处理规范) ▄︻┻┳═一利用自定义异常来 ...

  3. 39.css3----button按钮点击时出现蓝色边框

    css控制Button 按钮的点击时候出现蓝色边框http://www.inbeijing.org/archives/1139 Button 按钮的点击时候出现蓝色边框的问题 添加css属性,这样在点 ...

  4. 阿里云esc服务器上部署java项目

    文章中使用centos(6和7版本).Xshell.Xftp 因为部署过程直接从操作服务器开始,如果你还没有连接好服务器请参考http://blog.csdn.net/ctrlxv/article/d ...

  5. python3学习笔记之安装

    一.Python安装 1.下载地址:  https://www.python.org/downloads/release/python-365/ 2. Linux系统自带Python2.7,如需安装3 ...

  6. LeetCode168.Excel表列名称

    给定一个正整数,返回它在 Excel 表中相对应的列名称. 例如, 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> ...

  7. JavaScript-判断指定日期是一年中第几天-按照从大到小的顺序输出

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  8. 第四章 CSS3概述

    1.CSS3新增常用选择器(1)结构性伪类选择器:root 文档根元素 :nth-child(n) 第N个子元素"first-child 第一个元素 :kast-child 最后一个子元素 ...

  9. windows环境下搭建RocketMQ

    https://blog.csdn.net/hsl_1990_08_15/article/details/80077552 安装完rocketmq后,报磁盘空间不足,只需要修改启动脚本runbroke ...

  10. TCP连接图示

    转移2018.4.6 自己总结绘图