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

Mybatis官方生成器项目实战入门教程

标签:
Java SSM 数据库
概述

Mybatis Generator (MBG) 是一个高度可配置的代码生成器,可以自动生成 Mybatis 的持久层代码,包括映射文件、Java Bean、DAO 接口等。本文将详细介绍如何安装、配置和使用 Mybatis 官方生成器项目实战,并结合实际项目案例进行讲解。

Mybatis官方生成器简介

Mybatis官方生成器的功能介绍

Mybatis Generator (MBG) 是一个高度可配置的代码生成器,它可以用于生成 Mybatis 的持久层代码。MBG 的主要功能包括:

  1. 生成 Mybatis 映射文件 (XML): 自动生成针对数据库表的 Mybatis 映射文件,包含增删查改等基本操作。
  2. 生成 Java Bean: 为数据库表生成对应的 Java 类,这些 Java Bean 可以直接用于数据访问层。
  3. 生成 DAO 接口: 为表生成 Mybatis DAO 接口,包含 CRUD 方法。
  4. 生成 DAO 实现类: 也可以选择生成对应的 DAO 实现类,实现上述接口。
  5. 生成静态 SQL: 支持生成静态 SQL,包括像多表关联查询等复杂查询语句。
  6. 自定义模板: 允许用户自定义代码生成模板,以满足不同项目的需求。

安装和环境配置

要使用 Mybatis Generator,你需要在 Java 开发环境中安装 JDK 和 Maven。以下是安装步骤:

  1. 下载并安装 JDK: 确保 Java 环境配置正确。可以通过命令 java -version 检查安装是否成功。
  2. 下载并安装 Maven: 同样,通过命令 mvn -v 检查 Maven 是否安装成功。
  3. 引入 Mybatis Generator 依赖: 在项目中引入 Mybatis Generator 的依赖。可以在 pom.xml 文件中添加如下依赖:
<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.7</version>
</dependency>
  1. 配置 Mybatis Generator: 编写配置文件 mybatis-generator.xml,该文件将用于定义生成器的具体配置。配置文件的格式如下:
<generatorConfiguration>
    <context id="ExampleContext" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <classPathEntry location="C:\Program Files\Java\mysql-connector-java-8.0.23.jar"/>
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/yourdatabase"
                        userId="root"
                        password="password"/>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <table tableName="your_table" domainObjectName="YourTable" enableCounters="false"/>
    </context>
</generatorConfiguration>

Maven项目的集成

引入Mybatis官方生成器依赖

在 Maven 项目中使用 Mybatis Generator,需要在 pom.xml 文件中引入对应的依赖:

<dependencies>
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.3.7</version>
    </dependency>
</dependencies>

此外,还需要在项目的 classpath 中引入数据库驱动。例如,如果使用 MySQL 数据库,可以添加如下依赖:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.23</version>
</dependency>

通过Maven插件配置Mybatis Generator

在 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/mybatis-generator.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>

配置生成器的XML文件

配置文件中包含多个部分,每个部分都有特定的用途。以下是配置文件 mybatis-generator.xml 的示例:

<generatorConfiguration>
    <context id="ExampleContext" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <classPathEntry location="lib/mysql-connector-java-8.0.23.jar"/>
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/yourdatabase"
                        userId="root"
                        password="password"/>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <table tableName="your_table" domainObjectName="YourTable" enableCounters="false"/>
    </context>
</generatorConfiguration>
  • <context>: 配置代码生成的上下文,定义生成器的属性。例如,生成的代码适用的 Mybatis 版本。
  • <commentGenerator>: 配置生成注释的行为,可以设置是否生成注释。
  • <jdbcConnection>: 指定数据库连接参数,包括驱动类、数据库 URL、用户名和密码。
  • <table>: 指定需要生成代码的数据表。可以根据需要生成多个表。

生成代码的基础使用

使用Mybatis官方生成器生成基础代码

使用 Mybatis Generator 生成代码的主要步骤如下:

  1. 编写配置文件: 编写 mybatis-generator.xml 配置文件,定义代码生成的规则。
  2. 执行生成命令: 使用 Maven 命令执行代码生成。可以在命令行中输入:
mvn mybatis-generator:generate

或者,可以在代码中通过 Java API 调用生成器:

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Generator {
    public static void main(String[] args) throws IOException, InvalidConfigurationException, XMLParserException {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        File configFile = new File("src/main/resources/mybatis-generator.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
    }
}

代码结构解析

生成的代码通常包含以下文件:

  1. Java Bean 文件: 每个表会生成一个对应的 Java 类,类名为表名的驼峰式命名。例如,表名 user 会生成一个对应的 User 类。
  2. Mybatis 映射 XML 文件: 每张表会生成一个对应的 XML 文件,包含所有 CRUD 操作的 SQL 语句。
  3. DAO 接口: 每张表会生成一个对应的 DAO 接口,接口中定义了各种 CRUD 方法。
  4. DAO 实现类: 可以选择生成实现类,实现上述 DAO 接口。

生成的代码目录结构如下:

src/main/java
└── com.example
    └── model
        └── User.java
src/main/resources
└── mapper
    └── UserMapper.xml
src/main/java
└── com.example
    └── dao
        └── UserMapper.java
        └── UserMapperImpl.java

自定义生成规则

如何自定义生成器配置

自定义 Mybatis Generator 的配置,可以修改 mybatis-generator.xml 文件中的配置项。例如,可以自定义生成的 Java 类名:

<table tableName="user" domainObjectName="User" enableCounters="false"/>

还可以自定义生成的 XML 文件的命名空间:

<table tableName="user" domainObjectName="User" enableCounters="false">
    <columnOverride column="ID" jdbcType="BIGINT" javaType="Long"/>
    <generatedKey column="ID" sqlType="BIGINT" identity="true" />
</table>

修改生成器配置以适应不同的项目需求

Mybatis Generator 提供了丰富的配置选项,可以根据项目需求进行调整。例如,可以设置生成的代码是否包含注释:

<commentGenerator>
    <property name="suppressAllComments" value="true"/>
</commentGenerator>

还可以自定义生成的类中的属性映射:

<table tableName="user" domainObjectName="User" enableCounters="false">
    <columnOverride column="ID" jdbcType="BIGINT" javaType="Long"/>
   .
    .
    .
</table>

实战案例

结合实际项目案例讲解

假设我们有一个简单的用户表 user,需要生成对应的持久层代码。用户表结构如下:

CREATE TABLE `user` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(50) NOT NULL,
  `password` VARCHAR(100) NOT NULL,
  `email` VARCHAR(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

生成器在项目中的应用

首先,配置 mybatis-generator.xml 文件:

<generatorConfiguration>
    <context id="ExampleContext" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <classPathEntry location="lib/mysql-connector-java-8.0.23.jar"/>
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/yourdatabase"
                        userId="root"
                        password="password"/>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <table tableName="user" domainObjectName="User" enableCounters="false">
            <columnOverride column="id" jdbcType="BIGINT" javaType="Long"/>
            <generatedKey column="id" sqlType="BIGINT" identity="true" />
        </table>
    </context>
</generatorConfiguration>

然后,执行生成命令:

mvn mybatis-generator:generate

生成的代码结构如下:

src/main/java
└── com.example
    └── model
        └── User.java
src/main/resources
└── mapper
    └── UserMapper.xml
src/main/java
└── com.example
    └── dao
        └── UserMapper.java
        └── UserMapperImpl.java

生成的 Java Bean 如下:

package com.example.model;

public class User {
    private Long id;
    private String username;
    private String password;
    private String email;

    // getter and setter methods
}

生成的 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.dao.UserMapper">
    <resultMap id="BaseResultMap" type="com.example.model.User">
        <id column="id" property="id" jdbcType="BIGINT" />
        <result column="username" property="username" jdbcType="VARCHAR" />
        <result column="password" property="password" jdbcType="VARCHAR" />
        <result column="email" property="email" jdbcType="VARCHAR" />
    </resultMap>

    <sql id="Base_Column_List">
        id, username, password, email
    </sql>

    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long">
        select
        <if test="_parameter != null">
            #{_parameter}
        </if>
        from user
        <where>
            <if test="id != null">
                id = #{id}
            </if>
        </where>
    </select>

    <insert id="insert" parameterType="com.example.model.User">
        insert into user
        (username, password, email)
        values
        (#{username}, #{password}, #{email})
    </insert>

    <update id="updateByPrimaryKey" parameterType="com.example.model.User">
        update user
        set username = #{username},
            password = #{password},
            email = #{email}
        where id = #{id}
    </update>

    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
        delete from user where id = #{id}
    </delete>
</mapper>

生成的 DAO 接口如下:

package com.example.dao;

import com.example.model.User;

public interface UserMapper {
    int deleteByPrimaryKey(Long id);

    int insert(User record);

    int insertSelective(User record);

    User selectByPrimaryKey(Long id);

    int updateByPrimaryKeySelective(User record);

    int updateByPrimaryKey(User record);
}

生成的 DAO 实现类如下:

package com.example.dao;

import com.example.model.User;
import com.example.model.UserExample;
import org.apache.ibatis.session.RowBounds;

import java.util.List;

public class UserMapperImpl implements UserMapper {
    // Concrete implementation
}

常见问题与解决方法

常见问题汇总

  1. 生成的代码与预期不符: 可能是配置文件中的某些参数设置不正确。
  2. 生成器无法连接数据库: 检查数据库连接参数是否正确。
  3. 生成器无法找到数据库驱动: 确保数据库驱动已经添加到项目的 classpath 中。
  4. 生成器执行失败: 检查生成器的日志输出,根据错误信息进行排查。

解决方法与技巧

  1. 生成的代码与预期不符:

    • 检查配置文件中的 tableNamedomainObjectName 是否正确。
    • 检查生成器配置文件中是否有遗漏的属性或配置项。
    • 查看生成器的日志输出,根据错误信息进行调试。
  2. 生成器无法连接数据库:

    • 确认数据库 URL、用户名和密码是否正确。
    • 确认数据库服务是否正常运行。
    • 检查数据库驱动是否正确引入到项目中。
  3. 生成器无法找到数据库驱动:

    • 检查 pom.xml 文件中的依赖配置,确保数据库驱动已经正确引入。
    • 确认生成器配置文件中的 <classPathEntry> 是否正确。
  4. 生成器执行失败:
    • 查看生成器的日志输出,根据错误信息进行排查。
    • 确认生成器配置文件是否正确无误。
    • 检查生成器版本是否与 Mybatis 版本兼容。
点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消