为了账号安全,请及时绑定邮箱和手机立即绑定

Mybatis代码生成器入门教程

概述

本文详细介绍了如何使用Mybatis代码生成器入门,包括代码生成器的作用、准备工作、配置以及生成代码的基本使用方法。通过配置文件和相关工具,可以快速生成Mapper接口、XML文件和实体类,提高开发效率。此外,还提供了常见问题的解决方法和优化建议,帮助开发者更好地利用Mybatis代码生成器。

Mybatis代码生成器简介

Mybatis简介

Mybatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。Mybatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。Mybatis 可以使用简单的 XML 或注解进行配置和原始映射,将接口和 Java 的 POJOs(普通的 Java 对象)映射成数据库中的记录。这使得 Java 开发人员可以使用 SQL 语句和 Mybatis 框架进行数据库访问,而无需手动编写 JDBC 代码。

代码生成器的作用和优势

代码生成器在开发过程中可以帮助开发人员快速生成基础的 Mapper 接口、XML 文件以及实体类。这不仅提高了开发效率,还减少了人为编写代码时可能出现的错误。使用代码生成器可以保证生成的代码质量,同时也可以根据项目需求自定义生成规则,从而提高代码的可维护性和扩展性。

准备工作

安装Mybatis

安装 Mybatis 需要在开发项目中引入 Mybatis 的依赖。以下是 Maven 项目中引入 Mybatis 依赖的配置代码:

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
</dependencies>

准备数据库和表结构

在开发之前,需要先准备好数据库和相关表结构。假设我们使用 MySQL 数据库,并创建一个名为 example 的数据库,在该数据库中创建一个 user 表。以下为创建数据库和表的 SQL 代码:

CREATE DATABASE example;

USE example;

CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    age INT NOT NULL,
    email VARCHAR(100)
);
代码生成器的配置

获取Mybatis代码生成器工具

Mybatis 代码生成器工具通常是一个单独的 Java 项目,可以通过 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,该文件定义了数据库连接信息、数据表映射规则等信息。以下是 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="MyBatis3Simple">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
        </commentGenerator>
        <classPathEntry location="path/to/mysql-connector-java.jar"/>
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/example"
                        userId="root"
                        password="password"/>
        <javaTypeResolver>
            <property name="unambiguousTypeExtensions" value="true"/>
        </javaTypeResolver>
        <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"/>
        </sqlMapGenerator>
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper"
                             targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <table tableName="user" domainObjectName="User"/>
    </context>
</generatorConfiguration>
使用代码生成器

生成Mapper接口和XML文件

通过配置文件 generatorConfig.xml,使用 Mybatis Generator 工具可以生成 Mapper 接口和 XML 文件。运行 Mybatis Generator 会根据配置文件生成相应的代码。

生成的 Mapper 接口示例如下:

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="age" jdbcType="INTEGER" property="age" />
        <result column="email" jdbcType="VARCHAR" property="email" />
    </resultMap>
    <sql id="Base_Column_List">
        id, name, age, email
    </sql>
    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
        select
        <if test="columnList != null and columnList.length > 0">
            ${columnList}
        </if>
        <if test="columnList == null or columnList.length == 0">
            <include refid="Base_Column_List" />
        </if>
        from user
        where id = #{id,jdbcType=INTEGER}
    </select>
    <!-- 更多SQL语句 -->
</mapper>

生成Entity类

生成的实体类会根据配置文件中的 targetPackage 属性进行生成。以下是生成的实体类示例:

public class User {
    private Integer id;
    private String name;
    private Integer age;
    private String email;

    // Getter和Setter方法
    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 Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
将生成的代码集成到项目中

确保引入 Mybatis 和 Mybatis Generator 的依赖

确保项目中引入了 Mybatis 和 Mybatis Generator 的依赖。

将生成的代码添加到项目中

将生成的 Mapper 接口、XML 文件和实体类添加到项目中。

配置 Mybatis 的主配置文件 mybatis-config.xml

在 Mybatis 的主配置文件 mybatis-config.xml 中配置生成的 Mapper 接口。以下是配置文件的示例:

<?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 type="com.example.model.User" alias="User"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/example"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>
测试生成的代码

编写单元测试验证 Mapper 接口的功能

测试生成的代码可以通过编写单元测试来验证 Mapper 接口的功能是否正常。以下是使用 JUnit 测试生成的 Mapper 接口的示例代码:

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.BeforeClass;
import org.junit.Test;

import com.example.model.User;
import com.example.mapper.UserMapper;

import java.io.InputStream;
import java.util.List;

public class UserMapperTest {

    private static SqlSessionFactory sqlSessionFactory;

    @BeforeClass
    public static void setUp() throws Exception {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    @Test
    public void testSelectAll() throws Exception {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            List<User> users = mapper.selectAll();
            assertNotNull(users);
            assertEquals(0, users.size());  // 根据实际情况调整期望值
        }
    }

    @Test
    public void testInsertAndSelect() throws Exception {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            User user = new User();
            user.setName("John Doe");
            user.setAge(30);
            user.setEmail("john.doe@example.com");

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

            User savedUser = mapper.selectByPrimaryKey(user.getId());
            assertNotNull(savedUser);
            assertEquals(user.getName(), savedUser.getName());
            assertEquals(user.getAge(), savedUser.getAge());
            assertEquals(user.getEmail(), savedUser.getEmail());
        }
    }
}
常见问题及解决办法

常见错误及解决方法

  1. 错误提示:找不到数据库驱动

    • 确保项目中引入了数据库驱动依赖,例如 MySQL 的驱动。
    <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>8.0.23</version>
    </dependency>
  2. 错误提示:数据库连接失败

    • 检查数据库 URL、用户名和密码是否正确。
    • 确保数据库服务器正在运行。
  3. 错误提示:生成的代码与现有代码冲突
    • 确保生成的代码路径没有冲突。
    • 手动修改生成的代码以适应项目需求。

代码生成器的优化建议

  1. 自定义代码生成规则

    • 通过修改 generatorConfig.xml 文件中的配置,可以自定义生成的代码结构、命名规则等。
  2. 使用动态配置

    • 对于大型项目,可以将生成器配置文件参数化,通过外部属性文件进行配置。
  3. 持续集成
    • 将代码生成器集成到持续集成流程中,每次提交时自动生成并验证代码。
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消