文檔: http://mybatis.org/generator/index.html 依賴 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mouday</groupId>
<artifactId>generator-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<configuration>
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
生成器配置 generatorConfig.xml
<?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>
<context id="default" targetRuntime="MyBatis3">
<!-- jdbc的資料庫連接配接 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/data"
userId="root"
password="123456"/>
<!-- Model模型生成器-->
<javaModelGenerator targetPackage="com.mouday.demo.model"
targetProject="src/main/java"/>
<!-- Mapper映射檔案-->
<sqlMapGenerator targetPackage="com.mouday.demo.mapper"
targetProject="src/main/java"/>
<!-- Mapper接口-->
<javaClientGenerator targetPackage="com.mouday.demo.mapper"
targetProject="src/main/java"
type="XMLMAPPER"/>
<table tableName="person"/>
</context>
</generatorConfiguration>
參數說明
通用參數
targetPackage 指定包名
targetProject 指定路徑
javaClientGenerator可選參數:
type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper對象
type="MIXEDMAPPER",生成基于注解的Java Model 和相應的Mapper對象
type="XMLMAPPER",生成SQLMap XML檔案和獨立的Mapper接口
# 執行代碼生成
$ mvn mybatis-generator:generate
# 生成的檔案
$ tree
.
├── mapper
│ ├── PersonMapper.java
│ └── PersonMapper.xml
└── model
├── Person.java
└── PersonExample.java
檢視生成的檔案裡邊有很多無用的代碼,可以通過進一步的配置來控制代碼生成
<?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>
<context id="default" targetRuntime="MyBatis3">
<!--建立class時,對注釋進行控制-->
<commentGenerator>
<property name="suppressDate" value="true"/>
<!--注釋掉這行可以解決生成重複xml代碼-->
<property name="suppressAllComments" value="true"/>
<property name="javaFileEncoding" value="UTF-8"/>
</commentGenerator>
<!-- jdbc的資料庫連接配接 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/data"
userId="root"
password="123456">
</jdbcConnection>
<!-- 非必需,類型處理器,在資料庫類型和java類型之間的轉換控制 -->
<javaTypeResolver>
<!-- 是否使用BigDecimals,false可自動轉化以下類型(Long Integer Short等) -->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- Model模型生成器-->
<javaModelGenerator targetPackage="com.mouday.demo.model"
targetProject="src/main/java">
<!--是否允許子包,即targetPackage.schemaName.tableName-->
<property name="enableSubPackages" value="true"/>
<!-- 是否對類CHAR類型的列的資料進行trim操作 -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- Mapper映射檔案-->
<sqlMapGenerator targetPackage="com.mouday.demo.mapper"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- Mapper接口-->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.mouday.demo.mapper"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要生成的表 tableName是資料庫中的表名或視圖名
domainObjectName是實體類名-->
<table tableName="person"
domainObjectName="Person"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false">
</table>
</context>
</generatorConfiguration>
生成的代碼就簡潔了不少
Person.java
package com.mouday.demo.model;
public class Person {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
PersonMapper.java
package com.mouday.demo.mapper;
import com.mouday.demo.model.Person;
public interface PersonMapper {
int deleteByPrimaryKey(Integer id);
int insert(Person record);
int insertSelective(Person record);
Person selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(Person record);
int updateByPrimaryKey(Person record);
}
PersonMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mouday.demo.mapper.PersonMapper">
<resultMap id="BaseResultMap" type="com.mouday.demo.model.Person">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="age" jdbcType="INTEGER" property="age" />
</resultMap>
<sql id="Base_Column_List">
id, name, age
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from person
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from person
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.mouday.demo.model.Person">
insert into person (id, name, age
)
values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER}
)
</insert>
<insert id="insertSelective" parameterType="com.mouday.demo.model.Person">
insert into person
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="name != null">
name,
</if>
<if test="age != null">
age,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=INTEGER},
</if>
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
<if test="age != null">
#{age,jdbcType=INTEGER},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.mouday.demo.model.Person">
update person
<set>
<if test="name != null">
name = #{name,jdbcType=VARCHAR},
</if>
<if test="age != null">
age = #{age,jdbcType=INTEGER},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.mouday.demo.model.Person">
update person
set name = #{name,jdbcType=VARCHAR},
age = #{age,jdbcType=INTEGER}
where id = #{id,jdbcType=INTEGER}
</update>
</mapper>