Java教程

Mybatis官方生成器学习入门

本文主要是介绍Mybatis官方生成器学习入门,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
概述

本文介绍了MyBatis的基本概念、工作原理以及MyBatis官方生成器的作用和使用场景。文章详细讲解了安装和配置MyBatis官方生成器的步骤,并展示了如何生成Java模型类、Mapper接口和XML文件。通过实践案例和常见问题解答,进一步帮助读者理解和使用MyBatis官方生成器。

Mybatis的基本概念

MyBatis简介

MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(普通老式Java对象)映射成数据库中的记录。MyBatis提供了强大的映射语句和存放结果映射及增删改查等操作的支持,简化了数据访问层的开发工作。

MyBatis的工作原理

MyBatis的工作流程主要包括以下几个步骤:

  1. 读取配置文件:MyBatis读取配置文件(如mybatis-config.xml)来配置数据库连接信息和映射文件路径。
  2. 构建SqlSessionFactory:使用SqlSessionFactoryBuilder类创建SqlSessionFactorySqlSessionFactory是一个工厂类,用于创建SqlSession
  3. 创建SqlSession:通过SqlSessionFactory创建SqlSessionSqlSession提供了执行SQL语句的接口。
  4. 执行SQL语句:通过SqlSession执行SQL语句,进行数据库的增删改查操作。
  5. 处理结果:MyBatis自动将查询结果映射到Java对象,提供了一种简单的方式来处理复杂的数据库操作。
介绍MyBatis官方生成器

官方生成器的作用

MyBatis Generator是MyBatis的一个官方工具,用于生成数据库的映射文件和Java模型类。它能够简化项目中数据访问层的开发工作,减少手动编写SQL映射文件和Java模型类的时间和错误。

官方生成器的使用场景

MyBatis Generator主要适用于以下场景:

  • 代码自动生成:当表结构复杂,需要频繁更新时,使用MyBatis Generator可以自动生成映射文件和模型类。
  • 简化开发流程:对于新项目,MyBatis Generator可以快速生成基本的数据访问层代码。
  • 降低手动编码错误:使用MyBatis Generator生成代码可以减少手动编写SQL和Java代码的错误。
安装和配置MyBatis官方生成器

准备开发环境

  1. 安装JDK:确保已安装Java开发工具包(JDK),并配置好环境变量。
  2. IDE配置:使用IntelliJ IDEA或Eclipse等IDE进行开发。
  3. 数据库配置:安装MySQL等数据库,并创建相应的数据库和表。

下载和配置生成器

  1. 下载MyBatis Generator:从MyBatis Generator的GitHub仓库下载最新版本的jar包。具体下载地址和版本信息可以在MyBatis Generator的官方文档中找到。

  2. 配置生成器:在项目的resources目录下创建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="DB2Tables" targetRuntime="MyBatis3">
        <!-- 数据库驱动类 -->
        <classPathEntry value="mysql-connector-java-8.0.22.jar"/>

        <!-- 数据库连接信息 -->
        <jdbcConnection driverType="MySQL">
            <property name="connectionURL" value="jdbc:mysql://localhost:3306/test"/>
            <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
            <property name="password" value="password"/>
            <property name="userId" value="root"/>
        </jdbcConnection>

        <!-- 实体类生成配置 -->
        <javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java"/>

        <!-- Mapper接口生成配置 -->
        <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/resources"/>

        <!-- Java Mapper接口生成配置 -->
        <javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>

        <!-- 表映射 -->
        <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
    </context>
</generatorConfiguration>

使用MyBatis官方生成器生成代码

配置生成器XML文件

generatorConfig.xml文件用于配置MyBatis Generator的各个生成器插件和数据库连接信息。每个<context>标签内可以配置多个<table>标签,每个标签代表一个数据库表的生成配置。

以下是一个配置文件示例:

<?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="DB2Tables" targetRuntime="MyBatis3">
        <classPathEntry value="mysql-connector-java-8.0.22.jar"/>
        <jdbcConnection driverType="MySQL">
            <property name="connectionURL" value="jdbc:mysql://localhost:3306/test"/>
            <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
            <property name="password" value="password"/>
            <property name="userId" value="root"/>
        </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" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
    </context>
</generatorConfiguration>

生成Java模型类

MyBatis Generator根据数据库表结构生成Java模型类。以下是一个生成的模型类示例:

package com.example.model;

import java.util.Date;

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

生成Mapper接口和XML文件

MyBatis Generator生成Mapper接口和对应的XML文件。以下是一个生成的Mapper接口示例:

package com.example.mapper;

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

public interface UserMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(User record);

    int insertSelective(User record);

    User selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(User record);

    int updateByPrimaryKey(User record);
}

以下是一个生成的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">
    <resultMap id="BaseResultMap" type="com.example.model.User">
        <id column="id" jdbcType="INTEGER" property="id" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="email" jdbcType="VARCHAR" property="email" />
    </resultMap>
    <sql id="Base_Column_List">
        id, name, email
    </sql>
    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
        select
        <if test="select != null">
            ${select}
        </if>
        <if test="select == null">
            *
        </if>
        from user
        <where>
            <if test="id != null">
                and id = #{id, jdbcType=INTEGER}
            </if>
        </where>
    </select>
    <insert id="insert" parameterType="com.example.model.User">
        insert into user (id, name, email)
        values (#{id, jdbcType=INTEGER}, #{name, jdbcType=VARCHAR}, #{email, jdbcType=VARCHAR})
    </insert>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
        delete from user
        where id = #{id, jdbcType=INTEGER}
    </delete>
    <update id="updateByPrimaryKeySelective" parameterType="com.example.model.User">
        update user
        <set>
            <if test="name != null">
                name = #{name, jdbcType=VARCHAR},
            </if>
            <if test="email != null">
                email = #{email, jdbcType=VARCHAR},
            </if>
        </set>
        where id = #{id, jdbcType=INTEGER}
    </update>
</mapper>
生成器的高级配置

自定义生成的代码模板

MyBatis Generator允许自定义生成的代码模板。你可以在generatorConfig.xml文件中配置模板文件路径。以下是一个配置示例:

<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java" fileEncoding="UTF-8">
    <property name="enableSubPackages" value="true"/>
    <property name="trimStrings" value="true"/>
    <property name="modelType" value="flat"/>
    <property name="templateLocation" value="src/main/resources/templates"/>
</javaModelGenerator>

将模板文件放置在src/main/resources/templates位置,并指定modelType属性为flat

配置DAO层的生成规则

MyBatis Generator允许自定义生成的DAO层规则。你可以在generatorConfig.xml文件中配置生成的DAO层规则。以下是一个配置示例:

<javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java">
    <property name="enableSubPackages" value="true"/>
    <property name="additionalProperties" value="beginningOfLineWithColon=true"/>
</javaClientGenerator>
实践案例及常见问题解答

生成器的典型应用场景

  1. 新项目初始化

    • 在新项目启动时,使用MyBatis Generator生成数据访问层的基本代码模板。例如,生成用户表的映射文件和模型类:
    <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
  2. 数据库表结构调整
    • 当数据库表结构发生变化时,可以使用MyBatis Generator重新生成更新后的映射文件和模型类。
  3. 代码维护
    • 在项目维护阶段,可以通过MyBatis Generator生成新的代码模板,减少手动编写代码的工作量。

常见问题及解决方法

  1. 生成器配置文件错误
    • 确保generatorConfig.xml文件配置正确,包括数据库连接信息、表名等。
  2. 生成代码不正确
    • 检查数据库表结构是否与配置文件中的表名一致。
  3. 生成代码不更新

    • 解决方法:清除生成代码缓存,重新运行生成器。例如:
    mvn mybatis-generator:generate
  4. 生成代码出现编译错误
    • 解决方法:检查生成的代码文件路径是否正确,IDE编译设置是否正确,确保生成的文件与项目结构一致。
这篇关于Mybatis官方生成器学习入门的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!