我们近期打算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. 大牛推荐的10本学习 Python 的好书

    Python:蛇亚目蟒科,主要包括分布于非洲及亚洲的无毒蟒蛇. Python:Richard Clabaugh拍摄的恐怖电影,2000年发行. Python:澳大利亚汽车公司. Python:英国偶发 ...

  2. Generator yield语法和 co模块

    Generator  yield 语法使用,也叫生成器,实际上就是多个异步按顺序执行 1.下面是一个读取两个文件的例子 const fs = require('fs'); const readFile ...

  3. ROSETTA使用技巧随笔--蛋白蛋白对接

    先写简略版,以后再详细写. 1. 对输入结构进行预处理(refine) $> relax.default.linuxgccrelease -in:file:s input_files/from_ ...

  4. 数据加密之RijndaelManaged加密

    #region RijndaelManaged加密 /// <summary> /// 加密数据 /// </summary> /// <param name=" ...

  5. PyQT5速成教程-1 简介与环境搭建

    本文由 沈庆阳 所有,转载请与作者取得联系! PyQt简介 一个良好的界面是人机交互中十分重要的一环. Python作为脚本语言,起初并未拥有GUI开发的部分.但随着其开放的扩展性,使得Python不 ...

  6. vuex的使用二

    1.先看项目的目录结构 2.在main.js里需要引入store这个文件并挂在实例上 import store from './store/store' ............ new Vue({ ...

  7. 图片和base64互转

    最近项目需要将图片以base64编码,这里记录下相关的一些东西. 需要导入两个类:sun.misc.BASE64Encoder sun.misc.BASE64Decoder 下面是相关java代码: ...

  8. Android -- 打造我们的StepView

    1,前两天我们分析了Github开源的StepView <自定义StepView实现个人信息验证进度条>,这两天想着想自己写一个,so,就有了这一篇文章,不废话,先看看实现的效果: 2,首 ...

  9. Unity之fragment shader中如何获得视口空间中的坐标

    2种方法: 1. 使用 VPOS 或 WPOS语义,如: Shader "Test/ScreenPos1" { SubShader { Pass { CGPROGRAM #prag ...

  10. centos6.5安装无线网卡驱动并配置wifi

    1.驱动下载地址: RTL8188无线网卡驱动下载 链接:https://pan.baidu.com/s/1ms-EbQCDxa76jPhYUPmr9Q 密码:r2vu 2.安装步骤: [root@c ...