mybatis的实体类和mapper的文件可以通过MyBatis Generator 的生成器来自动生成,主要是根据配置文件,根据数据库的对应的表,自动生成实体类和对应的mapper的文件
一般来说有两种方式:
- 一种使用java的配置方式
- 一种使用maven插件的方式
可以参考官方的文档 ,文档有详细的描述:
http://www.mybatis.org/generator/running/runningWithMaven.html
这里主要介绍两种的实现方式,maven插件的方式更加方便(推荐使用),这种主要有备份文件产生,比较实用
具体实现代码:
参考github的项目mybatis下的mybatis-generator的工程
地址为: https://github.com/sunkang123/mybatis
1.maven插件方式
- 配置文件如下
<?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>
<!--<classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" />-->
<context id="mysqlTables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="false"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 如果不指定classPathEntry加载的数据库驱动包的位置,可以使用pom来导入驱动包-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis"
userId="root"
password="123">
</jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--targetProject 可以使用相对路径也可以使用决定路径-->
<!--javaModelGenerator指定了实体类-->
<javaModelGenerator targetPackage="com.mybatis.project.po" targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--javaClientGenerator这个是生成mapper的xml文件,targetPackage指定生成包-->
<sqlMapGenerator targetPackage="com.mybatis.project.mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER" targetPackage="com.mybatis.project.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!--table 指定了数据的表-->
<table tableName="items">
<property name="useActualColumnNames" value="false"/>
<!--<generatedKey column="ID" sqlStatement="DB2" identity="true"/>-->
<columnOverride column="DATE_FIELD" property="startDate"/>
<ignoreColumn column="FRED"/>
<columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR"/>
</table>
<table tableName="orders">
<property name="useActualColumnNames" value="false"/>
<!--<generatedKey column="ID" sqlStatement="DB2" identity="true"/>-->
<columnOverride column="DATE_FIELD" property="startDate"/>
<ignoreColumn column="FRED"/>
<columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR"/>
</table>
<table tableName="orderdetail"></table>
<table tableName="user"></table>
</context>
</generatorConfiguration>
- pom的配置如下:
//如果配置不指定,这里需要加上数据库驱动包的依赖
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
<build>
<!--使用插件的方式自动生成代码-->
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.3</version>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<configurationFile>${project.basedir}/src/main/resources/generatorConfig.xml</configurationFile>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
- 运行插件
mvn mybatis-generator:generate
2.java的使用方式
配置文件还是跟上面的一样
package com.mybatis.generator;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* @Project: mybatis
* @description: java 版本的方式 ,需要些java代码来启动 (建议使用插件来管理)
* @author: sunkang
* @create: 2018-10-09 21:23
* @ModificationHistory who when What
**/
public class GeneratorSqlMap {
public void generator() throws Exception{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
String path = GeneratorSqlMap.class.getClassLoader().getResource("").getPath().toString();
System.out.println(path);
File configFile = new File(path,"generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
callback, warnings);
myBatisGenerator.generate(null);
}
public static void main(String[] args) throws Exception {
try {
GeneratorSqlMap generatorSqlmap = new GeneratorSqlMap();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}