本文介绍了MyBatis的基本概念、工作原理以及MyBatis官方生成器的作用和使用场景。文章详细讲解了安装和配置MyBatis官方生成器的步骤,并展示了如何生成Java模型类、Mapper接口和XML文件。通过实践案例和常见问题解答,进一步帮助读者理解和使用MyBatis官方生成器。
Mybatis的基本概念MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(普通老式Java对象)映射成数据库中的记录。MyBatis提供了强大的映射语句和存放结果映射及增删改查等操作的支持,简化了数据访问层的开发工作。
MyBatis的工作流程主要包括以下几个步骤:
mybatis-config.xml
)来配置数据库连接信息和映射文件路径。SqlSessionFactoryBuilder
类创建SqlSessionFactory
。SqlSessionFactory
是一个工厂类,用于创建SqlSession
。SqlSessionFactory
创建SqlSession
,SqlSession
提供了执行SQL语句的接口。SqlSession
执行SQL语句,进行数据库的增删改查操作。MyBatis Generator是MyBatis的一个官方工具,用于生成数据库的映射文件和Java模型类。它能够简化项目中数据访问层的开发工作,减少手动编写SQL映射文件和Java模型类的时间和错误。
MyBatis Generator主要适用于以下场景:
下载MyBatis Generator:从MyBatis Generator的GitHub仓库下载最新版本的jar包。具体下载地址和版本信息可以在MyBatis Generator的官方文档中找到。
resources
目录下创建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="DB2Tables" targetRuntime="MyBatis3"> <!-- 数据库驱动类 --> <classPathEntry value="mysql-connector-java-8.0.22.jar"/> <!-- 数据库连接信息 --> <jdbcConnection driverType="MySQL"> <property name="connectionURL" value="jdbc:mysql://localhost:3306/test"/> <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/> <property name="password" value="password"/> <property name="userId" value="root"/> </jdbcConnection> <!-- 实体类生成配置 --> <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/> <!-- Mapper接口生成配置 --> <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"/> <!-- Java Mapper接口生成配置 --> <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"/> </context> </generatorConfiguration>
generatorConfig.xml
文件用于配置MyBatis Generator的各个生成器插件和数据库连接信息。每个<context>
标签内可以配置多个<table>
标签,每个标签代表一个数据库表的生成配置。
以下是一个配置文件示例:
<?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="DB2Tables" targetRuntime="MyBatis3"> <classPathEntry value="mysql-connector-java-8.0.22.jar"/> <jdbcConnection driverType="MySQL"> <property name="connectionURL" value="jdbc:mysql://localhost:3306/test"/> <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/> <property name="password" value="password"/> <property name="userId" value="root"/> </jdbcConnection> <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"/> </context> </generatorConfiguration>
MyBatis Generator根据数据库表结构生成Java模型类。以下是一个生成的模型类示例:
package com.example.model; import java.util.Date; 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; } }
MyBatis Generator生成Mapper接口和对应的XML文件。以下是一个生成的Mapper接口示例:
package com.example.mapper; import com.example.model.User; 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(User record); int updateByPrimaryKey(User record); }
以下是一个生成的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"> <id column="id" jdbcType="INTEGER" property="id" /> <result column="name" jdbcType="VARCHAR" property="name" /> <result column="email" jdbcType="VARCHAR" property="email" /> </resultMap> <sql id="Base_Column_List"> id, name, email </sql> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer"> select <if test="select != null"> ${select} </if> <if test="select == null"> * </if> from user <where> <if test="id != null"> and id = #{id, jdbcType=INTEGER} </if> </where> </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> <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer"> delete from user where id = #{id, jdbcType=INTEGER} </delete> <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> </set> where id = #{id, jdbcType=INTEGER} </update> </mapper>生成器的高级配置
MyBatis Generator允许自定义生成的代码模板。你可以在generatorConfig.xml
文件中配置模板文件路径。以下是一个配置示例:
<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java" fileEncoding="UTF-8"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> <property name="modelType" value="flat"/> <property name="templateLocation" value="src/main/resources/templates"/> </javaModelGenerator>
将模板文件放置在src/main/resources/templates
位置,并指定modelType
属性为flat
。
MyBatis Generator允许自定义生成的DAO层规则。你可以在generatorConfig.xml
文件中配置生成的DAO层规则。以下是一个配置示例:
<javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> <property name="additionalProperties" value="beginningOfLineWithColon=true"/> </javaClientGenerator>实践案例及常见问题解答
新项目初始化:
<table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
generatorConfig.xml
文件配置正确,包括数据库连接信息、表名等。生成代码不更新:
mvn mybatis-generator:generate