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

Mybatis代码生成器学习:从入门到实践

标签:
Java SSM
概述

本文主要介绍了Mybatis代码生成器的学习和实践过程,从代码生成器的作用和优势开始,详细讲解了如何配置和使用Mybatis代码生成器,帮助开发者提高开发效率。此外,还涵盖了代码生成器的进阶配置和常见问题的解决方法,旨在让开发者更好地掌握Mybatis代码生成器。Mybatis代码生成器不仅能够自动生成Mapper接口、XML映射文件和实体类,还能显著减少开发中的错误和提高代码质量。

Mybatis代码生成器简介

Mybatis代码生成器的作用

Mybatis代码生成器是一种自动化工具,能够根据数据库表自动生成Mybatis的Mapper接口、对应的XML映射文件和实体类。这种工具能够显著提高开发效率,尤其是在处理复杂的数据库操作时。

代码生成器的优势

使用代码生成器可以节省大量的手写代码时间,减少人为错误,提高代码质量。同时,能够让开发者将更多精力集中在业务逻辑上,而不是基础的数据库操作。

示例代码

以下是一个简单的Mybatis Mapper接口示例:

public interface UserMapper {
    User getUserById(int id);
    void insertUser(User user);
    void updateUser(User user);
    void deleteUser(int id);
}

常用的Mybatis代码生成器工具

  • Mybatis Generator:一款流行的开源代码生成工具,支持自定义配置和模板。
  • Mybatis Plus:虽然主要是Mybatis的一个增强工具,但其内置了代码生成功能,支持自动生成实体类、Mapper接口和SQL语句。
准备工作

安装Java开发环境

  1. 安装JDK:访问Oracle官网或OpenJDK官网下载并安装JDK,建议使用最新稳定版本。
  2. 配置环境变量:将JDK的bin目录加入到环境变量PATH中,并设置JAVA_HOME环境变量。

安装Mybatis

  1. 下载Mybatis:可以从Mybatis官网下载最新版本的Mybatis压缩包。
  2. 解压文件:将压缩包解压到某个目录下。
  3. 配置环境变量:可选择将Mybatis的jar包路径添加到项目的依赖库中,或者使用构建工具(如Maven、Gradle)进行依赖管理。

Maven配置示例

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
    <!-- 其他依赖 -->
</dependencies>

准备数据库及数据库表

为演示代码生成器的功能,我们假设已经创建了一个名为user的数据库表,包含以下字段:

  • id:主键,自增
  • username:用户名
  • password:密码
  • email:邮箱

SQL示例

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `password` varchar(50) NOT NULL,
  `email` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
Mybatis代码生成器的配置

下载Mybatis代码生成器插件

  1. 下载Mybatis Generator插件:可以从Mybatis Generator的GitHub仓库下载最新版本的插件。
  2. 将插件JAR文件添加到项目依赖中,确保其路径正确。

配置XML文件

  1. 创建一个配置文件(例如:generatorConfig.xml),用于指定生成代码的规则和参数。
  2. 配置数据库连接信息、表名、需生成的包名等信息。

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="default" targetRuntime="3.3.0" defaultModelType="flat">
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mydb"
                        userId="root"
                        password="123456">
        </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" enableCounters="true" />
    </context>
</generatorConfiguration>

配置数据库连接信息

在上述generatorConfig.xml文件中,jdbcConnection标签下的driverClassconnectionURLuserIdpassword需要根据实际情况进行配置,以确保能够正确连接到数据库。

代码生成器的使用

生成Mapper接口和XML文件

使用Mybatis Generator插件,根据配置文件生成对应Mapper接口和XML映射文件。这些文件将会自动生成在指定的目标包中。

Java代码示例

配置文件中的javaClientGenerator标签定义了生成Mapper接口的包名和路径:

<javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java" />

生成实体类

javaModelGenerator标签定义了生成实体类的包名和路径:

<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java" />

生成DAO层代码

sqlMapGenerator标签定义了生成Mapper XML文件的包名和路径:

<sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources" />

生成示例

假设我们已经配置好了generatorConfig.xml,接下来通过以下步骤生成代码:

  1. 创建一个新的Maven项目。
  2. 添加Mybatis和Mybatis Generator的依赖。
  3. 创建数据库表user,包含idusernamepasswordemail字段。
  4. 编写generatorConfig.xml配置文件,配置数据库连接信息、生成代码的目标路径等。
  5. 使用Mybatis Generator插件运行生成代码。
代码生成器的进阶设置

自定义生成的代码模板

自定义代码模板可以让生成的代码更符合项目规范。例如,通过修改模板文件,可以控制生成的代码样式、命名规则等。

模板文件示例

假设需要自定义实体类的生成模板。可以在templates目录下创建一个User.java模板文件,并在generatorConfig.xml中配置使用该模板:

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

参数配置详解

  • targetPackage:指定生成代码的目标包名。
  • targetProject:指定生成代码的目标项目路径。
  • enableSubPackages:是否开启子包生成。
  • trimStrings:生成的字符串类型字段是否自动trim。

常见问题及解决方法

  • 找不到数据库表:检查generatorConfig.xml中的数据库连接信息是否正确,确保能正常连接到数据库。
  • 生成的代码没有生效:检查生成的代码是否被正确添加到项目中,确认生成的代码路径是否正确。
  • 生成的代码不符合规范:自定义模板文件,调整生成代码的格式和命名规则。
实践案例

构建一个简单的项目

  1. 创建一个新的Maven项目。
  2. 添加Mybatis和Mybatis Generator的依赖。
  3. 创建数据库表user,包含idusernamepasswordemail字段。
  4. 编写generatorConfig.xml配置文件,配置数据库连接信息、生成代码的目标路径等。
  5. 使用Mybatis Generator插件运行生成代码。
  6. 创建测试用例,验证生成的Mapper接口和实体类是否能正常使用。

SQL示例

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `password` varchar(50) NOT NULL,
  `email` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

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="default" targetRuntime="3.3.0" defaultModelType="flat">
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mydb"
                        userId="root"
                        password="123456">
        </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" enableCounters="true" />
    </context>
</generatorConfiguration>

生成代码后生成的Mapper接口示例

public interface UserMapper {
    User getUserById(int id);
    List<User> selectAll();
    int insert(User record);
    int insertSelective(User record);
    int updateByPrimaryKeySelective(User record);
    int deleteById(int id);
}

测试代码示例

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

import java.io.InputStream;

public class UserMapperTest {
    @Test
    public void testSelectAll() {
        // 读取配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream = UserMapperTest.class.getClassLoader().getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            List<User> users = mapper.selectAll();
            for (User user : users) {
                System.out.println(user.getUsername());
            }
        }
    }
}

代码优化及维护

  • 代码优化:根据项目需求,进一步优化生成的代码,例如添加日志记录、异常处理等。
  • 维护代码生成器:定期检查生成器配置文件,确保与项目需求匹配。更新生成器插件版本,保证与最新数据库和Mybatis版本兼容。

日志记录示例

在生成的Mapper接口中添加日志记录:


public interface UserMapper {
    User getUserById(int id);
    List<User> selectAll();
    int insert(User record);
    int insertSelective(User record);
    int updateByPrimaryKeySelective(User record);
    int deleteById(int id);

    default void log(String message) {
        System.out.println("Log: " + message);
    }
}
``

通过以上步骤,可以完成Mybatis代码生成器的学习和实践,让开发过程更加高效便捷。
点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消