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

Mybatis官方生成器学习:初学者指南

标签:
Java SSM 数据库
概述

Mybatis官方生成器是一个强大的工具,可以根据数据库表结构自动生成Mybatis的映射文件和Java实体类,提高开发效率并减少错误。本文将详细介绍Mybatis官方生成器的安装、配置、基本使用以及常见问题的解决方案,帮助开发者更好地理解和使用该工具。Mybatis官方生成器学习涵盖了从环境准备到实战演练的全过程,确保开发者能够顺利上手。

Mybatis简介
Mybatis的基本概念

Mybatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以使用XML配置文件或注解来配置SQL映射文件。

Mybatis的核心接口是SqlSession,它提供了类似面向对象的数据库操作。SqlSession可以执行SELECTINSERTUPDATEDELETE语句,还可以执行自定义的SQL语句。

Mybatis的优势和应用场景

优势

  1. 灵活性:Mybatis允许在运行时动态地生成SQL,这样可以更好地适应数据库表结构的变化。
  2. 性能:Mybatis避免了JDBC中的许多预编译和设置参数的操作,因此可以提高性能。
  3. 可维护性:Mybatis的SQL语句和其他Java代码分离,使得SQL语句更容易被数据库专家理解和维护。
  4. 易于扩展:Mybatis提供了许多插件,可以方便地进行扩展。
  5. 支持高级映射:Mybatis支持复杂的关联查询、嵌套查询和动态SQL。

应用场景

  • 简单查询:例如查询特定用户的信息。
  • 复杂查询:例如查询多个表之间的关联信息。
  • 更新操作:例如更新用户的个人信息。
  • 批量操作:例如批量插入或删除数据。
Mybatis官方生成器概述
什么是Mybatis官方生成器

Mybatis官方生成器是Mybatis的一个插件,它可以根据数据库表结构自动生成Mybatis的映射文件(XML或注解)和Java实体类。

Mybatis官方生成器主要包括以下功能:

  1. 数据库逆向工程:根据数据库表结构生成Java实体类和映射文件。
  2. 自定义配置:用户可以自定义生成的代码结构和格式。
  3. 增量生成:支持增量生成代码,只更新数据库结构变化的部分。
为什么使用官方生成器

使用Mybatis官方生成器有以下几个优点:

  1. 提高开发效率:可以根据数据库表结构自动生成Java代码,减少开发人员的手动编写代码的工作量。
  2. 减少错误:通过自动化生成代码,减少了手动编写代码时可能引入的错误。
  3. 保持一致性:生成的代码格式保持一致,便于维护。
安装与配置Mybatis官方生成器
准备环境

使用Mybatis官方生成器需要先搭建好Mybatis环境,包括Java环境、IDE环境和数据库环境。

Java环境

确保Java开发环境已经配置好,可以使用java -version命令查看Java版本。

IDE环境

推荐使用IDEA或者Eclipse等IDE,确保Mybatis插件已经安装。

数据库环境

安装并配置好数据库,例如MySQL或Oracle等。

下载并导入生成器

Mybatis官方生成器可以作为Maven依赖引入,也可以直接下载jar包导入到项目中。

Maven依赖引入

pom.xml文件中添加以下依赖:

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

下载jar包

可以在Mybatis官方生成器的GitHub仓库下载jar包,然后手动导入到项目中。

配置生成器插件

创建一个名为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="MyBatis3Simple" defaultModelType="flat">
        <!-- 数据库连接信息 -->
        <jdbcConnection driverType="MySQL">
            <property name="connectionURL" value="jdbc:mysql://localhost:3306/mybatis"/>
            <property name="driverClass" value="com.mysql.jdbc.Driver"/>
            <property name="username" value="root"/>
            <property name="password" value="password"/>
        </jdbcConnection>

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

        <!-- 生成映射文件的包名 -->
        <sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/java"/>

        <!-- 生成DAO接口的包名 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>

        <!-- 扫描数据库中的表 -->
        <table tableName="my_table" domainObjectName="MyTable"/>
    </context>
</generatorConfiguration>
使用Mybatis官方生成器
生成器的基本使用

生成器的基本使用包含以下几个步骤:

  1. 配置生成器参数:在generatorConfig.xml文件中配置数据库连接信息、生成的Java类包名等。
  2. 执行生成器:通过命令行或IDE执行生成器。
  3. 查看生成的代码:生成器会根据配置生成Java实体类、映射文件和DAO接口。

配置生成器参数

上一节中已经介绍了如何配置生成器参数。这里是一个简单的示例:

<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <jdbcConnection driverType="MySQL">
            <property name="connectionURL" value="jdbc:mysql://localhost:3306/mybatis"/>
            <property name="driverClass" value="com.mysql.jdbc.Driver"/>
            <property name="username" value="root"/>
            <property name="password" value="password"/>
        </jdbcConnection>

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

        <table tableName="my_table" domainObjectName="MyTable"/>
    </context>
</generatorConfiguration>

执行生成器

使用命令行执行生成器:

mvn mybatis-generator:generate

或在IDE中执行生成器插件。

查看生成的代码

生成器会根据配置生成Java实体类、映射文件和DAO接口。例如:

// 生成的实体类
package com.example.model;

public class MyTable {
    private Integer id;
    private String name;

    // Getter and Setter
}
<!-- 生成的映射文件 -->
<?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.MyTableMapper">
    <resultMap id="BaseResultMap" type="com.example.model.MyTable">
        <id column="id" property="id" jdbcType="INTEGER"/>
        <result column="name" property="name" jdbcType="VARCHAR"/>
    </resultMap>

    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
        SELECT
            id,
            name
        FROM
            my_table
        WHERE
            id = #{id,jdbcType=INTEGER}
    </select>
</mapper>
// 生成的DAO接口
package com.example.mapper;

import com.example.model.MyTable;

public interface MyTableMapper {
    MyTable selectByPrimaryKey(Integer id);
}
生成器参数详解

以下是配置文件中常用的一些参数:

数据库连接信息

<jdbcConnection driverType="MySQL">
    <property name="connectionURL" value="jdbc:mysql://localhost:3306/mybatis"/>
    <property name="driverClass" value="com.mysql.jdbc.Driver"/>
    <property name="username" value="root"/>
    <property name="password" value="password"/>
</jdbcConnection>

Java模型生成器

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

SQL映射文件生成器

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

Java客户端生成器

<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java"/>

数据库表配置

<table tableName="my_table" domainObjectName="MyTable"/>
实战演练:生成器的实际应用
从数据库生成Java代码

假设有一个名为user的数据库表,表结构如下:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `password` varchar(50) NOT NULL,
  `email` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

配置生成器

generatorConfig.xml中配置生成器参数:

<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <jdbcConnection driverType="MySQL">
            <property name="connectionURL" value="jdbc:mysql://localhost:3306/mybatis"/>
            <property name="driverClass" value="com.mysql.jdbc.Driver"/>
            <property name="username" value="root"/>
            <property name="password" value="password"/>
        </jdbcConnection>

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

        <table tableName="user" domainObjectName="User"/>
    </context>
</generatorConfiguration>

执行生成器

使用命令行执行生成器:

mvn mybatis-generator:generate

或在IDE中执行生成器插件。

查看生成的代码

生成器会根据配置生成Java实体类、映射文件和DAO接口。例如:

// 生成的实体类
package com.example.model;

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

    // Getter and Setter
}
<!-- 生成的映射文件 -->
<?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="username" property="username" jdbcType="VARCHAR"/>
        <result column="password" property="password" jdbcType="VARCHAR"/>
        <result column="email" property="email" jdbcType="VARCHAR"/>
    </resultMap>

    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
        SELECT
            id,
            username,
            password,
            email
        FROM
            user
        WHERE
            id = #{id,jdbcType=INTEGER}
    </select>
</mapper>
// 生成的DAO接口
package com.example.mapper;

import com.example.model.User;

public interface UserMapper {
    User selectByPrimaryKey(Integer id);
}
自定义生成器配置

可以根据需要自定义生成器配置,例如修改生成的Java代码的格式、添加注释等。

自定义实体类生成器

<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java">
    <property name="enableSubPackages" value="true"/>
    <property name="trimStrings" value="true"/>
    <property name="immutable" value="false"/>
    <property name="immutableCollections" value="false"/>
</javaModelGenerator>

自定义映射文件生成器

<sqlMapGenerator targetPackage="com.example.mapper" targetProject="src/main/java">
    <property name="enableSubPackages" value="true"/>
    <property name="suppressAllComments" value="false"/>
</sqlMapGenerator>

自定义DAO接口生成器

<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java">
    <property name="enableSubPackages" value="true"/>
    <property name="suppressAllComments" value="true"/>
</javaClientGenerator>
常见问题及解决方案
常见错误及解决方法

依赖加载失败

如果在执行生成器时出现依赖加载失败的错误,检查pom.xml文件中是否有正确的依赖配置。例如:

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

数据库连接失败

如果生成器无法连接数据库,检查数据库连接信息是否正确,包括URL、用户名和密码。例如:

<jdbcConnection driverType="MySQL">
    <property name="connectionURL" value="jdbc:mysql://localhost:3306/mybatis"/>
    <property name="driverClass" value="com.mysql.jdbc.Driver"/>
    <property name="username" value="root"/>
    <property name="password" value="password"/>
</jdbcConnection>

生成的代码格式不正确

如果生成的代码格式不正确,可以修改生成器配置中的参数。例如,使用自定义实体类生成器和DAO接口生成器。例如:

<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java">
    <property name="enableSubPackages" value="true"/>
    <property name="trimStrings" value="true"/>
    <property name="immutable" value="false"/>
    <property name="immutableCollections" value="false"/>
</javaModelGenerator>

<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java">
    <property name="enableSubPackages" value="true"/>
    <property name="suppressAllComments" value="true"/>
</javaClientGenerator>
生成器优化技巧

使用增量生成

增量生成可以只更新数据库结构变化的部分,避免重新生成所有代码。在generatorConfig.xml中配置增量生成。

<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <commentGenerator>
            <property name="addRemarkComments" value="false"/>
        </commentGenerator>
        <jdbcConnection driverType="MySQL">
            <property name="connectionURL" value="jdbc:mysql://localhost:3306/mybatis"/>
            <property name="driverClass" value="com.mysql.jdbc.Driver"/>
            <property name="username" value="root"/>
            <property name="password" value="password"/>
        </jdbcConnection>

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

        <table tableName="user" domainObjectName="User"/>
    </context>
</generatorConfiguration>

自定义生成器配置

根据实际需求,自定义生成器配置,例如修改生成的代码的格式、添加注释等。例如:

<javaModelGenerator targetPackage="com.example.model" targetProject="src/main/java">
    <property name="enableSubPackages" value="true"/>
    <property name="trimStrings" value="true"/>
    <property name="immutable" value="false"/>
    <property name="immutableCollections" value="false"/>
</javaModelGenerator>

<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.mapper" targetProject="src/main/java">
    <property name="enableSubPackages" value="true"/>
    <property name="suppressAllComments" value="true"/>
</javaClientGenerator>

通过以上内容,您应该能够掌握Mybatis官方生成器的基本使用方法和常见问题的解决方案。如果有更多需求,可以参考Mybatis官方文档或慕课网等编程学习网站获取更多信息。

点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消