亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Mybatis代碼生成器教程:快速入門指南

標簽:
SSM
概述

本文介绍了Mybatis代码生成器的安装与配置,包括选择合适的代码生成器、编写配置文件、运行生成器等步骤,帮助开发者快速生成数据库访问层的代码,提高开发效率。此外,文章还详细讲解了如何动态配置生成规则和使用自定义模板生成代码,增强了代码生成的灵活性和扩展性。

Mybatis简介

Mybatis 是一个优秀的持久层框架,支持自定义 SQL 查询、存储过程以及多种数据库方言。通过 XML 或注解的方式,Mybatis 可以将 Java 方法和 SQL 语句映射起来,实现对数据库的查询、插入、更新和删除操作。

Mybatis的基本功能和特点

Mybatis 的主要功能包括:

  1. 持久化操作:通过 XML 或注解映射 Java 方法和 SQL 语句,实现数据库持久化操作。
  2. 自定义 SQL 查询:支持灵活编写 SQL 语句。
  3. 存储过程支持:支持调用存储过程。
  4. 数据库方言支持:支持多种数据库方言,自动处理不同数据库间的差异。
  5. 缓存机制:提供一级缓存和二级缓存,提高查询效率。
  6. 动态 SQL 支持:支持动态生成 SQL 语句,根据不同条件生成不同 SQL 语句。
  7. 插件机制:提供插件机制,方便扩展。
  8. 支持 Java API 和 XML 配置:通过 Java API 和 XML 文件进行配置,简化配置复杂度。

Mybatis的核心概念

  1. SqlSessionFactory:构建 SqlSession 的工厂,线程不安全。
  2. SqlSession:执行 SQL 语句的会话对象,线程不安全。
  3. Mapper 接口:用于编写 SQL 挡板,将 SQL 语句映射到 Java 方法上。
  4. Mapper XML 文件:编写 SQL 语句的地方,通过 XML 标签映射到 Java 方法上。

代码生成器简介

代码生成器是一种自动化工具,用于生成数据库访问层的代码,如 Mapper 接口、Mapper XML 文件、实体类等。这可以减少手动编写代码的工作量,提高开发效率。

代码生成器的作用

代码生成器的主要作用包括:

  1. 提高开发效率:快速生成数据库访问层代码,减少手动编写代码的工作量。
  2. 避免重复劳动:对于一些基础的数据库操作,如增删改查等,可以自动生成相关代码,避免重复劳动。
  3. 减少代码错误:生成的代码通常经过验证和测试,减少手动编写代码时可能引入的错误。

常见的代码生成器工具

常见的代码生成器工具包括:

  • Mybatis Generator:开源代码生成器,支持生成 Mapper 接口、Mapper XML 文件、实体类等。
  • Mybatis Plus:Mybatis 的增强工具,提供常用的 CRUD 操作,支持自动生成代码。
  • Lombok:代码生成器,自动生成常用的代码,如构造函数、getter 和 setter 方法等。
  • Jooq:生成器,可以生成 SQL 代码,提供多种数据库方言支持。

Mybatis代码生成器的选择

Mybatis 代码生成器可以根据不同的需求选择不同的工具。下面介绍一些常见的 Mybatis 代码生成器工具,并讨论如何选择合适的工具。

Mybatis代码生成器的分类

Mybatis 代码生成器主要分为以下几种类型:

  1. 基于 XML 的代码生成器:如 Mybatis Generator,可以通过 XML 配置文件进行配置。
  2. 基于注解的代码生成器:如 Mybatis Plus,可以通过注解的方式进行配置。
  3. 通用代码生成器:如 Lombok,可以生成 Java 代码中的常用代码片段。
  4. SQL 生成器:如 Jooq,可以生成 SQL 代码。

如何选择合适的Mybatis代码生成器

选择 Mybatis 代码生成器时,需要考虑以下几个因素:

  1. 需求分析:根据项目需求选择合适的代码生成器,如是否需要生成 Mapper 接口、Mapper XML 文件、实体类等。
  2. 使用场景:根据使用场景选择合适的代码生成器,如是否需要支持多种数据库方言。
  3. 社区支持:选择有活跃社区支持的代码生成器,可以方便地获取帮助和解决问题。
  4. 灵活性:选择灵活度高的代码生成器,可以方便地扩展和定制化。

例如,如果项目需要支持多种数据库方言,可以选择 Mybatis Generator 或 Jooq 这样的 SQL 生成器。如果项目需要生成 Mapper 接口、Mapper XML 文件等,可以选择 Mybatis Plus 或 Mybatis Generator 这样的代码生成器。

Mybatis代码生成器的安装与配置

在选择合适的 Mybatis 代码生成器后,可以进行安装与配置。以 Mybatis Generator 为例,介绍安装与配置步骤。

安装步骤

  1. 环境准备

    • 确保已经安装了 Java 开发环境。
    • 确保已经安装了 Maven 或 Gradle。
  2. 添加依赖
    在项目的 pom.xml 文件中添加 Mybatis Generator 依赖。

    <dependency>
       <groupId>org.mybatis.generator</groupId>
       <artifactId>mybatis-generator-core</artifactId>
       <version>1.3.7</version>
    </dependency>
  3. 编写配置文件
    编写 Mybatis Generator 的配置文件 generatorConfig.xml,配置生成规则。

    <generatorConfiguration>
       <context id="Default" targetRuntime="MyBatis3">
           <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                           connectionURL="jdbc:mysql://localhost:3306/mybatis_generator"
                           userId="root"
                           password="password"/>
           <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">
               <columnOverride column="id" javaType="Long"/>
           </table>
       </context>
    </generatorConfiguration>
  4. 运行生成器
    创建一个 Java 类来调用 Mybatis Generator 的生成方法。

    import org.mybatis.generator.api.MyBatisGenerator;
    import org.mybatis.generator.config.Configuration;
    import org.mybatis.generator.config.xml.ConfigurationParser;
    import org.mybatis.generator.exception.XMLParserException;
    import org.mybatis.generator.internal.DefaultShellCallback;
    
    import java.io.File;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    public class MybatisGeneratorRunner {
       public void run() throws Exception {
           List<String> warnings = new ArrayList<String>();
           boolean overwrite = true;
           File configFile = new File("src/main/resources/generator/generatorConfig.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);
       }
    }

配置生成规则

generatorConfig.xml 配置文件中,可以通过 <context> 标签配置生成规则。

  1. 数据库连接

    • driverClass:数据库驱动类。
    • connectionURL:数据库连接 URL。
    • userId:数据库用户名。
    • password:数据库密码。
  2. 生成 Java 模型

    • targetPackage:生成的 Java 类的包名。
    • targetProject:生成的 Java 类所在的项目路径。
  3. 生成 SQL 映射文件

    • targetPackage:生成的 SQL 映射文件的包名。
    • targetProject:生成的 SQL 映射文件所在的项目路径。
  4. 生成 Mapper 接口

    • type:生成方式,如 XMLMAPPER。
    • targetPackage:生成的 Mapper 接口的包名。
    • targetProject:生成的 Mapper 接口所在的项目路径。
  5. 指定表和列
    • tableName:要生成代码的表名。
    • columnOverride:覆盖某些列的 Java 类型。

使用Mybatis代码生成器生成代码

在配置完 Mybatis Generator 后,可以生成 Mapper 接口、Mapper XML 文件、实体类等。

生成Mapper接口

生成的 Mapper 接口代码示例如下:

package com.example.mapper;

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

public interface UserMapper {
    int insert(User record);

    int insertSelective(User record);

    User selectByPrimaryKey(Long id);

    int updateByPrimaryKey(User record);

    int updateByPrimaryKeySelective(User record);
}

生成Mapper XML文件

生成的 Mapper 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="BIGINT" javaType="java.lang.Long" property="id"/>
        <result column="name" jdbcType="VARCHAR" javaType="java.lang.String" property="name"/>
        <result column="age" jdbcType="INTEGER" javaType="java.lang.Integer" property="age"/>
    </resultMap>

    <sql id="Base_Column_List">
        id, name, age
    </sql>

    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long">
        SELECT
        <include refid="Base_Column_List"/>
        FROM
        user
        WHERE
        id = #{id,jdbcType=BIGINT}
    </select>

    <insert id="insert" parameterType="com.example.model.User">
        INSERT INTO
        user
        (name, age)
        VALUES
        (#{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER})
    </insert>

    <insert id="insertSelective" parameterType="com.example.model.User">
        INSERT INTO
        user
        (id, name, age)
        VALUES
        #{id,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER}
    </insert>

    <update id="updateByPrimaryKeySelective" parameterType="com.example.model.User">
        UPDATE
        user
        SET
        name = #{name,jdbcType=VARCHAR},
        age = #{age,jdbcType=INTEGER}
        WHERE
        id = #{id,jdbcType=BIGINT}
    </update>

    <update id="updateByPrimaryKey" parameterType="com.example.model.User">
        UPDATE
        user
        SET
        name = #{name,jdbcType=VARCHAR},
        age = #{age,jdbcType=INTEGER}
        WHERE
        id = #{id,jdbcType=BIGINT}
    </update>
</mapper>

生成实体类

生成的实体类代码示例如下:

package com.example.model;

public class User {
    private Long id;
    private String name;
    private Integer age;

    // Getter and Setter methods
    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

Mybatis代码生成器的高级用法

Mybatis 代码生成器支持动态配置生成规则和自定义模板生成代码。

动态配置生成规则

可以通过 Java 代码动态配置生成规则,如改变生成的包名、生成的文件路径等。

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.Context;
import org.mybatis.generator.config.ConnectionConfiguration;
import org.mybatis.generator.config.JDBCConnectionConfiguration;
import org.mybatis.generator.config.PluginConfiguration;
import org.mybatis.generator.config.SqlMapGeneratorConfiguration;
import org.mybatis.generator.config.TableConfiguration;
import org.mybatis.generator.config.java.JavaClientGeneratorConfiguration;
import org.mybatis.generator.config.java.JavaModelGeneratorConfiguration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class DynamicGeneratorRunner {
    public void run() throws Exception {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        File configFile = new File("src/main/resources/generator/generatorConfig.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);

        Context context = config.getContexts().get(0);
        context.setTargetRuntime("MyBatis3");

        ConnectionConfiguration connectionConfig = context.getConnectionConfiguration();
        connectionConfig.setDriverClass("com.mysql.jdbc.Driver");
        connectionConfig.setConnectionURL("jdbc:mysql://localhost:3306/mybatis_generator");
        connectionConfig.setUserId("root");
        connectionConfig.setPassword("password");

        JavaModelGeneratorConfiguration javaModelConfig = context.getJavaModelGeneratorConfiguration();
        javaModelConfig.setTargetPackage("com.example.dynamic.model");
        javaModelConfig.setTargetProject("src/main/java");

        SqlMapGeneratorConfiguration sqlMapConfig = context.getSqlMapGeneratorConfiguration();
        sqlMapConfig.setTargetPackage("com.example.dynamic.mapper");
        sqlMapConfig.setTargetProject("src/main/resources");

        JavaClientGeneratorConfiguration javaClientConfig = context.getJavaClientGeneratorConfiguration();
        javaClientConfig.setTargetPackage("com.example.dynamic.mapper");
        javaClientConfig.setTargetProject("src/main/java");

        TableConfiguration tableConfig = context.getTableConfigurations().get(0);
        tableConfig.setTableName("user");

        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
    }
}

自定义模板生成代码

可以通过自定义模板来自定义生成的代码,如改变生成的 SQL 语句格式等。

  1. 添加模板文件
    在项目的 src/main/resources/templates 目录下添加自定义的 SQL 映射文件模板。

    <?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="${basePackage}.${mapper}">
       <resultMap id="BaseResultMap" type="${basePackage}.${model}">
           <id column="id" jdbcType="BIGINT" javaType="java.lang.Long" property="id"/>
           <result column="name" jdbcType="VARCHAR" javaType="java.lang.String" property="name"/>
           <result column="age" jdbcType="INTEGER" javaType="java.lang.Integer" property="age"/>
       </resultMap>
    
       <sql id="Base_Column_List">
           id, name, age
       </sql>
    
       <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long">
           SELECT
           <include refid="Base_Column_List"/>
           FROM
           ${table}
           WHERE
           id = #{id,jdbcType=BIGINT}
       </select>
    
       <insert id="insert" parameterType="${basePackage}.${model}">
           INSERT INTO
           ${table}
           (name, age)
           VALUES
           (#{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER})
       </insert>
    
       <insert id="insertSelective" parameterType="${basePackage}.${model}">
           INSERT INTO
           ${table}
           (id, name, age)
           VALUES
           #{id,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER}
       </insert>
    
       <update id="updateByPrimaryKeySelective" parameterType="${basePackage}.${model}">
           UPDATE
           ${table}
           SET
           name = #{name,jdbcType=VARCHAR},
           age = #{age,jdbcType=INTEGER}
           WHERE
           id = #{id,jdbcType=BIGINT}
       </update>
    
       <update id="updateByPrimaryKey" parameterType="${basePackage}.${model}">
           UPDATE
           ${table}
           SET
           name = #{name,jdbcType=VARCHAR},
           age = #{age,jdbcType=INTEGER}
           WHERE
           id = #{id,jdbcType=BIGINT}
       </update>
    </mapper>
  2. 配置模板文件
    generatorConfig.xml 配置文件中,配置使用自定义模板。

    <generatorConfiguration>
       <context id="Default" targetRuntime="MyBatis3">
           <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                           connectionURL="jdbc:mysql://localhost:3306/mybatis_generator"
                           userId="root"
                           password="password"/>
           <javaModelGenerator targetPackage="com.example.dynamic.model"
                               targetProject="src/main/java"/>
           <sqlMapGenerator targetPackage="com.example.dynamic.mapper"
                            targetProject="src/main/resources"
                            templateLocation="templates/UserMapperTemplate.xml"/>
           <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.dynamic.mapper"
                                targetProject="src/main/java"/>
           <table tableName="user">
               <columnOverride column="id" javaType="Long"/>
           </table>
       </context>
    </generatorConfiguration>

通过以上步骤,可以灵活地动态配置生成规则和自定义生成代码的模板,提高 Mybatis 代码生成器的灵活性和扩展性。

实际项目应用案例

假设有一个在线商城项目,需要生成用户表的 Mapper 接口、Mapper XML 文件和实体类。以下是具体配置和步骤:

  1. 环境准备

    • 确保已经安装了 Java 开发环境。
    • 确保已经安装了 Maven 或 Gradle。
  2. 添加依赖
    在项目的 pom.xml 文件中添加 Mybatis Generator 依赖。

    <dependency>
       <groupId>org.mybatis.generator</groupId>
       <artifactId>mybatis-generator-core</artifactId>
       <version>1.3.7</version>
    </dependency>
  3. 编写配置文件
    编写 Mybatis Generator 的配置文件 generatorConfig.xml,配置生成规则。

    <generatorConfiguration>
       <context id="Default" targetRuntime="MyBatis3">
           <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                           connectionURL="jdbc:mysql://localhost:3306/onlineshop"
                           userId="root"
                           password="password"/>
           <javaModelGenerator targetPackage="com.onlineshop.model"
                               targetProject="src/main/java"/>
           <sqlMapGenerator targetPackage="com.onlineshop.mapper"
                            targetProject="src/main/resources"/>
           <javaClientGenerator type="XMLMAPPER" targetPackage="com.onlineshop.mapper"
                                targetProject="src/main/java"/>
           <table tableName="user">
               <columnOverride column="id" javaType="Long"/>
           </table>
       </context>
    </generatorConfiguration>
  4. 运行生成器
    创建一个 Java 类来调用 Mybatis Generator 的生成方法。

    import org.mybatis.generator.api.MyBatisGenerator;
    import org.mybatis.generator.config.Configuration;
    import org.mybatis.generator.config.xml.ConfigurationParser;
    import org.mybatis.generator.exception.XMLParserException;
    import org.mybatis.generator.internal.DefaultShellCallback;
    
    import java.io.File;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    public class MybatisGeneratorRunner {
       public void run() throws Exception {
           List<String> warnings = new ArrayList<String>();
           boolean overwrite = true;
           File configFile = new File("src/main/resources/generator/generatorConfig.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);
       }
    }

通过以上步骤,可以在实际项目中快速生成用户表的数据库访问层代码,提高开发效率并减少手动编写代码的工作量。

點擊查看更多內容
TA 點贊

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

評論

作者其他優質文章

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

100積分直接送

付費專欄免費學

大額優惠券免費領

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

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消