Mybatis Generator 使用详解
- 需求产生:Maven 项目中使用 Mybatis 框架
– 需要对应数据库表结构,创建实体类
– 需要创建实体类对应的 Dao层接口,接口中定义简单的CRUD操作或高级查询方法
– 需要创建 Dao层接口对应的 XML 映射文件
引出 Mybatis Genertator 的使用
1、概念
- 定义:Mybatis Generator (MBG) 是 Mybatis 官方提供的代码生成器
- 作用:
- 根据数据库信息,自动生成 domain 实体类
- 自动生成 Dao层中简单的 CRUD 方法或 其他高级条件查询
- 自动生成 Dao层接口的 XML 映射文件
- MBG 强大的扩展性:
- 提供了接口和插件,可以自定义生成的代码
– 例如:自定义注释、代码格式化、添加 toString 方法等
- 提供了接口和插件,可以自定义生成的代码
2、使用示例
- 创建一个普通的 Maven工程,演示 Mybatis Generator 代码生成器的使用
1. 创建数据库
- 创建 maven 数据库和 items 表,并插入五条数据:
CREATE DATABASE `maven`;
DROP TABLE IF EXISTS `items`;
CREATE TABLE `items` (
`id` int(10) NOT NULL auto_increment,
`name` varchar(20) default NULL,
`price` float(10,0) default NULL,
`pic` varchar(40) default NULL,
`createtime` datetime default NULL,
`detail` varchar(200) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
INSERT INTO `items` VALUES ('1', '传智播客', '1000', null, '2018-03-13 09:29:30', '带我走上人生巅峰');
INSERT INTO `items` VALUES ('2', '黑马310', null, null, '2018-03-28 10:05:52', '插入测试');
INSERT INTO `items` VALUES ('3', '黑马307', '199', null, '2018-03-07 10:08:04', '插入测试');
INSERT INTO `items` VALUES ('7', '插入测试', null, null, null, null);
INSERT INTO `items` VALUES ('8', '插入测试', null, null, null, null);
2. 创建 Maven工程
- 未使用 Mybatis Generator 生成代码前:
3. 编写 pom.xml
-
此处使用 maven 插件方式 运行 MBG ,需要在 build / plugins 节点引入 MBG 插件,并加入其它依赖
- 例如 mybatis 等
-
在需要自动生成代码的 maven工程 pom.xml 文件中,添加 mybatis-generator-core 的依赖 jar包和编译设置
<?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.idea.mybatis</groupId>
<artifactId>mybatis16_mybatis-generator</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 添加 mybatis-generator-core的依赖坐标-->
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<!-- mybatis用于生成代码的配置文件 -->
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<!-- mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
<!-- mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
4. 编写配置文件
- 创建 jdbc.properties 文件,封装数据连接信息
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///maven
jdbc.username=root
jdbc.password=123456
- 创建 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>
<!-- 导入数据库文件 -->
<properties resource="jdbc.properties"/>
<context id="mysql" targetRuntime="MyBatis3Simple">
<property name="suppressAllComments" value="true" />
<property name="useActualColumnNames" value="false" />
<!-- 格式化java代码 -->
<property name="javaFormatter"
value="org.mybatis.generator.api.dom.DefaultJavaFormatter" />
<!-- 格式化XML代码 -->
<property name="xmlFormatter"
value="org.mybatis.generator.api.dom.DefaultXmlFormatter" />
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="${jdbc.driver}"
connectionURL="${jdbc.url}"
userId="${jdbc.username}"
password="${jdbc.password}">
</jdbcConnection>
<!-- java类型处理器 -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 配置domain实体类生成位置 -->
<javaModelGenerator targetPackage="com.itheima.domain"
targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 配置XML映射文件生成位置 -->
<sqlMapGenerator targetPackage="com/itheima/dao"
targetProject="src/main/resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 配置dao层接口生成位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.itheima.dao" targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 配置表信息 -->
<table tableName="items" enableCountByExample="true"
domainObjectName="Items" enableDeleteByExample="false"
enableSelectByExample="true" enableUpdateByExample="true">
<generatedKey column="ID" sqlStatement="MySQL"
identity="true" />
</table>
</context>
</generatorConfiguration>
5. 执行命令
- 在本工程的 pom.xml 文件中,配置 mybatis-generator-maven-plugin 插件,可以直接运行 maven命令执行
6. 生成结果
- 成功在该工程内,自动生成 items商品实体类、简单CRUD操作的 Dao层接口,以及接口对应的映射文件
- items商品实体类:
public class items {
private Integer id;
private String name;
private Float price;
private String pic;
private Date createtime;
private String detail;
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 Float getPrice() {
return price;
}
public void setPrice(Float price) {
this.price = price;
}
public String getPic() {
return pic;
}
public void setPic(String pic) {
this.pic = pic == null ? null : pic.trim();
}
public Date getCreatetime() {
return createtime;
}
public void setCreatetime(Date createtime) {
this.createtime = createtime;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail == null ? null : detail.trim();
}
}
- itemsMapper:Dao层接口,其中包含简单的 CRUD操作
public interface itemsMapper {
int deleteByPrimaryKey(Integer id);
int insert(items record);
items selectByPrimaryKey(Integer id);
List<items> selectAll();
int updateByPrimaryKey(items record);
}
- itemsMapper:Dao层接口对应的 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.itheima.dao.itemsMapper" >
<resultMap id="BaseResultMap" type="com.itheima.domain.items" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="price" property="price" jdbcType="REAL" />
<result column="pic" property="pic" jdbcType="VARCHAR" />
<result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
<result column="detail" property="detail" jdbcType="VARCHAR" />
</resultMap>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
delete from items
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.itheima.domain.items" >
<selectKey resultType="java.lang.Integer" keyProperty="id" order="AFTER" >
SELECT LAST_INSERT_ID()
</selectKey>
insert into items (name, price, pic,
createtime, detail)
values (#{name,jdbcType=VARCHAR}, #{price,jdbcType=REAL}, #{pic,jdbcType=VARCHAR},
#{createtime,jdbcType=TIMESTAMP}, #{detail,jdbcType=VARCHAR})
</insert>
<update id="updateByPrimaryKey" parameterType="com.itheima.domain.items" >
update items
set name = #{name,jdbcType=VARCHAR},
price = #{price,jdbcType=REAL},
pic = #{pic,jdbcType=VARCHAR},
createtime = #{createtime,jdbcType=TIMESTAMP},
detail = #{detail,jdbcType=VARCHAR}
where id = #{id,jdbcType=INTEGER}
</update>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select id, name, price, pic, createtime, detail
from items
where id = #{id,jdbcType=INTEGER}
</select>
<select id="selectAll" resultMap="BaseResultMap" >
select id, name, price, pic, createtime, detail
from items
</select>
</mapper>