当我们使用hibernate作为数据持久层的时候,对于实体类的生成在Idea中可以使用__Persistence__菜单进行实体类的自动生成(Persistence->Generate Persistence Mapping->By Database Schema)
当使用mybatis的时候,hibernate的Persistence菜单不能使用,但是mybatis提供了另一个非常好用的插件__mybatis-generator__,可以通过maven插件的方式,一键生成实体类、接口类、Xml映射等
maven配置
jar包引入
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.4.0</version>
</dependency>
<!-- mybatis通用Mapper类 -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.5</version>
</dependency>
<!-- mybatis类 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
<!-- mybatis+spring整合包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.5</version>
</dependency>
配置maven插件
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<configurationFile>
${basedir}/src/main/resources/generator/generatorConfig.xml
</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.5</version>
</dependency>
</dependencies>
</plugin>
配置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>
<!-- 引入数据库配置文件 -->
<properties resource="conf/jdbc.properties"></properties>
<context id="mySqlContext" defaultModelType="flat">
<!-- 自动处理mysql中的关键字 -->
<property name="autoDelimitKeywords" value="true"/>
<!-- sql关键字中的分隔符 -->
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!-- 编码 -->
<property name="javaFileEncoding" value="UTF-8"/>
<!-- 继承mybatis通用类 -->
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
<property name="caseSensitive" value="true"/>
<property name="forceAnnotation" value="true"/>
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
</plugin>
<!-- 阻止自动生成时间戳和MBG注释,会影响版本控制 -->
<commentGenerator>
<property name="suppressDate" value="true"/>
</commentGenerator>
<!-- 数据库信息 -->
<jdbcConnection
driverClass="${jdbc.driver}"
connectionURL="${jdbc.url}"
userId="${jdbc.username}"
password="${jdbc.password}"
>
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<!-- 生成实体类的位置 -->
<javaModelGenerator targetPackage="com.bc.entity" targetProject="src/main/java">
<!-- 如果设置为true会在targetPackage的基础上,根据数据库的schema再生成一层package -->
<property name="enableSubPackages" value="false"/>
<!-- 在getter方法中,对String类型字段调用trim()方法 -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 如果用XML格式,该配置需要配置 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src\main\resources">
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!--
mapper的生成形式
XMLMAPPER:XML形式,不需要mapper注解
-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.bc.dao" targetProject="src/main/java"></javaClientGenerator>
<!-- 配置要生成的表 -->
<table tableName="bc_one" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false" enableUpdateByExample="false">
<!-- 设置mysql主键 -->
<generatedKey column="id" sqlStatement="MySql"></generatedKey>
<!-- 匹配生成的类型名称,替换掉数据中的前缀 -->
<domainObjectRenamingRule searchString="^Bc" replaceString=""></domainObjectRenamingRule>
</table>
</context>
</generatorConfiguration>
使用方式
在项目根目录中执行:
mvn mybatis-generator:generate
执行成功后,会显示如下界面
如果执行失败的话,可以在上述命令执行时候在结尾增加__-X__参数。会显示详细的执行日志
完成,就会发生已经生成了实体、接口类和xml映射文件
每个文件内容如下:
OneMapper.java
package com.bc.dao;
import com.bc.entity.One;
import tk.mybatis.mapper.common.Mapper;
public interface OneMapper extends Mapper<One> {
//继承了通用类,可以实现一些通用的函数,这里可以编写自定义查询函数...
}
One.java
package com.bc.entity;
import javax.persistence.*;
@Table(name = "`bc_one`")
public class One {
@Id
@Column(name = "`id`")
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "SELECT LAST_INSERT_ID()")
private Integer id;
@Column(name = "`name`")
private String name;
@Column(name = "`age`")
private Integer age;
/**
* @return id
*/
public Integer getId() {
return id;
}
/**
* @param id
*/
public void setId(Integer id) {
this.id = id;
}
/**
* @return name
*/
public String getName() {
return name;
}
/**
* @param name
*/
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
/**
* @return age
*/
public Integer getAge() {
return age;
}
/**
* @param age
*/
public void setAge(Integer age) {
this.age = age;
}
}
OneMapper.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.bc.dao.OneMapper">
<resultMap id="BaseResultMap" type="com.bc.entity.One">
<!--
WARNING - @mbg.generated
-->
<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">
<!--
WARNING - @mbg.generated
-->
id, `name`, age
</sql>
</mapper>
至此mybatis-generator的配置和用法就记录完成了,感觉上确实方便了很多,对于Dao类生成来说,不需要重复的去建立文件了,直接通过命令行直接生成就好了
下一篇文章介绍mybatis与springmvc的整合和使用