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

Mybatis官方生成器教程:入门与实践指南

标签:
Java SSM 数据库
概述

本文详细介绍了Mybatis Generator(MBG)的作用、优点和基本概念,包括如何安装和配置MBG,以及生成器的高级功能和实践案例。本文将引导读者从零开始搭建MBG环境,并生成所需的Java类和XML映射文件。Mybatis官方生成器教程涵盖了从准备数据库到生成Mapper接口和XML映射文件的全过程。

Mybatis生成器简介
Mybatis生成器的作用和优点

Mybatis Generator(以下简称MBG)是一个强大的工具,用于自动生成Mybatis中所需的Java类和XML映射文件。这些自动生成的文件可以极大地减少开发人员的工作量,并且使得开发过程更加高效和标准化。以下是MBG的一些主要优点:

  1. 减少手写代码的工作量:MBG能够根据数据库表结构自动生成对应的Java实体类、Mapper接口和XML映射文件,从而减少了开发人员手动编写这些基础代码的工作量。
  2. 保持代码一致性:通过MBG生成的代码能够保证代码的一致性,使得团队成员在开发过程中能够遵循统一的编码规范。
  3. 易于维护:当数据库表结构发生变化时,无需手动修改对应的Java类和XML映射文件,只需重新生成即可,使得维护工作更加简单。
生成器的基本概念和术语

在深入探讨MBG的使用前,需要先了解一些基本概念和术语:

  • GeneratorConfig.xml:这是MBG的核心配置文件,定义了MBG的配置信息,包括数据库连接信息、生成器的策略等。
  • Java Model:由MBG生成的Java类,对应数据库中的表。每个类通常包含表中的所有字段及其对应的getter和setter方法。
  • Mapper XML:Mybatis的XML映射文件,用于定义SQL语句和对应的Java方法。
  • Mapper Interface:由MBG生成的Java接口,定义了增删改查等操作的方法。
  • TargetRuntime:生成器的目标运行时,通常是"XML"或"Annotation"。如果选择"XML",则生成XML映射文件;如果选择"Annotation",则使用Java注解定义SQL。
准备工作
安装和配置Mybatis

以下是安装和配置Mybatis的基本步骤:

安装步骤

  1. 下载Mybatis:从官网下载Mybatis的最新版本。
  2. 引入依赖:在项目中引入Mybatis的依赖。例如,如果你使用的是Maven项目,可以在pom.xml文件中添加如下依赖:
<dependencies>
  <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
  </dependency>
</dependencies>

配置步骤

  1. 配置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/mydb"/>
        <property name="username" value="root"/>
        <property name="password" value="password"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/example/mapper/UserMapper.xml"/>
  </mappers>
</configuration>
  1. 配置Mybatis的Mapper接口:定义数据库操作的接口。
public interface UserMapper {
  User selectUser(int id);
  void insertUser(User user);
}
准备数据库和表结构
  1. 创建数据库:使用SQL语句创建数据库。
CREATE DATABASE mydb;
  1. 创建表:在数据库中创建表。
CREATE TABLE users (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  email VARCHAR(100)
);

配置GeneratorConfig.xml

在项目的根目录下创建GeneratorConfig.xml文件,定义MBG的配置信息。

<generatorConfiguration>
  <context id="DB2Tables" targetRuntime="MyBatis3">
    <commentGenerator>
      <property name="suppressAllComments" value="true"/>
    </commentGenerator>
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                     connectionURL="jdbc:mysql://localhost:3306/mydb"
                     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"/>
  </context>
</generatorConfiguration>
生成器的配置文件详解

generatorConfig.xml文件的结构

以下是GeneratorConfig.xml文件的基本结构:

<generatorConfiguration>
  <context id="DB2Tables" targetRuntime="MyBatis3">
    <commentGenerator>
      <property name="suppressAllComments" value="true"/>
    </commentGenerator>
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                     connectionURL="jdbc:mysql://localhost:3306/mydb"
                     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"/>
  </context>
</generatorConfiguration>

各个配置标签的含义和用法

  • context:定义生成器的上下文环境,可以定义多个上下文环境,不同的上下文环境可以针对不同的数据库表结构。
<context id="DB2Tables" targetRuntime="MyBatis3">
  • commentGenerator:定义生成的Java类和XML文件的注释信息。
<commentGenerator>
  <property name="suppressAllComments" value="true"/>
</commentGenerator>
  • jdbcConnection:定义数据库连接信息。
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
                 connectionURL="jdbc:mysql://localhost:3306/mydb"
                 userId="root"
                 password="password">
</jdbcConnection>
  • javaModelGenerator:定义生成的Java模型类的配置信息。
<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/>
  • sqlMapGenerator:定义生成的SQL映射文件的配置信息。
<sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"/>
  • javaClientGenerator:定义生成的Mapper接口的配置信息。
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>
生成Mapper接口和XML映射文件

如何配置生成Mapper接口和XML文件

在GeneratorConfig.xml文件中,通过配置javaClientGenerator标签来生成Mapper接口和XML映射文件。

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

自定义生成的Java类和表名映射

可以通过配置table标签来指定需要生成的表,以及生成的Java类的包名和类名。

<table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false">
  <property name="useActualColumnNames" value="true"/>
</table>

实际项目中的配置和步骤

假设我们有一个简单的数据库表结构,如下所示:

CREATE TABLE users (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  email VARCHAR(100)
);

我们将使用MBG自动生成对应的Java类、Mapper接口和XML映射文件。

  1. 准备GeneratorConfig.xml文件:根据前面的介绍,配置GeneratorConfig.xml文件。
<generatorConfiguration>
  <context id="DB2Tables" targetRuntime="MyBatis3">
    <commentGenerator>
      <property name="suppressAllComments" value="false"/>
    </commentGenerator>
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                     connectionURL="jdbc:mysql://localhost:3306/mydb"
                     userId="root"
                     password="password">
    </jdbcConnection>
    <table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false">
      <property name="useActualColumnNames" value="true"/>
    </table>
    <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"/>
  </context>
</generatorConfiguration>
  1. 执行生成器:使用MBG工具执行生成器。
mvn mybatis-generator:generate
  1. 查看生成的文件
    生成的文件包括:
  • User.java:位于src/main/java/com/example/model/User.java,定义了User类。
  • UserMapper.xml:位于src/main/resources/com/example/mapper/UserMapper.xml,定义了SQL映射。
  • UserMapper.java:位于src/main/java/com/example/mapper/UserMapper.java,定义了Mapper接口。

示例代码

以下是生成的User类、Mapper接口和XML映射文件的部分代码:

User.java

package com.example.model;

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;
  }
}

UserMapper.java

package com.example.mapper;

import com.example.model.User;
import java.util.List;

public interface UserMapper {
  List<User> selectAllUsers();
  User selectUser(Integer id);
  void insertUser(User user);
  void updateUser(User user);
  void deleteUser(Integer id);
}

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="selectAllUsers" resultType="com.example.model.User">
    SELECT * FROM users
  </select>
  <select id="selectUser" resultType="com.example.model.User">
    SELECT * FROM users WHERE id = #{id}
  </select>
  <insert id="insertUser">
    INSERT INTO users (name, email) VALUES (#{name}, #{email})
  </insert>
  <update id="updateUser">
    UPDATE users SET name=#{name}, email=#{email} WHERE id=#{id}
  </update>
  <delete id="deleteUser">
    DELETE FROM users WHERE id=#{id}
  </delete>
</mapper>
生成器高级功能

如何处理多数据源

在实际应用中,常常需要处理多个数据源的情况。可以通过配置多个context标签来实现。

<generatorConfiguration>
  <context id="DB2Tables" targetRuntime="MyBatis3">
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                     connectionURL="jdbc:mysql://localhost:3306/mydb"
                     userId="root"
                     password="password">
    </jdbcConnection>
    <!-- 其他配置 -->
  </context>
  <context id="DB3Tables" targetRuntime="MyBatis3">
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                     connectionURL="jdbc:mysql://localhost:3306/mydb2"
                     userId="root"
                     password="password">
    </jdbcConnection>
    <!-- 其他配置 -->
  </context>
</generatorConfiguration>

常见问题及解决方法

  • 问题1:生成的代码不包含注释:检查commentGenerator标签的配置,确保注释生成没有被禁用。
<commentGenerator>
  <property name="suppressAllComments" value="false"/>
</commentGenerator>
  • 问题2:生成的Java类或XML文件路径错误:检查javaModelGeneratorsqlMapGeneratorjavaClientGenerator标签的targetPackagetargetProject属性,确保路径配置正确。

  • 问题3:生成的Java类或XML文件中的SQL语句不正确:检查table标签中的表名和字段名是否正确,以及SQL语句是否符合数据库表结构。

  • 问题4:生成的Java类或XML文件中的方法签名不正确:检查table标签中的方法名和参数类型是否正确,以及Mapper接口的定义是否符合预期。
实践案例
通过案例理解Mybatis生成器的实际应用

示例项目实例

假设我们有一个简单的数据库表结构,如下所示:

CREATE DATABASE mydb;
CREATE TABLE users (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  email VARCHAR(100)
);

我们将使用MBG自动生成对应的Java类、Mapper接口和XML映射文件。

  1. 准备GeneratorConfig.xml文件:根据前面的介绍,配置GeneratorConfig.xml文件。
<generatorConfiguration>
  <context id="DB2Tables" targetRuntime="MyBatis3">
    <commentGenerator>
      <property name="suppressAllComments" value="false"/>
    </commentGenerator>
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                     connectionURL="jdbc:mysql://localhost:3306/mydb"
                     userId="root"
                     password="password">
    </jdbcConnection>
    <table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false">
      <property name="useActualColumnNames" value="true"/>
    </table>
    <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"/>
  </context>
</generatorConfiguration>
  1. 执行生成器:使用MBG工具执行生成器。
mvn mybatis-generator:generate
  1. 查看生成的文件

生成的文件包括:

  • User.java:位于src/main/java/com/example/model/User.java,定义了User类。
  • UserMapper.xml:位于src/main/resources/com/example/mapper/UserMapper.xml,定义了SQL映射。
  • UserMapper.java:位于src/main/java/com/example/mapper/UserMapper.java,定义了Mapper接口。

示例代码

以下是生成的User类、Mapper接口和XML映射文件的部分代码:

User.java

package com.example.model;

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;
  }
}

UserMapper.java

package com.example.mapper;

import com.example.model.User;
import java.util.List;

public interface UserMapper {
  List<User> selectAllUsers();
  User selectUser(Integer id);
  void insertUser(User user);
  void updateUser(User user);
  void deleteUser(Integer id);
}

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="selectAllUsers" resultType="com.example.model.User">
    SELECT * FROM users
  </select>
  <select id="selectUser" resultType="com.example.model.User">
    SELECT * FROM users WHERE id = #{id}
  </select>
  <insert id="insertUser">
    INSERT INTO users (name, email) VALUES (#{name}, #{email})
  </insert>
  <update id="updateUser">
    UPDATE users SET name=#{name}, email=#{email} WHERE id=#{id}
  </update>
  <delete id="deleteUser">
    DELETE FROM users WHERE id=#{id}
  </delete>
</mapper>
``

通过上面的示例,可以看到MBG生成的代码结构清晰,易于理解,能够有效地提高开发效率。
点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消