继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Mybatis官方生成器学习入门

墨色风雨
关注TA
已关注
手记 319
粉丝 75
获赞 351
概述

Mybatis官方生成器是一个强大的工具,能够根据数据库表自动生成Mybatis的映射文件和Java实体类,大大减少开发过程中编写和维护这些文件的工作量。本文将详细介绍Mybatis官方生成器的基本使用方法、配置选项以及实际应用案例,帮助读者快速上手。此外,还将探讨Mybatis官方生成器的高级配置和个性化设置,以满足不同项目的需求。

Mybatis简介
Mybatis是什么

Mybatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。Mybatis 可以通过简单的 API 将 Java 对象映射成数据库中的记录,反之亦然。它提供了灵活的配置和映射的 XML 文件,或者直接使用注解进行配置。Mybatis 的设计目标是简化数据库操作,使开发人员能够更加专注于 SQL 语句的编写,而不是繁琐的 JDBC 代码。

Mybatis的基本特性
  • SQL映射:Mybatis 允许将 SQL 语句定义在 XML 文件或注解中,通过这种方式,可以将数据库操作从 Java 代码中分离出来,提高了代码的可读性和可维护性。
  • 动态 SQL:Mybatis 提供了强大的动态 SQL 生成能力,可以根据不同的条件生成不同的 SQL 语句,从而提高了应用程序的灵活性。
  • 结果集映射:Mybatis 可以将查询结果映射到 Java 对象中,支持一对一、一对多、多对多等复杂的数据映射关系。
  • 扩展机制:Mybatis 提供了丰富的扩展机制,可以方便地进行插件开发,以满足不同的业务需求。
Mybatis的优势和应用场景
  • 灵活性:Mybatis 比其他 ORM 框架(如 Hibernate)更加灵活,因为它允许开发人员直接编写 SQL 语句,可以针对不同的数据库进行优化。
  • 性能:Mybatis 通过直接执行原生 SQL 语句,避免了 ORM 框架中存在的性能瓶颈。
  • 可维护性:Mybatis 的 XML 配置文件和注解方式使得数据库操作的配置易于维护,同时,通过将 SQL 语句定义在外部文件中,可以方便地管理和修改 SQL 语句。
  • 应用案例:Mybatis 在互联网、金融、电信、医疗等多个行业中被广泛应用,特别是在需要高性能、高灵活性的企业级应用中。
安装与配置Mybatis
Mybatis的下载与安装

Mybatis 的下载和安装非常简单,只需要从 Mybatis 官方网站下载最新版本的 Mybatis 框架即可。Mybatis 的安装过程不需要安装任何额外的软件,只需要将下载的 JAR 文件添加到项目的类路径中即可。

下载 Mybatis

  1. 访问 Mybatis 官方网站或 Maven 仓库获取最新的 Mybatis 发行包。
  2. 下载 .jar 文件,此文件包含 Mybatis 核心库和相关依赖项。

安装 Mybatis

  1. 将下载的 Mybatis JAR 文件导入到项目的类路径中。
  2. 如果使用 Maven 构建工具,可以在 pom.xml 文件中添加 Mybatis 的依赖。

以下是一个示例的 Maven 依赖配置:

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.23</version>
    </dependency>
</dependencies>

Mybatis的基本配置

Mybatis 的基本配置主要包括 mybatis-config.xml 文件的配置,该文件是 Mybatis 的主配置文件,包含了数据库连接信息、类型映射等信息。

配置数据库连接信息

mybatis-config.xml 文件中,需要配置数据库连接的信息,包括数据库 URL、用户名和密码。

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

配置类型映射

mybatis-config.xml 文件中,还需要配置 typeAliasesmappers 节点,这些节点定义了 Java 类与数据库表的映射关系。

<typeAliases>
    <typeAlias type="com.example.model.User" alias="User"/>
</typeAliases>

<mappers>
    <mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>

Mybatis与数据库的连接

Mybatis 通过 SqlSessionFactory 对象来获取 SqlSession 对象,SqlSession 对象是执行 SQL 语句的入口。

  1. 创建 SqlSessionFactory 对象。
  2. 使用 SqlSessionFactory 对象获取 SqlSession 对象。
  3. 通过 SqlSession 对象执行 SQL 语句。

创建 SqlSessionFactory 对象

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

获取 SqlSession 对象

SqlSession session = sqlSessionFactory.openSession();

执行 SQL 语句

User user = session.selectOne("com.example.mapper.UserMapper.selectUser", 1);
session.close();
Mybatis官方生成器介绍
Mybatis官方生成器的作用

Mybatis 官方生成器(Mybatis Generator)是一个强大的工具,用于根据数据库表生成 Mybatis 的映射文件(XML 文件)和 Java 实体类。这样可以大大减少开发过程中编写和维护这些文件的工作量,尤其是在处理大量数据库表时。

优点

  • 自动生成映射文件和实体类,减少手工编写的工作量。
  • 确保生成的代码与数据库表结构一致,减少出错的可能性。
  • 支持多种数据库和数据库方言,具有良好的可移植性。
  • 可以根据需要自定义生成的代码模板,使得生成的代码更加符合实际需求。
Mybatis官方生成器的工作原理

Mybatis Generator 通过读取数据库的元数据(如表名、字段名、数据类型等)并根据配置生成对应的 Mybatis 映射文件和 Java 实体类。生成的映射文件中包含了相应的 SQL 语句和结果映射信息,而生成的 Java 实体类则与数据库表结构一一对应。

  1. 读取配置文件:Mybatis Generator 读取配置文件(XML 或 Maven 配置)以获取数据库连接信息和生成规则。
  2. 连接数据库:连接目标数据库,获取数据库的元数据信息。
  3. 生成映射文件和实体类:根据获取到的元数据信息生成 SQL 映射文件和 Java 实体类。
  4. 输出生成的文件:将生成的文件写入指定的目录。
Mybatis官方生成器的适用场景
  • 新项目开发:对于新启动的项目,使用 Mybatis Generator 可以快速生成基础的映射文件和实体类,减少开发初期的工作量。
  • 已有项目重构:对于已经存在的项目,可以使用 Mybatis Generator 来更新映射文件和实体类,使其与数据库表结构保持一致。
  • 快速原型开发:在快速原型开发中,Mybatis Generator 可以快速生成基础的代码,加快开发进度。
Mybatis官方生成器的使用
Maven配置与依赖

在使用 Mybatis Generator 时,需要在项目的 Maven 配置文件中添加 Mybatis Generator 的依赖。

<dependencies>
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.3.7</version>
    </dependency>
</dependencies>
编写生成器配置文件

Mybatis Generator 的配置文件通常是一个 XML 文件,例如 generatorConfig.xml。该文件定义了数据库连接信息、生成的文件输出位置、生成的文件名称等信息。

XML配置文件说明

<generatorConfiguration>
    <classPathEntry location="lib/mysql-connector-java-8.0.23.jar"/>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
        </commentGenerator>
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mydatabase"
                        userId="root"
                        password="password">
        </jdbcConnection>
        <javaModelGenerator targetPackage="com.example.model"
                            targetProject="src/main/java"/>
        <sqlMapGenerator targetPackage="com.example.mapper"
                         targetProject="src/main/resources"/>
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.example.mapper"
                             targetProject="src/main/java"/>
        <table tableName="user" domainObjectName="User"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
    </context>
</generatorConfiguration>
``

### 实际示例

假设有一个数据库表 `user`,我们需要生成该表的映射文件和实体类。可以使用以下配置文件:

```xml
<generatorConfiguration>
    <classPathEntry location="lib/mysql-connector-java-8.0.23.jar"/>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
        </commentGenerator>
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mydatabase"
                        userId="root"
                        password="password">
        </jdbcConnection>
        <javaModelGenerator targetPackage="com.example.model"
                            targetProject="src/main/java"/>
        <sqlMapGenerator targetPackage="com.example.mapper"
                         targetProject="src/main/resources"/>
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.example.mapper"
                             targetProject="src/main/java"/>
        <table tableName="user" domainObjectName="User"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
    </context>
</generatorConfiguration>
``

### 生成器的运行和结果查看

#### 运行生成器

可以通过命令行工具运行 Mybatis Generator,也可以在 Maven 项目中执行生成器任务。

##### 命令行运行

```bash
java -jar mybatis-generator-core-1.3.7.jar -configfile generatorConfig.xml
Maven 插件运行

pom.xml 文件中添加 Mybatis Generator 的 Maven 插件配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.7</version>
            <configuration>
                <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
                <overwrite>true</overwrite>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>8.0.23</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

运行命令:

mvn mybatis-generator:generate

结果查看

运行 Mybatis Generator 后,会在指定的目标项目目录下生成 UserMapper.xmlUser.java 文件。

UserMapper.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">
    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long">
        SELECT
            id,
            name,
            email,
            created_at,
            updated_at
        FROM
            user
        WHERE
            id = #{id,jdbcType=BIGINT}
    </select>
    <!-- 更多的 SQL 语句 -->
</mapper>
User.java 示例
package com.example.model;

import java.util.Date;

public class User {
    private Long id;
    private String name;
    private String email;
    private Date createdAt;
    private Date updatedAt;

    public Long getId() {
        return id;
    }

    public void setId(Long 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;
    }

    public Date getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(Date createdAt) {
        this.createdAt = createdAt;
    }

    public Date getUpdatedAt() {
        return updatedAt;
    }

    public void setUpdatedAt(Date updatedAt) {
        this.updatedAt = updatedAt;
    }
}
Mybatis官方生成器的高级配置
自定义生成代码的模板

Mybatis Generator 支持自定义生成代码的模板,可以生成符合项目需求的代码。自定义模板需要在配置文件中定义 template 节点,并指定模板文件的位置。

自定义模板文件

假设有一个自定义的 UserMapper.xml 模板文件 UserMapperTemplate.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">
    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long">
        SELECT
            id,
            name,
            email,
            created_at,
            updated_at
        FROM
            user
        WHERE
            id = #{id,jdbcType=BIGINT}
    </select>
    <!-- 更多的 SQL 语句 -->
</mapper>

配置文件中的模板定义

<generatorConfiguration>
    <classPathEntry location="lib/mysql-connector-java-8.0.23.jar"/>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
        </commentGenerator>
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mydatabase"
                        userId="root"
                        password="password">
        </jdbcConnection>
        <javaModelGenerator targetPackage="com.example.model"
                            targetProject="src/main/java"/>
        <sqlMapGenerator targetPackage="com.example.mapper"
                         targetProject="src/main/resources"
                         configurationFile="src/main/resources/UserMapperTemplate.xml">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.example.mapper"
                             targetProject="src/main/java"/>
        <table tableName="user" domainObjectName="User"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
    </context>
</generatorConfiguration>
生成器的个性化配置

Mybatis Generator 提供了丰富的个性化配置选项,可以根据实际需求调整生成的代码内容。

自定义实体类生成规则

<javaModelGenerator targetPackage="com.example.model"
                    targetProject="src/main/java">
    <property name="enableSubPackages" value="true"/>
    <property name="trimStrings" value="true"/>
</javaModelGenerator>

自定义映射文件生成规则

<sqlMapGenerator targetPackage="com.example.mapper"
                 targetProject="src/main/resources">
    <property name="enableSubPackages" value="true"/>
    <property name="trimStrings" value="true"/>
</sqlMapGenerator>

自定义客户端接口生成规则

<javaClientGenerator type="XMLMAPPER"
                     targetPackage="com.example.mapper"
                     targetProject="src/main/java">
    <property name="enableSubPackages" value="true"/>
    <property name="trimStrings" value="true"/>
</javaClientGenerator>
生成器的常见问题及解决方法

问题1:生成的代码存在编译错误

  • 原因:生成的代码可能存在语法错误或与项目环境不兼容。
  • 解决方法:检查生成的代码是否符合 Java 语法规范,并确保生成的文件路径和包名正确无误。

问题2:生成的代码与现有代码冲突

  • 原因:生成的代码与项目已有的代码存在命名冲突。
  • 解决方法:检查生成器配置文件中的 targetPackagetargetProject 是否正确,确保生成的文件不会与现有文件冲突。

问题3:生成的代码不符合项目要求

  • 原因:生成器配置文件中的设置不符合项目需求。
  • 解决方法:根据项目的具体需求调整配置文件中的 enableCountByExampleenableUpdateByExample 等参数。

问题4:生成器运行异常

  • 原因:数据库连接失败或配置文件错误。
  • 解决方法:检查数据库连接信息是否正确,并确保配置文件中的所有参数都已正确设置。
Mybatis与官方生成器的实践案例
使用Mybatis和生成器完成一个简单的CRUD操作

创建数据库表

假设有一个简单的用户表 user,包含以下字段:

  • id:用户唯一标识,主键
  • name:用户姓名
  • email:用户邮箱
  • created_at:创建时间
  • updated_at:更新时间

创建数据库表的 SQL 语句:

CREATE TABLE `user` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(255) NOT NULL,
    `email` VARCHAR(255) NOT NULL,
    `created_at` DATETIME,
    `updated_at` DATETIME,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

生成映射文件和实体类

使用 Mybatis Generator 根据 user 表生成映射文件和实体类。参考前文中的配置文件示例,生成以下文件:

  • UserMapper.xml
  • User.java

编写 Mybatis 映射文件

假设生成的 UserMapper.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" property="id" jdbcType="BIGINT"/>
        <result column="name" property="name" jdbcType="VARCHAR"/>
        <result column="email" property="email" jdbcType="VARCHAR"/>
        <result column="created_at" property="createdAt" jdbcType="DATETIME"/>
        <result column="updated_at" property="updatedAt" jdbcType="DATETIME"/>
    </resultMap>
    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long">
        SELECT
            id,
            name,
            email,
            created_at,
            updated_at
        FROM
            user
        WHERE
            id = #{id,jdbcType=BIGINT}
    </select>
    <insert id="insert" parameterType="com.example.model.User">
        INSERT INTO
            user (name, email, created_at, updated_at)
        VALUES
            (#{name,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, #{createdAt,jdbcType=DATETIME}, #{updatedAt,jdbcType=DATETIME})
    </insert>
    <update id="updateByPrimaryKeySelective" parameterType="com.example.model.User">
        UPDATE
            user
        SET
            name = #{name,jdbcType=VARCHAR},
            email = #{email,jdbcType=VARCHAR},
            updated_at = #{updatedAt,jdbcType=DATETIME}
        WHERE
            id = #{id,jdbcType=BIGINT}
    </update>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
        DELETE FROM
            user
        WHERE
            id = #{id,jdbcType=BIGINT}
    </delete>
</mapper>

编写 Java 客户端接口

假设生成的 UserMapper.java 文件如下:

package com.example.mapper;

import com.example.model.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.annotations.Delete;

public interface UserMapper {
    @Select("SELECT id, name, email, created_at, updated_at FROM user WHERE id = #{id,jdbcType=BIGINT}")
    User selectByPrimaryKey(@Param("id") Long id);

    @Insert("INSERT INTO user (name, email, created_at, updated_at) VALUES (#{name,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, #{createdAt,jdbcType=DATETIME}, #{updatedAt,jdbcType=DATETIME})")
    int insert(User record);

    @Update("UPDATE user SET name = #{name,jdbcType=VARCHAR}, email = #{email,jdbcType=VARCHAR}, updated_at = #{updatedAt,jdbcType=DATETIME} WHERE id = #{id,jdbcType=BIGINT}")
    int updateByPrimaryKeySelective(User record);

    @Delete("DELETE FROM user WHERE id = #{id,jdbcType=BIGINT}")
    int deleteByPrimaryKey(@Param("id") Long id);
}

编写 Java 实体类

假设生成的 User.java 文件如下:

package com.example.model;

import java.util.Date;

public class User {
    private Long id;
    private String name;
    private String email;
    private Date createdAt;
    private Date updatedAt;

    public Long getId() {
        return id;
    }

    public void setId(Long 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;
    }

    public Date getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(Date createdAt) {
        this.createdAt = createdAt;
    }

    public Date getUpdatedAt() {
        return updatedAt;
    }

    public void setUpdatedAt(Date updatedAt) {
        this.updatedAt = updatedAt;
    }
}

编写 Mybatis 配置文件

假设 mybatis-config.xml 文件如下:

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

编写简单的 CRUD 操作

public class UserMapperTest {
    private SqlSession session;

    @Before
    public void setUp() {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        session = sqlSessionFactory.openSession();
    }

    @After
    public void tearDown() {
        session.close();
    }

    @Test
    public void testInsertUser() {
        UserMapper mapper = session.getMapper(UserMapper.class);
        User user = new User();
        user.setName("张三");
        user.setEmail("zhangsan@example.com");
        user.setCreatedAt(new Date());
        user.setUpdatedAt(new Date());

        mapper.insert(user);
        session.commit();

        User insertedUser = mapper.selectByPrimaryKey(user.getId());
        assertEquals("张三", insertedUser.getName());
        assertEquals("zhangsan@example.com", insertedUser.getEmail());
    }

    @Test
    public void testUpdateUser() {
        UserMapper mapper = session.getMapper(UserMapper.class);
        User user = mapper.selectByPrimaryKey(1L);
        if (user != null) {
            user.setName("李四");
            user.setUpdatedAt(new Date());
            mapper.updateByPrimaryKeySelective(user);
            session.commit();

            User updatedUser = mapper.selectByPrimaryKey(1L);
            assertEquals("李四", updatedUser.getName());
        }
    }

    @Test
    public void testSelectUser() {
        UserMapper mapper = session.getMapper(UserMapper.class);
        User user = mapper.selectByPrimaryKey(1L);
        assertNotNull(user);
        assertEquals("张三", user.getName());
        assertEquals("zhangsan@example.com", user.getEmail());
    }

    @Test
    public void testDeleteUser() {
        UserMapper mapper = session.getMapper(UserMapper.class);
        User user = mapper.selectByPrimaryKey(1L);
        if (user != null) {
            mapper.deleteByPrimaryKey(1L);
            session.commit();

            User deletedUser = mapper.selectByPrimaryKey(1L);
            assertNull(deletedUser);
        }
    }
}
生成器在实际项目中的应用案例

案例背景

假设有一个电商项目,项目中需要频繁操作数据库,包括商品信息、订单信息、用户信息等。为了提高开发效率,决定使用 Mybatis Generator 自动生成这些表的映射文件和实体类。

生成器配置文件示例

<generatorConfiguration>
    <classPathEntry location="lib/mysql-connector-java-8.0.23.jar"/>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
        </commentGenerator>
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mydatabase"
                        userId="root"
                        password="password">
        </jdbcConnection>
        <javaModelGenerator targetPackage="com.example.model"
                            targetProject="src/main/java"/>
        <sqlMapGenerator targetPackage="com.example.mapper"
                         targetProject="src/main/resources"/>
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.example.mapper"
                             targetProject="src/main/java"/>
        <table tableName="product" domainObjectName="Product"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
        <table tableName="order" domainObjectName="Order"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
        <table tableName="user" domainObjectName="User"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
    </context>
</generatorConfiguration>

生成后的文件结构示例

生成的文件结构如下:

src/main/java/com/example/model
    - Product.java
    - Order.java
    - User.java

src/main/resources/com/example/mapper
    - ProductMapper.xml
    - OrderMapper.xml
    - UserMapper.xml

实际应用

在项目中,可以直接使用生成的 ProductMapperOrderMapperUserMapper 接口进行数据库操作,大大减少了代码编写的工作量。

示例代码

public class ProductService {
    private SqlSession session;

    @Before
    public void setUp() {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        session = sqlSessionFactory.openSession();
    }

    @After
    public void tearDown() {
        session.close();
    }

    public Product getProductById(long id) {
        ProductMapper mapper = session.getMapper(ProductMapper.class);
        return mapper.selectByPrimaryKey(id);
    }

    public void insertProduct(Product product) {
        ProductMapper mapper = session.getMapper(ProductMapper.class);
        mapper.insert(product);
        session.commit();
    }

    public void updateProduct(Product product) {
        ProductMapper mapper = session.getMapper(ProductMapper.class);
        mapper.updateByPrimaryKeySelective(product);
        session.commit();
    }

    public void deleteProduct(long id) {
        ProductMapper mapper = session.getMapper(ProductMapper.class);
        mapper.deleteByPrimaryKey(id);
        session.commit();
    }
}
小结与展望

小结

本文详细介绍了 Mybatis Generator 的使用方法和应用场景。通过 Mybatis Generator,可以节省大量的开发时间和精力,从而提高开发效率。此外,Mybatis Generator 还提供了丰富的配置选项,可以根据项目需求进行个性化配置,生成符合项目规范的代码。

展望

随着 Mybatis Generator 的不断更新和发展,其功能和性能将进一步提升。未来,Mybatis Generator 可以与其他工具和框架结合使用,形成更加高效、便捷的开发流程。此外,Mybatis Generator 的社区活跃度和用户支持也会不断增加,为用户提供更多选择和帮助。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP