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

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

Mybatis官方生成器入門教程

標簽:
SSM
概述

Mybatis官方生成器(MBG)是MyBatis提供的一个强大的工具,用于自动生成MyBatis的映射文件、Java Bean和DAO接口。通过减少冗余代码和提高开发效率,MBG广泛应用于新项目启动、代码重构和维护扩展等多种场景。

Mybatis官方生成器简介
Mybatis官方生成器的定义

MyBatis Generator(MBG)是MyBatis提供的一个工具,用于自动生成MyBatis的映射文件(Mapper.xmlMapper.java)、Java Bean(实体类)和DAO接口。MBG可以显著减少开发人员编写重复代码的工作量,提高开发效率。

MBG的工作原理是通过解析数据库表结构(包括表名、字段名等信息),根据用户定义的模板生成所需的映射文件、实体类和接口。生成的代码遵循一定的规则和命名约定,便于快速集成和维护。

Mybatis官方生成器的优势
  1. 减少冗余代码:通过自动化的代码生成,开发人员不再需要手动编写大量的重复代码,如SQL映射文件、实体类和接口等。

  2. 提高开发效率:MBG可以在短时间内生成大量的代码,节省开发时间,特别是在项目初期或者需要快速迭代开发时尤为明显。

  3. 一致的编码标准:通过MBG生成的代码,可以保证代码风格和命名规则的一致性,便于团队开发和维护。

  4. 灵活的配置选项:MBG提供了丰富的配置选项,用户可以根据具体需求定制生成代码的细节,如表名转换规则、字段名转换规则、注释信息等。
Mybatis官方生成器的应用场景
  1. 新项目启动:对于新的项目,特别是那些数据模型比较复杂、数据表较多的项目,MBG可以快速生成基础的代码框架,从而加速项目启动。

  2. 代码重构:在现有的项目中,如果数据模型发生了变化(如新增了表、字段等),可以利用MBG重新生成一部分代码,从而避免手动修改大量代码。

  3. 维护和扩展:对于已经使用MyBatis的项目,如果需要维护或者扩展数据库操作,MBG可以生成新的代码,帮助开发者更快地完成开发任务。
Mybatis官方生成器的安装与配置
安装步骤详解
  1. 下载MBG:可以到MyBatis Generator的GitHub页面下载最新版本的MBG,或者使用Maven引入MBG的依赖。

    <dependency>
       <groupId>org.mybatis.generator</groupId>
       <artifactId>mybatis-generator-core</artifactId>
       <version>1.3.7</version>
    </dependency>
  2. 配置文件准备:MBG需要一个配置文件,该文件定义了如何生成代码以及生成哪些代码。配置文件通常是一个XML文件,例如generatorConfig.xml

    <generatorConfiguration>
       <context id="DB2Tables" targetRuntime="MyBatis3">
           <commentGenerator>
               <property name="suppressDate" value="true"/>
           </commentGenerator>
           <classPathEntry location="lib/mysql-connector-java-8.0.22.jar"/>
           <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                           connectionURL="jdbc:mysql://localhost:3306/mydatabase"
                           userId="root"
                           password="password"/>
           <javaTypeResolver>
               <property name="unambiguousTypeOverrides" 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.mappers"
                            targetProject="src/main/resources">
           </sqlMapGenerator>
           <javaClientGenerator type="SqlMapClient" targetPackage="com.example.mapper"
                                targetProject="src/main/java">
           </javaClientGenerator>
       </context>
    </generatorConfiguration>
  3. 运行MBG:通过命令行工具或者Maven插件运行MBG。

    mvn mybatis-generator:generate

    或者在命令行中直接执行生成命令:

    java -jar mybatis-generator-core-1.3.7.jar -configfile generatorConfig.xml -overwrite
配置文件详解

配置文件generatorConfig.xml是MBG的核心配置文件,它定义了MBG如何生成代码。以下是配置文件的主要元素及其功能:

  1. context:定义了生成器的上下文环境。每个上下文可以定义一个或多个目标数据库,一个或多个目标包路径等。

    <context id="DB2Tables" targetRuntime="MyBatis3">
    • id:上下文的唯一标识符,用于区分多个上下文。
    • targetRuntime:生成代码的目标运行时环境,如MyBatis3、MyBatis3Simple等。
  2. commentGenerator:配置生成的代码中的注释信息。

    <commentGenerator>
       <property name="suppressDate" value="true"/>
    </commentGenerator>
    • suppressDate:是否在生成代码中添加日期注释。
  3. classPathEntry:配置依赖的JDBC驱动类路径。

    <classPathEntry location="lib/mysql-connector-java-8.0.22.jar"/>
  4. jdbcConnection:配置数据库连接信息。

    <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                   connectionURL="jdbc:mysql://localhost:3306/mydatabase"
                   userId="root"
                   password="password"/>
    • driverClass:数据库驱动类。
    • connectionURL:数据库连接URL。
    • userId:数据库用户名。
    • password:数据库密码。
  5. javaTypeResolver:配置Java类型解析器。

    <javaTypeResolver>
       <property name="unambiguousTypeOverrides" value="true"/>
    </javaTypeResolver>
  6. javaModelGenerator:配置实体类生成器。

    <javaModelGenerator targetPackage="com.example.model"
                       targetProject="src/main/java">
       <property name="enableSubPackages" value="true"/>
       <property name="trimStrings" value="true"/>
    </javaModelGenerator>
    • targetPackage:实体类的包名。
    • targetProject:存放生成的Java代码的项目路径。
    • enableSubPackages:是否启用子包,根据数据库表名生成子包。
    • trimStrings:生成的实体类中字段是否使用trim(String)函数来去除字符串前后的空格。
  7. sqlMapGenerator:配置SQL映射文件生成器。

    <sqlMapGenerator targetPackage="com.example.mappers"
                    targetProject="src/main/resources">
    </sqlMapGenerator>
    • targetPackage:SQL映射文件的包名。
    • targetProject:存放生成的SQL映射文件的项目路径。
  8. javaClientGenerator:配置DAO接口生成器。

    <javaClientGenerator type="SqlMapClient" targetPackage="com.example.mapper"
                        targetProject="src/main/java">
    </javaClientGenerator>
    • type:生成的DAO接口类型,如SqlMapClientAnnotation等。
    • targetPackage:DAO接口的包名。
    • targetProject:存放生成的DAO接口的项目路径。
Mybatis官方生成器基本使用方法
生成Mapper接口

Mapper接口是MyBatis中用于定义数据库访问操作的一种方式。通过MBG,可以自动生成这些接口。

<javaClientGenerator type="XmlMapper" targetPackage="com.example.mapper"
                      targetProject="path/to/project">
    <property name="enableSubPackages" value="true"/>
</javaClientGenerator>

该配置生成一个Mapper接口,例如:

package com.example.mapper;

public interface UserMapper {
    int insert(User record);

    int insertSelective(User record);

    List<User> selectAll();

    int updateByPrimaryKey(User record);

    int updateByPrimaryKeySelective(User record);
}
生成SQL映射文件

SQL映射文件是MyBatis用来定义SQL语句和结果集映射的地方。通过MBG,可以自动生成这些文件。

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

该配置生成一个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="com.example.mapper.UserMapper">
    <resultMap id="BaseResultMap" type="com.example.model.User">
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="name" property="name" jdbcType="VARCHAR" />
        <result column="email" property="email" jdbcType="VARCHAR" />
    </resultMap>
    <insert id="insert" parameterType="com.example.model.User">
        insert into user (id, name, email)
        values (#{id}, #{name}, #{email})
    </insert>
    <select id="selectAll" resultMap="BaseResultMap">
        select id, name, email from user
    </select>
    <update id="updateByPrimaryKey" parameterType="com.example.model.User">
        update user set name = #{name}, email = #{email} where id = #{id}
    </update>
</mapper>
生成实体类

实体类是Java对象,用于表示数据库中的表。通过MBG,可以自动生成这些类。

<javaModelGenerator targetPackage="com.example.model"
                    targetProject="path/to/project">
    <property name="enableSubPackages" value="true"/>
    <property name="trimStrings" value="true"/>
</javaModelGenerator>

该配置生成一个Java实体类,例如:

package com.example.model;

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

    // Getter and Setter methods
    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;
    }
}
Mybatis官方生成器的高级用法
自定义生成规则

MBG允许用户通过配置文件自定义生成代码的规则。例如,可以自定义实体类的属性命名规则、字段名转换规则等。

<javaModelGenerator targetPackage="com.example.model"
                    targetProject="path/to/project">
    <property name="enableSubPackages" value="true"/>
    <property name="trimStrings" value="true"/>
    <property name="baseRecordType" value="BaseRecord"/>
    <property name="baseResultMap" value="BaseResultMap"/>
    <property name="modelPackage" value="model"/>
</javaModelGenerator>

通过这些配置,用户可以自定义生成代码的细节,使其更符合项目的需求。

插件扩展

MBG支持插件扩展,允许用户通过编写插件来扩展MBG的功能。插件可以通过实现org.mybatis.generator.plugin.PluginAdapter接口来完成。

public class CustomPlugin extends PluginAdapter {
    @Override
    public boolean validate(List<String> warnings) {
        // Validation logic
        return true;
    }

    @Override
    public boolean sqlMapGenerated(Interface interfaze, IntrospectedTable introspectedTable) {
        // Custom SQL map generation logic
        return true;
    }

    @Override
    public boolean javaModelGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
        // Custom Java model generation logic
        return true;
    }
}

通过插件,可以灵活地扩展MBG的功能,满足更多复杂的需求。

Mybatis官方生成器常见问题解答
常见错误及解决方法
  1. 配置文件解析错误:如果生成器无法正确解析配置文件,通常是因为配置文件有语法错误或者路径配置不正确。

    • 解决方法:检查配置文件的语法是否正确,确保路径配置正确。
  2. 数据库连接失败:如果生成器无法连接到数据库,通常是因为数据库连接信息配置错误或者数据库服务未启动。

    • 解决方法:检查数据库连接URL、用户名和密码是否正确,确保数据库服务已启动并运行正常。
  3. 生成代码错误:如果生成的代码有逻辑错误或者不符合预期,通常是因为配置文件中的选项配置不正确。

    • 解决方法:检查配置文件中的选项配置是否正确,确保生成器能够正确理解用户的意图。
  4. 生成代码路径错误:如果生成的代码没有被放置在预期的路径下,通常是因为生成器配置中的路径设置错误。

    • 解决方法:检查配置文件中的路径设置,确保生成的代码被放置在正确的路径下。
  5. 生成代码重复:如果生成的代码被重复生成,通常是因为生成器配置中的重复生成设置或重复执行生成操作。

    • 解决方法:检查配置文件中的生成设置,确保生成器不会重复生成代码。
常见疑问及解决方案
  1. 如何防止生成的代码被IDE自动格式化?

    • 解决方案:在生成器配置文件中,可以通过<property name="enableSubPackages" value="true"/>等属性配置来控制生成的代码格式。此外,可以在IDE中设置代码保存时的格式化规则。
  2. 如何处理生成的代码中的注释信息?

    • 解决方案:在配置文件的<commentGenerator>标签中,可以通过设置suppressDate等属性来控制生成代码中的注释信息。
  3. 生成的代码如何与现有代码集成?

    • 解决方案:将生成的代码放置在与现有代码一致的包路径下,并确保生成的代码和现有代码之间没有命名冲突。如果需要,可以手动修改生成的代码以适应现有代码的结构。
  4. 如何自定义生成代码的命名规则?

    • 解决方案:在配置文件中,可以通过设置baseRecordTypebaseResultMap等属性来自定义生成代码的命名规则。
  5. 如何防止生成的代码被覆盖?

    • 解决方案:在运行生成器时,可以通过命令行参数设置-overwrite选项来控制是否覆盖已生成的代码。如果不希望覆盖已有的代码,可以去掉-overwrite选项。
Mybatis官方生成器实战案例
实战案例详解

本节通过一个具体的案例来展示如何使用MBG生成MyBatis所需的代码。假设我们有一个数据库表user,并且想要生成相关的Mapper接口、SQL映射文件和实体类。

数据库表结构

CREATE TABLE `user` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL,
  `email` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

配置文件

<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
        </commentGenerator>
        <classPathEntry location="lib/mysql-connector-java-8.0.22.jar"/>
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mydatabase"
                        userId="root"
                        password="password"/>
        <javaTypeResolver>
            <property name="unambiguousTypeOverrides" 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.mappers"
                         targetProject="src/main/resources">
        </sqlMapGenerator>
        <javaClientGenerator type="XmlMapper" targetPackage="com.example.mapper"
                             targetProject="src/main/java">
        </javaClientGenerator>
    </context>
</generatorConfiguration>

生成代码

运行生成器:

mvn mybatis-generator:generate

或者在命令行中直接执行:

java -jar mybatis-generator-core-1.3.7.jar -configfile generatorConfig.xml -overwrite

生成结果

  1. Mapper接口

    package com.example.mapper;
    
    import java.util.List;
    import com.example.model.User;
    
    public interface UserMapper {
       int insert(User record);
    
       int insertSelective(User record);
    
       List<User> selectAll();
    
       int updateByPrimaryKey(User record);
    
       int updateByPrimaryKeySelective(User record);
    }
  2. 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="com.example.mapper.UserMapper">
       <resultMap id="BaseResultMap" type="com.example.model.User">
           <id column="id" property="id" jdbcType="INTEGER" />
           <result column="name" property="name" jdbcType="VARCHAR" />
           <result column="email" property="email" jdbcType="VARCHAR" />
       </resultMap>
       <insert id="insert" parameterType="com.example.model.User">
           insert into user (id, name, email)
           values (#{id}, #{name}, #{email})
       </insert>
       <select id="selectAll" resultMap="BaseResultMap">
           select id, name, email from user
       </select>
       <update id="updateByPrimaryKey" parameterType="com.example.model.User">
           update user set name = #{name}, email = #{email} where id = #{id}
       </update>
    </mapper>
  3. 实体类

    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;
       }
    }
实战心得分享

通过使用MBG,我们可以快速生成MyBatis所需的代码,大大减少了开发人员编写重复代码的工作量,提高了开发效率。生成的代码遵循一定的规则和命名约定,便于快速集成和维护。此外,MBG还支持自定义生成规则和插件扩展,使得生成的代码能够更符合项目的需求。

在实际项目中,建议仔细阅读和理解MBG的配置文件,以确保生成的代码能够满足项目的需求。同时,通过编写插件来扩展MBG的功能,可以使生成器更加灵活和强大。

如果在使用过程中遇到任何问题,可以通过查阅官方文档或者社区支持来解决。此外,还可以参考一些开源项目,学习其他开发者是如何使用MBG的。通过不断实践和积累经验,可以更好地利用MBG来提高开发效率。

點擊查看更多內容
TA 點贊

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

評論

作者其他優質文章

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

100積分直接送

付費專欄免費學

大額優惠券免費領

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

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

幫助反饋 APP下載

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

公眾號

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

舉報

0/150
提交
取消