2019独角兽企业重金招聘Python工程师标准>>>
背景
在一般用到mybatis的项目中,大家一般都习惯用mybatis-generator直连数据库来生成mapper文件和java代码,然后再根据实际情况对项目中已有的mapper文件和java代码进行调整,这样做可能会存在2个问题:
- 在把生成的mapper文件和java代码整合到到原项目的过程中,有可能会出错
- 直连的数据库有可能还没有更新schema,导致生成的mapper文件和java代码还不是预期的
因此,我们把mybatis-generator生成的mapper文件和java代码直接作为一个单独的模块来维护,输出一个jar包即可。以maven工程为例,其它项目只需要以dependency的方式引入并直接使用即可,避免了调整过程中可能出错的环节;另外,我们把数据库最新的schema先导入h2,然后再用mybatis-generator连接到h2,生成mapper文件和java代码,这样就保证了每次生成的代码都是我们所期望的,而且这个过程我们不再需要连接实际的数据库,随时随地生成mapper文件和java代码。
接下来我们简单介绍一下如何使用快嘉mbg脚手架快速生成这样的一个模块和这个模块的基本使用方法。
1.环境准备
版本 | |
---|---|
JDK | 1.8+ |
Maven | Maven 3.3.9+ |
2.使用快嘉mbg脚手架生成一个新项目
脚手架声明: com.fastjrun.archetype:mbg-archetype:1.0-SNAPSHOT 脚手架参数:
- groupId:pom坐标
- artifactId:pom坐标,这个值同时会影响到工程下pom.xml中的artifactId、pom中引用的插件mybatis-generator-maven-plugin的配置sqlFile和链接的h2库名称、该工程下的sql文件名。
- version:pom坐标
- package:生成代码包名前缀 选择合适的参数,在任一目录下执行脚手架命令(可参考如下示例命令,示例命令会在当前执行目录生成一个mbgdemo文件夹)
mvn archetype:generate -U -B -DgroupId=com.fastjrun.share -DartifactId=mbgdemo -Dpackage="com.fastjrun.share.mbgdemo" -Dversion=1.0-SNAPSHOT -DarchetypeGroupId=com.fastjrun.archetype -DarchetypeArtifactId=mbg-archetype -DarchetypeVersion=1.0 -U
mbgdemo目录下文件组织结构
│ mbgdemo.sql
│ pom.xml
│
└─src
└─main
├─java
└─resources
mybatis-generator.xml
=======================================================================
3.将mbgdemo.sql修改成你工程的建库sql,可在本工程下生成mybatis相关entity和mapper
新打开一个term窗口,并进入mbgdemo目录,执行mvn clean package
就可以在target目录生成mbgdemo-1.0-SNAPSHOT.jar后,该jar里已经包含了mybatis的mapper代码和xml配置文件,该jar可以提供给其他模块以dependency的方式引入并直接使用。
具体配置详见 src/main/resources/mybatis-generator.xml,可参考(MyBatis GeneratorXML Configuration File Reference)进行调整
注意:mybatis-generator的覆盖只针对以上配置文件中出现的table节点有效,以上面配置文件为例:如果第一次代码生成同时配置了t_user和t_user_login,第二次代码生成只配置了t_user,则t_user相关java代码和xml配置文件会被覆盖,而t_user_login相关java代码和xml配置文件将会保留不会被处理,本示例工程提供了一种解决方案,在生成代码之前,使用maven-clean-plugin同时删除了src/main/java/下所有java代码和src/main/resources下的mappers目录。
org.apache.maven.plugins
maven-clean-plugin
${maven-clean-plugin.version}
src/main/java
**/*
src/main/resources
mappers/
4.下面演示一下定制化maven-clean-plugin取得的效果
新打开一个term窗口,并进入mbgdemo目录
cd mbgdemo
mvn clean generate-sources
这时候mbgdemo目录下文件组织结构,这是mybatis-generator新生成代码的时候,这时还没有编译
│ mbgdemo.sql
│ pom.xml
│
└─src
└─main
├─java
│ └─com
│ └─fastjrun
│ └─share
│ └─mbgdemo
│ ├─entity
│ │ TUser.java
│ │ TUserLogin.java
│ │ TUserLoginExample.java
│ │
│ └─mapper
│ TUserLoginMapper.java
│ TUserMapper.java
│
└─resources
│ mybatis-generator.xml
│
└─mappers
TUserLoginMapper.xml
TUserMapper.xml
接下来执行mvn clean
,会发现mbgdemo还原到了初始化的时候,文件组织结构又变如下
│ mbgdemo.sql
│ pom.xml
│
└─src
└─main
├─java
└─resources
mybatis-generator.xml
使用H2数据库的一些注意事项
- 用mysqldump导出demo.sql结构,参考命令
mysqldump -uroot -p123456 -d demo> demo.sql
- 用导出的demo.sql替换项目中的mbgdemo.sql
- Date字段不能为“0000-00-00 00:00:00”,建议替换为“1970-01-01 08:00:01”
- 无论字段还是表级别,h2都不支持CHARSET=utf8类似字段,可以全部替换为空字符
- h2不支持显示声明USING BTREE 可以全部替换为空字符
- h2表级别只支持COMMENT和ENGINE两个属性,且COMMENT要在ENGINE之前
- h2要求全库索引名称全库唯一,这样就需要处理数据库中所有重复的索引名称,保证,如DEMO_INDEX一共出现了4次,依次调整为DEMO_INDEX、DEMO_INDEX2、DEMO_INDEX3和DEMO_INDEX4
脚手架源码地址:https://gitee.com/fastjrun/fastjrun-archetype