第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

Mybatis官方生成器學(xué)習:從入門到實踐

概述

本文介绍了Mybatis框架的基本概念和Mybatis官方生成器(Mybatis Generator)的功能与优势,通过Mybatis Generator可以自动生成Java Bean、Mapper接口和XML映射文件,大幅提高开发效率。文章详细讲解了Mybatis Generator的安装配置、代码生成过程以及常见问题的解决方法。mybatis官方生成器学习将帮助开发者快速搭建持久层代码,减少手动编码的工作量。

Mybatis简介与官方生成器概述

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可通过简单的 XML 或注解进行配置,并能与任何一种数据库组件配合使用。MyBatis 的设计目标是提供一个灵活、轻量级的持久层框架,让开发者能够专注于业务逻辑的实现,而不需要过多地处理数据库的底层操作。

Mybatis的基本特点

  • 轻量级框架:MyBatis 不依赖于其他框架,具有较高的灵活性。
  • 简单易用:通过简单的 XML 或注解进行配置,降低了学习和使用的门槛。
  • 支持定制化SQL:允许用户自定义 SQL 语句,适应复杂多变的数据库操作需求。
  • 强大的映射功能:支持从简单到复杂的对象和数据库表之间的映射。
  • 插件机制:通过插件机制可以进行扩展,满足特定需求。
官方生成器的作用与优势

MyBatis 官方生成器(MyBatis Generator,简称 MBG)是一个可生成 MyBatis 和 MyBatis-Plus 所需的 Java 类和 XML 文件的工具。它能够自动根据数据库表结构生成 Java Bean、Mapper 接口、Mapper XML 文件等,极大地提高了开发效率,减少了重复的工作。

作用

  • 自动生成 Java Bean 类,提供强类型字段操作。
  • 自动生成 Mapper 接口和 XML 映射文件,包含基本的 CRUD 操作。
  • 提供自动更新功能,根据数据库表结构的变化自动同步 Java Bean 类和其他文件。

优势

  • 节省开发时间:减少手动编写代码的工作量,提高开发效率。
  • 减少错误:避免由于手动编写代码导致的错误,保证生成的代码质量。
  • 保持一致性:通过配置文件可以统一管理生成的代码风格,确保项目的一致性。
  • 支持多种数据库:支持多种数据库类型,适应不同的数据库环境。
安装与环境准备

为了使用 MyBatis Generator,需要先安装并配置好 Java 环境、Maven 以及数据库环境。以下是具体的安装与环境准备步骤。

安装 Java

确保系统中已经安装了 Java 开发工具包(JDK),并且配置好环境变量。可以通过以下命令检查 Java 版本:

java -version

如果未安装,可从 Oracle 官方网站下载安装包。安装完成后,需要设置环境变量 JAVA_HOME 指向 Java 安装目录,并将 %JAVA_HOME%\bin 添加到系统环境变量 PATH 中。

安装 Maven

Maven 是一个项目管理和构建工具,通过 Maven 可以方便地下载和管理依赖,构建项目。Maven 的安装步骤如下:

  1. 从 Maven 官方网站下载 Maven 安装包。
  2. 解压下载的安装包到指定目录。
  3. 设置环境变量 MAVEN_HOME 指向 Maven 安装目录,并将 %MAVEN_HOME%\bin 添加到系统环境变量 PATH 中。
  4. 执行命令 mvn -v 来验证 Maven 是否安装成功。

配置数据库连接信息

确保数据库已经安装并启动,例如 MySQL 或者 PostgreSQL。接下来需要在项目的 pom.xml 文件中配置数据库连接信息,以便 MyBatis Generator 能够连接到数据库。

数据库连接配置

在项目目录下的 pom.xml 文件中添加 MyBatis Generator 的相关配置信息,包括数据库驱动类、数据库 URL、用户名和密码等。

<project>
    ...
    <dependencies>
        ...
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
    </dependencies>
    <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-URITY-compliance-connector-java</artifactId>
                        <version>8.0.28</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>
下载并配置 Mybatis Generator

接下来下载并配置 MyBatis Generator 插件。

  1. 从 Maven 中央仓库下载 MyBatis Generator 的 Maven 插件依赖:
<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.7</version>
</dependency>
  1. 创建 MyBatis Generator 配置文件 mybatis-generator.xml,并根据实际需求填写数据库连接信息,定义需要生成的表以及生成的 Java Bean 类和 Mapper 接口等信息。
<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/mydatabase"
                        userId="root"
                        password="password">
        </jdbcConnection>
        <javaTypeResolver>
            <property name="unambiguousTypeFields" 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="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryid="mySelectByExample"/>
    </context>
</generatorConfiguration>

下一步

完成上述配置后,可以在项目的 pom.xml 文件中配置 MyBatis Generator 插件,并使用 Maven 命令生成代码:

mvn mybatis-generator:generate

以上步骤完成了 MyBatis Generator 的安装与配置。接下来我们将详细介绍如何使用 MyBatis Generator 生成代码。

安装与配置Mybatis官方生成器
下载官方生成器插件

通过 Maven 将 MyBatis Generator 插件添加到项目中,并进行相应的配置。首先,我们需要在项目的 pom.xml 文件中添加 MyBatis Generator 的相关依赖。

<dependencies>
    <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <version>1.3.7</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.28</version>
    </dependency>
</dependencies>
配置Mybatis官方生成器的XML文件

MyBatis Generator 配置文件(mybatis-generator.xml)是核心配置文件,用于定义数据库连接信息、生成代码的目标包和类名等。以下是配置文件的基本结构:

<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/mydatabase"
                        userId="root"
                        password="password">
        </jdbcConnection>
        <javaTypeResolver>
            <property name="unambiguousTypeFields" 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="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryid="mySelectByExample"/>
    </context>
</generatorConfiguration>

在配置文件中,<context> 标签定义了生成代码的目标运行时,<commentGenerator> 标签用于配置注释生成,<jdbcConnection> 标签用于配置数据库连接信息,<javaTypeResolver> 标签用于配置 Java 类型解析,<javaModelGenerator> 标签用于配置 Java Bean 类生成,<sqlMapGenerator> 标签用于配置 XML 映射文件生成,<javaClientGenerator> 标签用于配置 Mapper 接口生成,<table> 标签用于定义需要生成代码的数据库表。

配置示例

假设我们有一个名为 users 的数据库表,需要生成对应的 Java Bean 类、Mapper 接口和 XML 映射文件,可以按照以下步骤进行配置:

  1. 数据库连接信息
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/mydatabase"
                userId="root"
                password="password">
</jdbcConnection>
  1. Java Bean 类生成
<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java">
    <property name="enableSubPackages" value="true"/>
    <property name="trimStrings" value="true"/>
</javaModelGenerator>
  1. Mapper XML 文件生成
<sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources">
    <property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
  1. Mapper 接口生成
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java">
    <property name="enableSubPackages" value="true"/>
</javaClientGenerator>
  1. 表定义
<table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryid="mySelectByExample"/>
配置数据库连接信息

在配置文件中,通过 <jdbcConnection> 标签设置数据库连接信息,包括数据库驱动类、数据库 URL、用户名和密码等。例如:

<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/mydatabase"
                userId="root"
                password="password">
</jdbcConnection>

数据库驱动类和数据库 URL 根据实际使用的数据库进行更改。MySQL 的连接 URL 为 jdbc:mysql://localhost:3306/mydatabase,其中 localhost:3306 是数据库服务器地址和端口号,mydatabase 是数据库名。

下一步

完成上述配置后,可以在项目的 pom.xml 文件中配置 MyBatis Generator 插件,并使用 Maven 命令生成代码:

mvn mybatis-generator:generate
使用Mybatis官方生成器生成代码
生成基本的持久层接口和实现类

MyBatis Generator 可以根据数据库表自动生成持久层接口和实现类。持久层接口通常命名为 UserMapper,实现类命名为 UserMapperImpl。自动生成的代码中包含基本的 CRUD 操作(Create、Read、Update、Delete)。

生成持久层接口

持久层接口定义了数据库操作的方法,例如查询、插入、更新和删除操作。MyBatis Generator 自动生成的持久层接口通常命名为 UserMapper,并包含以下方法:

public interface UserMapper {
    int insert(User record);
    int insertSelective(User record);
    List<User> selectByExample(UserExample example);
    User selectByPrimaryKey(String id);
    int updateByExampleSelective(@Param("record") User record, @Param("example") UserExample example);
    int updateByExample(@Param("record") User record, @Param("example") UserExample example);
    int updateByPrimaryKeySelective(User record);
    int updateByPrimaryKey(User record);
    int deleteByExample(UserExample example);
    int deleteByPrimaryKey(String id);
}

这些方法对应于数据库表上的基本操作,例如插入一条记录、选择一条记录、更新一条记录和删除一条记录。

生成持久层实现类

持久层实现类通常命名为 UserMapperImpl,并实现持久层接口定义的方法。MyBatis Generator 自动生成的实现类会包含对应的 SQL 语句实现,这些 SQL 语句通常存储在 XML 映射文件中。

示例代码:

public class UserMapperImpl extends BaseMapper<User> implements UserMapper {
    @Override
    public int insert(User record) {
        return insert(record, null);
    }

    @Override
    public int insertSelective(User record) {
        return insert(record, new UserExample());
    }

    @Override
    public List<User> selectByExample(UserExample example) {
        return selectByExample(example);
    }

    @Override
    public User selectByPrimaryKey(String id) {
        return selectByPrimaryKey(id);
    }

    @Override
    public int updateByExampleSelective(@Param("record") User record, @Param("example") UserExample example) {
        return update(record, example);
    }

    @Override
    public int updateByExample(@Param("record") User record, @Param("example") UserExample example) {
        return update(record, example);
    }

    @Override
    public int updateByPrimaryKeySelective(User record) {
        return updateByPrimaryKey(record);
    }

    @Override
    public int updateByPrimaryKey(User record) {
        return updateByPrimaryKey(record);
    }

    @Override
    public int deleteByExample(UserExample example) {
        return deleteByExample(example);
    }

    @Override
    public int deleteByPrimaryKey(String id) {
        return deleteByPrimaryKey(id);
    }
}

持久层实现类会继承 BaseMapper,并且会实现持久层接口中的方法,这些方法将调用 XML 映射文件中的 SQL 语句。

生成Mapper XML文件

Mapper XML 文件用于定义 SQL 语句的实现,包括插入、查询、更新和删除等操作。这些文件通常位于 resources 目录下,每个 SQL 语句都有一个对应的 ID,用于在持久层接口中调用。

Mapper XML文件结构

Mapper XML 文件中的每个 SQL 语句使用 id 标签定义,resultType 标签定义返回结果的 Java 类型,parameterType 标签定义参数的 Java 类型。例如:

<mapper namespace="com.example.mapper.UserMapper">
    <insert id="insert" parameterType="com.example.model.User">
        INSERT INTO users (id, username, password) VALUES (#{id}, #{username}, #{password})
    </insert>
    <select id="selectByPrimaryKey" resultType="com.example.model.User" parameterType="java.lang.String">
        SELECT * FROM users WHERE id = #{id}
    </select>
    <update id="updateByPrimaryKey" parameterType="com.example.model.User">
        UPDATE users SET username = #{username}, password = #{password} WHERE id = #{id}
    </update>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
        DELETE FROM users WHERE id = #{id}
    </delete>
</mapper>

在持久层接口中,可以使用这些 id 来调用对应的 SQL 语句。例如:

public interface UserMapper {
    int insert(User record);
    User selectByPrimaryKey(String id);
    int updateByPrimaryKey(User record);
    int deleteByPrimaryKey(String id);
}
生成Entity类

Entity 类通常命名为 User,对应于数据库表中的字段。Entity 类中包含了数据库表字段的属性和对应的 getter 和 setter 方法,例如:

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

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

样例代码

假设有一个名为 users 的数据库表,包含 idusernamepassword 字段,我们可以生成对应的 User 类:

<table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryid="mySelectByExample"/>

生成的 User 类代码如下:

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

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

该类定义了数据库表中的字段属性,并提供了对应的 getter 和 setter 方法。通过这些属性和方法,可以在 Java 代码中方便地操作数据库表中的数据。

代码生成后的项目结构解析
持久层接口和实现类详解

生成的持久层接口和实现类通常位于 src/main/java 目录下,持久层接口类通常命名为 UserMapper,持久层实现类通常命名为 UserMapperImpl

持久层接口详解

持久层接口定义了数据库操作的方法,例如查询、插入、更新和删除操作。生成的持久层接口通常命名为 UserMapper,并包含以下方法:

public interface UserMapper {
    int insert(User record);
    int insertSelective(User record);
    List<User> selectByExample(UserExample example);
    User selectByPrimaryKey(String id);
    int updateByExampleSelective(@Param("record") User record, @Param("example") UserExample example);
    int updateByExample(@Param("record") User record, @Param("example") UserExample example);
    int updateByPrimaryKeySelective(User record);
    int updateByPrimaryKey(User record);
    int deleteByExample(UserExample example);
    int deleteByPrimaryKey(String id);
}

这些方法中,@Param 注解用于传递多个参数。例如,updateByExampleSelective 方法需要传递两个参数,分别是 recordexample。这些方法各对应一种数据库操作,例如 insert 方法对应插入一条记录,selectByPrimaryKey 方法对应查询一条记录,updateByPrimaryKey 方法对应更新一条记录,deleteByPrimaryKey 方法对应删除一条记录。

持久层实现类详解

持久层实现类通常命名为 UserMapperImpl,并实现持久层接口定义的方法。例如:

public class UserMapperImpl extends BaseMapper<User> implements UserMapper {
    @Override
    public int insert(User record) {
        return insert(record, null);
    }

    @Override
    public int insertSelective(User record) {
        return insert(record, new UserExample());
    }

    @Override
    public List<User> selectByExample(UserExample example) {
        return selectByExample(example);
    }

    @Override
    public User selectByPrimaryKey(String id) {
        return selectByPrimaryKey(id);
    }

    @Override
    public int updateByExampleSelective(@Param("record") User record, @Param("example") UserExample example) {
        return update(record, example);
    }

    @Override
    public int updateByExample(@Param("record") User record, @Param("example") UserExample example) {
        return update(record, example);
    }

    @Override
    public int updateByPrimaryKeySelective(User record) {
        return updateByPrimaryKey(record);
    }

    @Override
    public int updateByPrimaryKey(User record) {
        return updateByPrimaryKey(record);
    }

    @Override
    public int deleteByExample(UserExample example) {
        return deleteByExample(example);
    }

    @Override
    public int deleteByPrimaryKey(String id) {
        return deleteByPrimaryKey(id);
    }
}

持久层实现类的实现方法通常会调用 BaseMapper 类中的方法,这些方法实际执行 SQL 语句。例如,insert 方法会调用 BaseMapper 类中的 insert 方法,实现插入一条记录的操作。

Mapper XML文件详解

Mapper XML 文件用于定义 SQL 语句的实现,包括插入、查询、更新和删除等操作。这些文件通常位于 src/main/resources 目录下,每个 SQL 语句都有一个对应的 ID,用于在持久层接口中调用。

Mapper XML文件结构

Mapper XML 文件中的每个 SQL 语句使用 id 标签定义,resultType 标签定义返回结果的 Java 类型,parameterType 标签定义参数的 Java 类型。例如:

<mapper namespace="com.example.mapper.UserMapper">
    <insert id="insert" parameterType="com.example.model.User">
        INSERT INTO users (id, username, password) VALUES (#{id}, #{username}, #{password})
    </insert>
    <select id="selectByPrimaryKey" resultType="com.example.model.User" parameterType="java.lang.String">
        SELECT * FROM users WHERE id = #{id}
    </select>
    <update id="updateByPrimaryKey" parameterType="com.example.model.User">
        UPDATE users SET username = #{username}, password = #{password} WHERE id = #{id}
    </update>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
        DELETE FROM users WHERE id = #{id}
    </delete>
</mapper>

在持久层接口中,可以使用这些 id 来调用对应的 SQL 语句。例如:

public interface UserMapper {
    int insert(User record);
    User selectByPrimaryKey(String id);
    int updateByPrimaryKey(User record);
    int deleteByPrimaryKey(String id);
}

通过持久层接口中的方法,可以方便地调用 Mapper XML 文件中的 SQL 语句,进行数据库操作。

Entity类详解

Entity 类通常命名为 User,对应于数据库表中的字段。生成的 User 类通常位于 src/main/java 目录下,包含数据库表字段的属性和对应的 getter 和 setter 方法。

Entity类注释

生成的 User 类中,每个字段都有对应的注释,注释中包含字段的名称和类型。例如:

public class User {
    /**
     * id
     */
    private String id;
    /**
     * username
     */
    private String username;
    /**
     * password
     */
    private String password;
}

这些注释可以帮助开发者理解字段的含义和用途。

Entity类属性及方法

生成的 User 类中,每个字段都有对应的 getter 和 setter 方法。例如:

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

这些 getter 和 setter 方法可以方便地在 Java 代码中操作数据库表中的数据。

Entity类示例

假设有一个名为 users 的数据库表,包含 idusernamepassword 字段,生成的 User 类代码如下:

public class User {
    /**
     * id
     */
    private String id;
    /**
     * username
     */
    private String username;
    /**
     * password
     */
    private String password;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

该类定义了数据库表中的字段属性,并提供了对应的 getter 和 setter 方法。通过这些属性和方法,可以在 Java 代码中方便地操作数据库表中的数据。

常见问题与解决方案
生成代码时遇到的常见问题

在使用 MyBatis Generator 生成代码时,可能会遇到一些常见问题,例如:

  • 生成的代码存在语法错误。
  • 生成的代码与数据库表结构不匹配。
  • 生成的代码无法编译通过。

生成的代码存在语法错误

如果生成的代码存在语法错误,可能是由于数据库表结构或配置文件有误。可以检查数据库表结构是否正确,以及配置文件中的表名、字段名等是否正确。

生成的代码与数据库表结构不匹配

如果生成的代码与数据库表结构不匹配,可能是由于数据库表结构发生变化,但没有及时更新 MyBatis Generator 生成的代码。可以手动修改生成的代码,或者重新生成代码。

生成的代码无法编译通过

如果生成的代码无法编译通过,可能是由于生成的代码存在语法错误,或者依赖的库版本不兼容。可以检查生成的代码是否存在语法错误,以及依赖的库版本是否正确。

解决代码生成中的常见异常

在使用 MyBatis Generator 生成代码时,可能会遇到一些异常,例如:

  • SQLException:数据库连接失败。
  • IOException:读写文件时发生错误。
  • MyBatisGeneratorException:生成代码时发生错误。

解决数据库连接失败

如果遇到 SQLException 异常,可能是由于数据库连接失败。可以检查数据库连接信息是否正确,例如数据库驱动类、数据库 URL、用户名和密码等。

解决读写文件时发生错误

如果遇到 IOException 异常,可能是由于读写文件时发生错误。可以检查配置文件路径是否正确,文件是否可读写。

解决生成代码时发生错误

如果遇到 MyBatisGeneratorException 异常,可能是由于生成代码时发生错误。可以检查配置文件是否正确,生成代码的目标包路径是否存在。

特殊需求的处理方法

在使用 MyBatis Generator 生成代码时,可能会有一些特殊需求,例如:

  • 自定义生成的代码结构。
  • 自定义生成的代码内容。
  • 自定义生成的代码注释。

自定义生成的代码结构

如果需要自定义生成的代码结构,可以在配置文件中修改生成代码的目标包路径。例如:

<javaModelGenerator targetPackage="com.example.custom.model" targetProject="src/main/java"/>
<sqlMapGenerator targetPackage="com.example.custom.mapper" targetProject="src/main/resources"/>
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.custom.mapper" targetProject="src/main/java"/>

自定义生成的代码内容

如果需要自定义生成的代码内容,可以修改配置文件中的字段生成规则。例如:

<table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryid="mySelectByExample">
    <columnOverride column="username" javaName="name"/>
</table>

自定义生成的代码注释

如果需要自定义生成的代码注释,可以在配置文件中修改注释生成规则。例如:

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

以上是解决代码生成中常见问题的方法,以及处理特殊需求的方法。通过这些方法,可以更好地使用 MyBatis Generator 生成代码。

实践案例:使用Mybatis官方生成器完成一个简单的CRUD操作
创建数据库表

为了演示如何使用 MyBatis Generator 完成一个简单的 CRUD 操作,我们首先创建一个名为 users 的数据库表。假设我们使用 MySQL 数据库,创建表的 SQL 语句如下:

CREATE TABLE users (
    id VARCHAR(50) NOT NULL,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(50) NOT NULL,
    PRIMARY KEY (id)
);

这里我们创建了一个包含 idusernamepassword 三个字段的表,其中 id 作为主键。

数据库表结构

创建表后,可以使用 MySQL 工具(如 MySQL Workbench 或 MySQL CLI)查询表结构,确认表结构正确。

自动生成代码

在创建好数据库表后,接下来使用 MyBatis Generator 自动生成代码。确保已经完成了 MyBatis Generator 的安装和配置,包括数据库连接信息和生成代码的目标路径等。

配置Mybatis Generator

在项目的 mybatis-generator.xml 配置文件中,配置数据库表 users 的生成代码:

<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/mydatabase"
                        userId="root"
                        password="password">
        </jdbcConnection>
        <javaTypeResolver>
            <property name="unambiguousTypeFields" 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="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryid="mySelectByExample"/>
    </context>
</generatorConfiguration>

生成代码

使用 Maven 命令生成代码:

mvn mybatis-generator:generate

上述命令会根据 mybatis-generator.xml 的配置生成对应的持久层接口、Mapper XML 文件和 Entity 类。

生成的代码文件

生成的代码文件通常会放在 src/main/javasrc/main/resources 目录下。例如,生成的 User 类会放在 src/main/java/com/example/model 目录下,生成的 UserMapper 接口和实现类会放在 src/main/java/com/example/mapper 目录下,生成的 Mapper XML 文件会放在 src/main/resources/com/example/mapper 目录下。

执行CRUD操作

生成代码后,接下来可以在项目中使用这些生成的持久层接口和 Mapper XML 文件进行 CRUD 操作。

CRUD操作示例

以下是一个简单的 CRUD 操作示例,包括插入一条记录、查询一条记录、更新一条记录和删除一条记录。

插入一条记录

public class UserMapperTest {
    private SqlSessionFactory sqlSessionFactory;

    @Before
    public void setUp() {
        sqlSessionFactory = MybatisUtil.getSqlSessionFactory();
    }

    @Test
    public void testInsert() {
        UserMapper userMapper = sqlSessionFactory.openSession().getMapper(UserMapper.class);
        User user = new User();
        user.setId("1");
        user.setUsername("john");
        user.setPassword("secret");
        int insertCount = userMapper.insert(user);
        assertEquals(1, insertCount);
    }
}

这段代码中,首先通过 MyBatis 工厂创建了一个 SqlSessionFactory,然后通过 SqlSessionFactory 创建了一个 SqlSession,并通过 SqlSession 获取了一个 UserMapper 对象。在 testInsert 方法中,创建了一个 User 对象并设置了 idusernamepassword 属性,然后调用 userMapper.insert 方法插入到数据库表中。

查询一条记录

@Test
public void testSelectByPrimaryKey() {
    UserMapper userMapper = sqlSessionFactory.openSession().getMapper(UserMapper.class);
    User user = userMapper.selectByPrimaryKey("1");
    assertNotNull(user);
    assertEquals("john", user.getUsername());
}

这段代码中,调用 userMapper.selectByPrimaryKey 方法查询一条记录,传入 id 为 "1" 的参数,查询结果应该是一个 User 对象,该对象的 username 值应该为 "john"。

更新一条记录

@Test
public void testUpdateByPrimaryKey() {
    UserMapper userMapper = sqlSessionFactory.openSession().getMapper(UserMapper.class);
    User user = new User();
    user.setId("1");
    user.setUsername("jane");
    user.setPassword("password");
    int updateCount = userMapper.updateByPrimaryKey(user);
    assertEquals(1, updateCount);
}

这段代码中,创建了一个 User 对象并设置了 idusernamepassword 属性,然后调用 userMapper.updateByPrimaryKey 方法更新数据库表中 id 为 "1" 的记录。

删除一条记录

@Test
public void testDeleteByPrimaryKey() {
    UserMapper userMapper = sqlSessionFactory.openSession().getMapper(UserMapper.class);
    int deleteCount = userMapper.deleteByPrimaryKey("1");
    assertEquals(1, deleteCount);
}

这段代码中,调用 userMapper.deleteByPrimaryKey 方法删除一条记录,传入 id 为 "1" 的参数,删除结果返回的是删除记录的数量。

完整的测试类代码

public class UserMapperTest {
    private SqlSessionFactory sqlSessionFactory;

    @Before
    public void setUp() {
        sqlSessionFactory = MybatisUtil.getSqlSessionFactory();
    }

    @Test
    public void testInsert() {
        UserMapper userMapper = sqlSessionFactory.openSession().getMapper(UserMapper.class);
        User user = new User();
        user.setId("1");
        user.setUsername("john");
        user.setPassword("secret");
        int insertCount = userMapper.insert(user);
        assertEquals(1, insertCount);
    }

    @Test
    public void testSelectByPrimaryKey() {
        UserMapper userMapper = sqlSessionFactory.openSession().getMapper(UserMapper.class);
        User user = userMapper.selectByPrimaryKey("1");
        assertNotNull(user);
        assertEquals("john", user.getUsername());
    }

    @Test
    public void testUpdateByPrimaryKey() {
        UserMapper userMapper = sqlSessionFactory.openSession().getMapper(UserMapper.class);
        User user = new User();
        user.setId("1");
        user.setUsername("jane");
        user.setPassword("password");
        int updateCount = userMapper.updateByPrimaryKey(user);
        assertEquals(1, updateCount);
    }

    @Test
    public void testDeleteByPrimaryKey() {
        UserMapper userMapper = sqlSessionFactory.openSession().getMapper(UserMapper.class);
        int deleteCount = userMapper.deleteByPrimaryKey("1");
        assertEquals(1, deleteCount);
    }
}

完整的 MybatisUtil 类代码

public class MybatisUtil {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
    }
}

测试运行

上述 CRUD 操作示例中,使用了 JUnit 框架对持久层接口进行测试。如果测试运行通过,说明 CRUD 操作已经成功完成。

通过以上步骤,可以使用 MyBatis Generator 自动生成代码,并完成简单的 CRUD 操作。

點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習,寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學(xué)

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消