由于MyBatis属于一种半自动的ORM框架,所以主要的工作就是配置Mapping映射文件,但是由于手写映射文件很容易出错,所以可利用 MyBatis Generator 自动生成实体类、DAO接口和Mapping映射文件。
MyBatis Generator (MBG) 是一个Mybatis的代码生成器 ,可以根据数据库中表结构自动生成简单的CRUD(插入,查询,更新,删除)操作。 但联合查询和存储过程,需手动手写SQL和对象。
下面以mysql库为例,记录 MyBatis Generator 使用方法。
一、准备工作
首先在数据库中新建一个简单的数据表:
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
二、执行命令生成
这种方法最简单,只需要下几个jar包即可。
2.1 准备需要的文件和jar包
mybatis-generator 下载地址:http://repo1.maven.org/maven2/org/mybatis/generator/mybatis-generator-core/
其中有 MyBatis生成器jar包 和 数据库驱动程序。
2.2 配置generatorConfig.xml
generatorConfig.xml为 mybatis-generator 配置文件,模板如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!--数据库驱动jar -->
<classPathEntry location="mysql-connector-java-5.1.46.jar" />
<context id="DB2Tables" targetRuntime="MyBatis3">
<!--去除注释 -->
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/test"
userId="root" password="root">
</jdbcConnection>
<!--默认false Java type resolver will always use java.math.BigDecimal if the database column is of type DECIMAL or NUMERIC. -->
<javaTypeResolver>
<property name="forceBigDecimals" value="true" />
</javaTypeResolver>
<!--生成实体类 指定包名 以及生成的地址 (可以自定义地址,但是路径不存在不会自动创建 使用Maven生成在target目录下,会自动创建) -->
<javaModelGenerator targetPackage="model" targetProject="src">
<property name="enableSubPackages" value="false" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--生成SQLMAP文件 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!--生成Dao文件 可以配置 type="XMLMAPPER"生成xml的dao实现 context id="DB2Tables" 修改targetRuntime="MyBatis3" -->
<javaClientGenerator type="XMLMAPPER" targetPackage="dao" targetProject="src">
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
<table tableName="user" domainObjectName="User" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
<property name="useActualColumnNames" value="true" />
</table>
</context>
</generatorConfiguration>
其中,我们需要修改generatorConfig.xml为自己的配置信息,主要包括
<classPathEntry>:数据库驱动jar,需要跟文件夹中的版本一致;
<jdbcConnection>:元素定义如何连接目标数据库;
<javaModelGenerator>:元素来指定生成 Java 模型对象所属的包。targetPackage为包名,targetProject为生成的地址;
<sqlMapGenerator>:元素来指定生成 SQL 映射文件所属的包和的目标项目;
<javaClientGenerator>:元素来指定目标包和目标项目生成的客户端接口和类;
<table>:要生成的表,tableName是数据库中的表名或视图名 domainObjectName是实体类名;
注意:targetProject,不会自动创建,需要手动创建。
更多详细配置可看官网:【http://www.mybatis.org/generator/configreference/xmlconfig.html 】
2.3 运行
打开控制台,进入到上面的目录下,执行命令
java -jar MyBatis生成器jar包 -configfile 配置文件 -overwrite
例如:
java -jar mybatis-generator-core-1.3.1.jar -configfile generatorConfig.xml -overwrite
运行完成,在targetProject\targetPackage目录下找到相应的文件。
三、使用Eclipse插件自动生成代码
3.1 安装eclipse插件
[Help]--[Eclipser Marketplace]中查找 Mybatis Generator,点击【Install】即开始安装,安装完成后重启Eclipse。
然后,查看插件是否安装成功:【File】 -> 【New】-> 【Other..】,如下,即安装成功。
如果上述方法没有安装成功,可以尝试手动安装方式:把这里的7个jar下载放到eclipse的plugins目录下,重启eclipse就行。
3.2 配置generatorConfig.xml
generatorConfig.xml 文件配置 跟上述配置文件类似。但略有不同:
- 为了更好的通用性,这里我将 <classPathEntry>改为了本地仓库中jar包的绝对路径。
- <targetProject> 略有不同,为 项目名称+自定义的文件名,必须已经存在,才能成功。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!--数据库驱动jar -->
<classPathEntry location="D:\.m2\repository\mysql\mysql-connector-java\5.1.46\mysql-connector-java-5.1.46.jar" />
<context id="DB2Tables" targetRuntime="MyBatis3">
<!--去除注释 -->
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/test"
userId="root" password="root">
</jdbcConnection>
<!--默认false Java type resolver will always use java.math.BigDecimal if the database column is of type DECIMAL or NUMERIC. -->
<javaTypeResolver>
<property name="forceBigDecimals" value="true" />
</javaTypeResolver>
<!--生成实体类 指定包名 以及生成的地址 (可以自定义地址,但是路径不存在不会自动创建 使用Maven生成在target目录下,会自动创建) -->
<javaModelGenerator targetPackage="model" targetProject="mybatis-generator/src">
<property name="enableSubPackages" value="false" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--生成SQLMAP文件 -->
<sqlMapGenerator targetPackage="mapper" targetProject="mybatis-generator/src">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!--生成Dao文件 可以配置 type="XMLMAPPER"生成xml的dao实现 context id="DB2Tables" 修改targetRuntime="MyBatis3" -->
<javaClientGenerator type="XMLMAPPER" targetPackage="dao" targetProject="mybatis-generator/src">
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
<table tableName="user" domainObjectName="User" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
<property name="useActualColumnNames" value="true" />
</table>
</context>
</generatorConfiguration>
3.3 运行
在generatorConfig.xml上右键—》Run As—》Run Mybatis Generator,生成如下相应代码。
四、Intellij IDEA自动生成代码
因为IntelliJ中没有mybatis-generato对应的插件,所以需要在MAVEN中使用 mybatis-generator-maven-plugin插件来完成功能。
4.1 添加依赖
</dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- mybatis generator 自动生成代码插件 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<!--<configurationFile>src/main/resources/generator/generatorConfig.xml</configurationFile>-->
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
</plugin>
</plugins>
</build>
如果配置文件的位置就在/src/main/resources目录下,可以省略<configurationFile>。
4.2 配置generatorConfig.xml
resources下建generatorConfig.xml,作为mybatis-generator-maven-plugin插件的执行目标。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!--数据库驱动jar -->
<classPathEntry location="D:\.m2\repository\mysql\mysql-connector-java\5.1.46\mysql-connector-java-5.1.46.jar" />
<context id="DB2Tables" targetRuntime="MyBatis3">
<!--去除注释 -->
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/test"
userId="root" password="root">
</jdbcConnection>
<!--默认false Java type resolver will always use java.math.BigDecimal if the database column is of type DECIMAL or NUMERIC. -->
<javaTypeResolver>
<property name="forceBigDecimals" value="true" />
</javaTypeResolver>
<!--生成实体类 指定包名 以及生成的地址 (可以自定义地址,但是路径不存在不会自动创建 使用Maven生成在target目录下,会自动创建) -->
<javaModelGenerator targetPackage="com.example.demo.model" targetProject="src/main/java">
<property name="enableSubPackages" value="false" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--生成SQLMAP文件 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!--生成Dao文件 可以配置 type="XMLMAPPER"生成xml的dao实现 context id="DB2Tables" 修改targetRuntime="MyBatis3" -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.demo.dao" targetProject="src/main/java">
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
<table tableName="user" domainObjectName="User" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
<property name="useActualColumnNames" value="true" />
</table>
</context>
</generatorConfiguration>
Intellij IDEA中 targetProject 不需要加 项目名称。
4.3 运行
点击run-Edit Configurations,添加配置:
command line :mybatis-generator:generate -e
最后生成的文件以及结构:
注意!!!同一张表一定不要运行多次,因为mapper的映射文件中会生成多次的代码,导致报错,切记 。
可以删除之后再重新运行。
五、参考
Running MyBatis Generator With Maven