我们近期打算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. SpringMVC连接多数据源配置

    在spring-config-datasource.xml中配置: <ds:ibatis-config> <ds:sql-map-client id="sqlMapClie ...

  2. 数据分析与挖掘 - R语言:KNN算法

    一个简单的例子!环境:CentOS6.5Hadoop集群.Hive.R.RHive,具体安装及调试方法见博客内文档. KNN算法步骤:需对所有样本点(已知分类+未知分类)进行归一化处理.然后,对未知分 ...

  3. SEO--质量监测

    日志分析 1.每个搜索引擎的总体抓取量 2.记录搜索引擎蜘蛛的不重复抓取量 3.每个目录.每个搜索引擎的抓取量 4.统计搜索引擎抓取的状态码(通过查看欧化300,404,500等分析那些页面需要优化) ...

  4. Go linux 实践2

    今天,看看GO的高级语言特性-方法和接口 废话不多说,直接上代码 ************************************************* 1 package main 2 ...

  5. .Net Core资源

    官网:https://dotnet.github.io/ 1.开发环境 vs2015安装: .net core sdk : https://download.microsoft.com/downloa ...

  6. Git操作说明

    Git操作说明 1.将本地项目上传到GitHub 1)    首先在GitHub上注册帐户 2)    在GitHub上创建仓库 3)    Pc安装Git客户端(Git Bach) 4)    打开 ...

  7. 实验long raw 和 blob两种数据类型遇到dblink的表现

    首先long raw从Oracle 10g开始就不再被建议使用,建议用blob代替.同理,long建议用clob代替. 本文从运维角度实验long raw 和 blob两种数据类型在遇到dblink时 ...

  8. Bootstrap-常用图标glyphicon

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8& ...

  9. vue--监听属性完成大小写字母间的转换

    监听属性 watch侦听属性的作用是侦听某属性值的变化,从而做相应的操作,侦听属性是一个对象,它的键是要监听的对象或者变量,值一般是函数,当你侦听的元素发生变化时,需要执行的函数,这个函数有两个形参, ...

  10. linux降低内存后oracle数据库无法启动

    降低了虚拟机的内存之后发现虚拟机中的oracle数据库无法startup,原因是 target memory的数据有问题,然后在安装数据库的使用的是自动内存管理.涉及的一个系统文件 /dev/shm ...