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

Mybatis官方生成器学习入门:初学者必读教程

概述

本文将带你了解Mybatis官方生成器的使用方法,从基本概念到实际操作案例,帮助你快速掌握Mybatis官方生成器的学习入门。Mybatis官方生成器简化了Mybatis项目的开发过程,提高了开发效率,减少了手动编写代码的工作量。通过配置XML文件,生成器可以自动根据数据库表结构生成相应的Java代码,包括实体类、Mapper接口和Mapper XML文件等。

Mybatis简介

Mybatis 是一个优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。Mybatis 可以帮助你将 Java 应用程序与数据库系统进行交互,主要通过 XML 或注解进行配置和原始映射,将接口和 Java 的 POJO 与数据库表和记录进行映射。Mybatis 的设计目标是将 SQL 语句与 Java 代码分离,使得 Java 代码更加简洁和清晰。Mybatis 的优势在于它提供了极大的灵活性和强大的映射功能,使得开发者能够直接操作数据库,并且非常适合中小型项目使用。

Mybatis的核心概念

  1. Configuration: 配置对象,包含了数据库相关配置信息,包括环境配置、事务管理器、映射文件、自定义类型处理器等。
  2. SqlSessionFactory: 通过配置文件创建SqlSessionFactory实例,它是线程不安全的,不能被共享。SqlSessionFactory 用于创建 SqlSession,是一个工厂类。
  3. SqlSession: 代表和数据库的一次会话,可以执行 SQL 语句,并返回映射的对象。SqlSession 也是线程不安全的,不能被共享。它提供了各种操作数据库的方法,如增删改查、事务处理等。
  4. Mapper: 定义了和数据库交互的 SQL 语句和映射规则,可以通过 XML 文件或注解实现。Mapper 接口或 XML 文件中的 SQL 语句会映射到 Java 方法,实现数据库操作。
  5. Executor: 执行器,负责执行 SQL 语句,包括查询、更新、删除等操作。Executor 实现了不同的执行策略,如简单执行器、批量执行器等。
  6. Mapped Statement: 每一组 SQL 语句和映射规则对应一个 MappedStatement,它是 Mybatis 中最核心的对象之一。Mapper.xml 文件中定义的每个 SQL 语句都会被解析为一个 MappedStatement,它包括了 SQL 语句、参数映射、结果映射等信息。
  7. ParameterMapper: 用于处理 SQL 语句中的参数映射,将 Java 对象转换成 SQL 语句中的参数。
  8. ResultSetHandler: 用于处理 SQL 语句执行后的结果集,将数据库返回的数据映射到 Java 对象。

Mybatis的优势

  1. 灵活性: Mybatis 提供了高度的灵活性,允许开发者自由地编写 SQL 语句,支持动态 SQL,可以动态地拼接 SQL 语句。
  2. 性能: Mybatis 不像 Hibernate 这样的 ORM 框架,它没有自动的 SQL 生成机制,而是直接使用 SQL 语句,因此性能较好。
  3. 控制性强: Mybatis 可以对 SQL 语句进行精确地控制,可以针对不同的 SQL 语句进行优化,灵活性强,非常适合管理复杂的数据库操作。
  4. 数据库无关性: Mybatis 不依赖于特定的数据库,可以在任何数据库环境中运行。
  5. 易于维护: Mybatis 的 XML 配置文件和 Java 代码分离,使得 SQL 语句的维护和修改更加方便。

Mybatis官方生成器介绍

Mybatis 官方生成器是 Mybatis 官方提供的一个工具,用于从数据库表结构生成 Mybatis 的所有相关代码,包括 Java 实体类、Mapper 接口、Mapper XML 文件等。它简化了 Mybatis 项目的开发过程,提高了开发效率。

官方生成器简介

Mybatis 官方生成器是一个命令行工具,主要通过配置 XML 文件来定义生成规则和生成代码的输出位置。生成器可以自动根据数据库表结构生成相应的 Java 代码,减少了手动编写代码的工作量。

官方生成器的作用

  • 代码生成: 自动生成 Java 实体类、Mapper 接口和 Mapper XML 文件。
  • 数据库表结构同步: 保持数据库表结构和 Java 代码的一致性。
  • 简化开发: 减少了手动编写代码的工作量,提高了开发效率。

官方生成器的主要功能

  • 代码生成: 支持生成 Java 实体类、Mapper 接口、Mapper XML 文件等。
  • 数据库表结构同步: 可以根据数据库表结构的变化,自动更新生成的代码。
  • 自定义生成规则: 支持自定义生成规则,如命名规则、字段类型转换等。
  • 多种输出格式: 支持生成各种格式的代码文件,如 XML、Java 等。
  • 增量生成: 支持增量生成,只对有变化的表生成代码。

环境搭建

开发环境要求

  • JDK: Java Development Kit,建议使用 JDK 8 或以上版本。
  • Maven: 用于管理项目的构建、依赖和版本控制。
  • Mybatis Generator: Mybatis 官方生成器。
  • MySQL: 数据库环境,建议使用 MySQL 5.7 或以上版本。
  • IDE: 如 IntelliJ IDEA 或 Eclipse。

下载和配置Mybatis官方生成器

Mybatis 官方生成器可以通过 Maven 下载,添加以下依赖到项目的 pom.xml 文件中:

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

然后在项目的根目录下创建一个 mybatis-generator.xml 配置文件,配置文件示例如下:

<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config.dtd">
<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/test_db"
                        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">
            <generatedKey column="id" sqlType="INTEGER" identity="true" />
        </table>
    </context>
</generatorConfiguration>

创建数据库和表结构

创建一个 MySQL 数据库和表结构,例如:

CREATE DATABASE IF NOT EXISTS test_db;
USE test_db;

CREATE TABLE user (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    email VARCHAR(50)
);

配置Mybatis官方生成器的XML文件

在 mybatis-generator.xml 配置文件中,配置数据库连接信息、生成的 Java 代码的位置、生成的 Mapper XML 文件的位置,以及需要生成的具体表结构。

生成器基本使用

启动生成器进行代码生成

在命令行中执行以下命令启动 Mybatis 生成器:

mvn mybatis-generator:generate

生成器会根据配置文件中的配置,从数据库表结构生成 Java 实体类、Mapper 接口和 Mapper XML 文件。

生成器自定义配置

生成器支持多种配置选项,如:

  • 生成的 Java 类的包名和输出目录:通过 <javaModelGenerator> 标签配置。
  • 生成的 XML 文件的包名和输出目录:通过 <sqlMapGenerator> 标签配置。
  • 生成的 Mapper 接口的包名和输出目录:通过 <javaClientGenerator> 标签配置。
  • 生成的表结构:通过 <table> 标签配置。
  • 生成的字段类型:通过 <columnOverride> 标签配置。

例如,生成器生成的 Java 类的包名和输出目录配置如下:

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

生成器生成的 XML 文件的包名和输出目录配置如下:

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

生成器生成的 Mapper 接口的包名和输出目录配置如下:

<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">
    <generatedKey column="id" sqlType="INTEGER" identity="true" />
</table>

生成器生成的代码结构解析

生成器生成的代码主要包括以下几个部分:

  • 实体类(Java 类):用于表示数据库表的结构,如 User.java
  • Mapper 接口:定义了和数据库交互的方法,如 UserMapper.java
  • Mapper XML 文件:定义了 SQL 语句和映射规则,如 UserMapper.xml

例如,生成的 Java 类文件 User.java 如下:

package com.example.model;

import java.io.Serializable;

public class User implements Serializable {
    private Integer id;
    private String name;
    private String email;

    // Getter and Setter
}

生成的 Mapper 接口文件 UserMapper.java 如下:

package com.example.mapper;

import com.example.model.User;
import org.apache.ibatis.annotations.Select;

public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectUserById(Integer id);
}

生成的 Mapper XML 文件 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="selectUserById" resultType="com.example.model.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>

实际使用案例

基本CRUD操作演示

通过 Mybatis 官方生成器生成的代码,可以进行基本的 CRUD(Create, Read, Update, Delete)操作,如下:

package com.example.service;

import com.example.mapper.UserMapper;
import com.example.model.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

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

public class UserService {

    private SqlSessionFactory sqlSessionFactory;

    public UserService() {
        // 读取配置文件,创建 SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = UserService.class.getClassLoader().getResourceAsStream(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    public void addUser(User user) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            mapper.addUser(user);
            session.commit();
        }
    }

    public User getUserById(Integer id) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            return mapper.selectUserById(id);
        }
    }

    public void updateUser(User user) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            mapper.updateUser(user);
            session.commit();
        }
    }

    public void deleteUser(Integer id) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            mapper.deleteUser(id);
            session.commit();
        }
    }

    public List<User> getAllUsers() {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            return mapper.selectAllUsers();
        }
    }
}

进阶操作示例

Mybatis 官方生成器生成的代码还可以支持更复杂的数据库操作,如批量插入、分页查询等。

批量插入

批量插入操作可以通过 Mybatis 的 foreach 标签实现,如下:

package com.example.mapper;

import com.example.model.User;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.jdbc.SQL;

public interface UserMapper {
    @InsertProvider(type = UserSqlProvider.class, method = "batchInsert")
    void batchInsert(List<User> users);
}

public class UserSqlProvider {
    public String batchInsert(List<User> users) {
        SQL sql = new SQL() {
            {
                INSERT_INTO("user");
                VALUES("name", "#{name}");
                VALUES("email", "#{email}");
            }
        };

        String sqlString = sql.FOR_EACH_ROW_IN_LIST();
        return sqlString;
    }
}
分页查询

分页查询可以通过 LIMITOFFSET 关键字实现,如下:

package com.example.mapper;

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

public interface UserMapper {
    @Select("SELECT * FROM user LIMIT #{offset}, #{limit}")
    List<User> selectUsersWithPagination(@Param("offset") int offset, @Param("limit") int limit);
}

解决常见问题

  • 生成器无法找到数据库表:检查配置文件中的数据库连接信息是否正确,确保数据库表已创建。
  • 生成的代码无法编译:确保生成的代码所在包名和实际的 Java 项目包名一致。
  • 生成器生成的代码不完整:检查配置文件中的表结构配置是否正确,确保生成器能够正确读取数据库表信息。

总结与展望

本教程的总结

本教程介绍了 Mybatis 官方生成器的使用,从 Mybatis 的基本概念和优势,到生成器的配置和使用方法,再到实际操作案例,帮助读者快速掌握如何使用 Mybatis 官方生成器进行数据库操作代码的生成。通过本教程,读者可以大大提高开发效率,减少手动编写代码的工作量,更好地管理和维护数据库操作逻辑。

Mybatis官方生成器的未来发展方向

未来 Mybatis 官方生成器可能会提供更多高级功能,如支持更多的数据库类型、更丰富的生成规则配置、更智能的代码生成策略等。此外,Mybatis 官方生成器也可能会与其他开发工具和服务进行更好的集成,如与代码生成工具、版本控制系统等进行集成,进一步提高开发效率和代码质量。

参考资料推荐

点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消