Mybatis官方生成器教程详细介绍了Mybatis Generator的安装、配置及使用方法,帮助开发者自动生成Mybatis相关的Java实体类、Mapper接口和XML映射文件,提高开发效率。文章还涵盖了Mybatis Generator的高级应用,如自定义模板和配置优化等内容。
Mybatis简介Mybatis 是一个优秀的持久层框架,它支持自定义 SQL 查询,存储过程以及高级映射。它通过使用简单的 XML 或注解进行配置和原始类型映射,将接口和 Java 的 POJO(Plain Old Java Object,普通的 Java 对象)映射成数据库中的记录。Mybatis 与 Mybatis Plus 作为持久层框架,各有优势,Mybatis Plus 作为 Mybatis 的增强工具,在 Mybatis 的基础上提供了更多便捷的功能,但本文主要讲解的是 Mybatis 本身。
Mybatis的基本概念Mybatis 是基于 Java 的持久层框架,主要用于简化 Java 代码与数据库的交互。它通过 XML 配置文件或注解来配置 POJO 与 SQL 之间的映射关系。Mybatis 支持自定义 SQL 语句、存储过程以及高级映射,能够适应复杂的数据库操作场景。Mybatis 的核心组件包括:
- SqlSessionFactory:SqlSessionFactory 是 Mybatis 的工厂类,用于创建 SqlSession 对象。
- SqlSession:SqlSession 提供了执行 SQL 语句、提交事务等常用功能的接口。
- Mapper 接口:Mapper 接口是 Mybatis 用于定义 SQL 语句的接口,通过实现 Mapper 接口,可以调用对应的 SQL 语句。
- POJO:POJO(Plain Old Java Object)是 Mybatis 中用于封装数据库记录的 Java 对象。
- XML 映射文件:XML 映射文件用于指定 POJO 与 SQL 语句之间的映射关系。
- Configuration:Configuration 类包含了 Mybatis 的各种配置信息,如数据库连接信息、映射文件路径等。
Mybatis 有以下几个优势:
- 灵活性:Mybatis 提供了非常灵活的 SQL 语句编写方式,可以根据具体需求编写复杂 SQL 语句,而不需要使用繁琐的对象关系映射。
- 性能:Mybatis 使用了动态 SQL 机制,可以针对不同的条件生成不同的 SQL 语句,减少了数据库的查询次数,提高了性能。
- 轻量级:Mybatis 体积小巧,易于部署和使用,不需要复杂的配置,降低了学习和使用难度。
- 支持复杂查询:Mybatis 支持存储过程和高级映射,可以满足复杂查询需求。
Mybatis的应用场景
- 复杂查询:在存在复杂业务逻辑和查询情况下,Mybatis 提供了灵活的 SQL 语句编写方式,支持存储过程和高级映射,可以满足复杂查询需求。
- 性能要求较高:由于 Mybatis 使用了动态 SQL 机制,可以针对不同的条件生成不同的 SQL 语句,减少了数据库的查询次数,提高了性能。
- 灵活性要求较高:Mybatis 提供了非常灵活的 SQL 语句编写方式,可以根据具体需求编写复杂 SQL 语句,而不需要使用繁琐的对象关系映射。
- 轻量级应用:Mybatis 体积小巧,易于部署和使用,不需要复杂的配置,降低了学习和使用难度。
Mybatis 的安装非常简单,可以通过 Maven 或者直接下载 Mybatis 的 jar 包来安装。推荐使用 Maven 来管理 Mybatis,因为 Maven 可以自动处理依赖关系,管理版本。
Maven 安装
在项目的 pom.xml 文件中添加以下依赖:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
</dependency>
</dependencies>
手动下载安装
Mybatis 的 jar 包可以从其官网下载,下载后将 jar 包添加到项目的 classpath 中。
配置Mybatis环境配置 Mybatis 环境主要涉及到数据库连接和 Mybatis 配置文件的编写。
数据库连接配置
创建一个数据库连接文件,例如 src/main/resources/config.properties
,内容如下:
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mydatabase
jdbc.username=root
jdbc.password=root
Mybatis配置文件
创建一个 Mybatis 配置文件,例如 src/main/resources/mybatis-config.xml
,内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias alias="User" type="com.example.model.User"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
Mybatis官方生成器介绍
什么是Mybatis Generator
Mybatis Generator 是一个代码生成工具,可以自动生成 Mybatis 的 Java 实体类(POJO)、Mapper 接口和对应的 XML 映射文件。它可以根据数据库表结构自动生成这些代码,减少了手动编写代码的工作量,提高了开发效率。
Mybatis Generator的优势及其作用
Mybatis Generator 的优势包括:
- 自动化:Mybatis Generator 可以自动根据数据库表结构生成 Mybatis 的相关代码,减少了手动编写代码的工作量。
- 一致性:生成的代码保持一致的风格和规范,减少了由于手工编写代码而导致的错误。
- 灵活性:Mybatis Generator 支持各种配置选项,可以根据需求自定义生成的代码。
- 维护性:生成的代码可以方便地进行维护和更新,如果数据库表结构发生变化,可以重新生成代码。
Mybatis Generator 的作用:
- 代码生成:根据数据库表结构自动生成 Mybatis 的 Java 实体类(POJO)、Mapper 接口和对应的 XML 映射文件。
- 数据库表结构变更:如果数据库表结构发生变化,可以重新生成代码,保持代码与数据库表结构的一致性。
- 减少错误:自动生成的代码减少了由于手工编写代码而导致的错误,提高了开发效率。
Mybatis Generator 可以通过 Maven 或者直接下载 jar 包来安装。推荐使用 Maven 来管理 Mybatis Generator,因为 Maven 可以自动处理依赖关系,管理版本。
Maven 安装
在项目的 pom.xml 文件中添加以下依赖:
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
</dependency>
</dependencies>
手动下载安装
Mybatis Generator 的 jar 包可以从其官网下载,下载后将 jar 包添加到项目的 classpath 中。
配置Mybatis Generator配置 Mybatis Generator 主要涉及到配置文件的编写。
配置文件
创建一个 Mybatis Generator 配置文件,例如 src/main/resources/mybatis-generator.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.dtd">
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mydatabase"
userId="root"
password="root"/>
<javaModelGenerator targetPackage="com.example.model"
targetProject="src/main/java"/>
<sqlMapGenerator targetPackage="com.example.mapper"
targetProject="src/main/resources"/>
<javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.example.mapper"
targetProject="src/main/java"/>
<table tableName="user" domainObjectName="User" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false">
<columnOverride column="email" javaType="String"/>
</table>
</context>
</generatorConfiguration>
使用Mybatis Generator生成代码
生成POJO、Mapper接口、XML映射文件等
Mybatis Generator 可以生成 Java 实体类(POJO)、Mapper 接口和对应的 XML 映射文件。
生成POJO
Mybatis Generator 会根据数据库表结构自动生成 Java 实体类(POJO)。例如,对于数据库表 user
,生成的 POJO 类如下:
package com.example.model;
public class User {
private Integer id;
private String name;
private String email;
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;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
生成Mapper接口
Mybatis Generator 会根据数据库表结构自动生成 Mapper 接口。例如,对于数据库表 user
,生成的 Mapper 接口如下:
package com.example.mapper;
import com.example.model.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.ResultHandler;
import java.util.List;
public interface UserMapper {
int deleteByPrimaryKey(Integer id);
int insert(User record);
int insertSelective(User record);
User selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(@Param("record") User record);
int updateByPrimaryKey(@Param("record") User record);
List<User> selectAllUsers(ResultHandler resultHandler);
}
生成XML映射文件
Mybatis Generator 会根据数据库表结构自动生成对应的 XML 映射文件。例如,对于数据库表 user
,生成的 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.example.mapper.UserMapper">
<resultMap id="BaseResultMap" type="com.example.model.User">
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="email" property="email"/>
</resultMap>
<sql id="Base_Column_List">
id, name, email
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
SELECT
<if test="selective">
<if test="columns != null and columns.length > 0">
${selectColumns}, id
</if>
<if test="columns == null or columns.length == 0">
id, name, email
</if>
</if>
<if test="notSelective">
id, name, email
</if>
FROM user WHERE id = #{id,jdbcType=INTEGER}
</select>
<select id="selectAllUsers" resultMap="BaseResultMap">
SELECT
<if test="columns != null and columns.length > 0">
${selectColumns}, id
</if>
<if test="columns == null or columns.length == 0">
id, name, email
</if>
FROM user
</select>
<insert id="insert" parameterType="com.example.model.User">
INSERT INTO user (id, name, email)
VALUES (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR})
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.example.model.User">
UPDATE user SET
<if test="name != null">
name = #{name,jdbcType=VARCHAR},
</if>
<if test="email != null">
email = #{email,jdbcType=VARCHAR},
</if>
WHERE id = #{id,jdbcType=INTEGER}
</update>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
DELETE FROM user WHERE id = #{id,jdbcType=INTEGER}
</delete>
</mapper>
配置生成规则
Mybatis Generator 支持多种配置选项,例如表名、列名、包名等。
表名
可以在配置文件中指定表名,例如:
<table tableName="user" domainObjectName="User" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false">
<columnOverride column="email" javaType="String"/>
</table>
列名
可以在配置文件中指定列名,例如:
<table tableName="user" domainObjectName="User" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false">
<columnOverride column="email" javaType="String"/>
</table>
生成过程中的常见问题及解决方法
生成失败
如果生成过程中出现错误,可以检查数据库连接信息是否正确,数据库表结构是否符合生成规则。
生成的代码不一致
如果生成的代码与预期不符,可以调整配置文件中的选项,例如修改表名、列名等。
Mybatis Generator的高级应用 自定义模板Mybatis Generator 支持自定义模板,可以通过模板来自定义生成的代码。模板文件可以指定生成的 Java 类、Mapper 接口和 XML 映射文件的具体内容。
示例:自定义Java类模板
可以在配置文件中指定自定义的 Java 类模板文件路径,例如:
<javaModelGenerator targetPackage="com.example.model"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
<property name="modelType" value="flat"/>
<property name="enableCache" value="true"/>
<property name="templateLocation" value="src/main/resources/templates"/>
</javaModelGenerator>
示例:自定义Mapper接口模板
可以在配置文件中指定自定义的 Mapper 接口模板文件路径,例如:
<javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.example.mapper"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="templateLocation" value="src/main/resources/templates"/>
</javaClientGenerator>
示例:自定义XML映射文件模板
可以在配置文件中指定自定义的 XML 映射文件模板文件路径,例如:
<sqlMapGenerator targetPackage="com.example.mapper"
targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
<property name="templateLocation" value="src/main/resources/templates"/>
</sqlMapGenerator>
生成器配置的优化
Mybatis Generator 支持多种配置选项,可以通过调整配置文件中的选项来优化代码生成的过程。
生成子包
可以通过配置文件中的 enableSubPackages
选项来生成子包,例如:
<javaModelGenerator targetPackage="com.example.model"
targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaModelGenerator>
生成缓存
可以通过配置文件中的 enableCache
选项来生成缓存,例如:
<javaModelGenerator targetPackage="com.example.model"
targetProject="src/main/java">
<property name="enableCache" value="true"/>
</javaModelGenerator>
生成可选的Mapper方法
可以通过配置文件中的 enableSelectByExample
、enableInsertByExample
、enableUpdateByExample
和 enableDeleteByExample
选项来生成可选的 Mapper 方法,例如:
<table tableName="user" domainObjectName="User" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" selectByExampleQueryId="false">
</table>
维护和更新生成的代码
如果数据库表结构发生变化,可以重新生成代码。生成的代码可以方便地进行维护和更新。
维护代码
可以通过修改配置文件中的选项来维护生成的代码,例如修改表名、列名等。
更新代码
如果数据库表结构发生变化,可以重新生成代码,保持代码与数据库表结构的一致性。
通过以上介绍,可以了解到 Mybatis Generator 是一个非常强大的代码生成工具,可以帮助开发人员快速生成 Mybatis 的相关代码,提高开发效率。
共同学习,写下你的评论
评论加载中...
作者其他优质文章