专栏首页技术进阶之路Mybatis-Generator 代码生成器的使用

Mybatis-Generator 代码生成器的使用

Mybatis 官方为我们提供了持久层代码的代码生成器,可以生成 mapper.xmlMapper 接口和实体类。

环境搭建

新建一个 SpringBoot 工程。

pom.xml

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${mysql.version}</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>${druid.version}</version>
</dependency>

设置 maven 插件

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.4.0</version>
            <configuration>
                <configurationFile>src/main/resources/generator/generatorConfig.xml</configurationFile>
                <overwrite>true</overwrite>
                <verbose>true</verbose>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>8.0.18</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

src/main/resources/generator/ 新建一个:

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="Mysql" targetRuntime="MyBatis3" defaultModelType="flat">

        <property name="autoDelimitKeywords" value="true"/>

        <!--    反引号:如果表名或字段名是 MySQL 的关键字就自动加上反引号    -->
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>

        <!-- 覆盖生成XML文件 -->
        <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />

        <!-- 生成的实体类添加 toString() 方法 -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin" />

        <!-- 不生成注释: 因为注释是英文 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

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

        <!-- domain类的位置 -->
        <javaModelGenerator targetProject="src\main\java"
                            targetPackage="com.lsu.server.domain"/>

        <!-- mapper xml的位置 -->
        <sqlMapGenerator targetProject="src\main\resources"
                         targetPackage="mapper"/>

        <!-- mapper类的位置 -->
        <javaClientGenerator targetProject="src\main\java"
                             targetPackage="com.lsu.server.mapper"
                             type="XMLMAPPER" />

<!--        <table tableName="test" domainObjectName="Test"/>-->
<!--        <table tableName="chapter" domainObjectName="Chapter"/>-->
        <table tableName="section" domainObjectName="Section"/>
<!--        <table tableName="course" domainObjectName="Course"/>-->
<!--        <table tableName="course_content" domainObjectName="CourseContent"/>-->
<!--        <table tableName="course_content_file" domainObjectName="CourseContentFile"/>-->
<!--        <table tableName="teacher" domainObjectName="Teacher"/>-->
<!--        <table tableName="file" domainObjectName="File"/>-->
<!--        <table tableName="user" domainObjectName="User"/>-->
<!--        <table tableName="resource" domainObjectName="Resource"/>-->
<!--        <table tableName="role" domainObjectName="Role"/>-->
<!--        <table tableName="role_resource" domainObjectName="RoleResource"/>-->
<!--        <table tableName="role_user" domainObjectName="RoleUser"/>-->
<!--        <table tableName="member" domainObjectName="Member"/>-->
<!--        <table tableName="sms" domainObjectName="Sms"/>-->
<!--        <table tableName="member_course" domainObjectName="MemberCourse"/>-->
    </context>
<!--    mybatis-generator:generate -e 生成代码命令-->
</generatorConfiguration>

在标签 jdbcConnection 中设置必要的连接值,其余标签注释均有详细的介绍。

table 里的属性表示要生成的表名,这里设置了很多,需要生成哪一个表打开对应的注释即可。

生成文件

输入以下命令执行任务:

mybatis-generator:generate -e

IDEA 中可以设置快捷方式:

会生成 4 个文件:

  • SectionMapper.xml
  • SectionMapper
  • Section
  • SectionExample

3 个文件就是我们平常自己写的文件,主要看一下最后一个 SectionExample

该类提供了很多方法,可以帮我们完成复杂查询,下面以一个例子说明:

UserExample example = new UserExample();
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo("wyw");
criteria.andUsernameIsNull();
example.setOrderByClause("username asc,email desc");
List<?>list = XxxMapper.selectByExample(example);
//相当于:select * from user where username = 'wyw' and  username is null order by username asc,email desc

UserExample example = new UserExample();
example.or().andxxxx();

可以翻阅文档查看更多使用说明:https://mybatis.org/generator/generatedobjects/exampleClassUsage.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • IP 数据报格式详解

    ❔ 给出一数据报的总长度为 3820 字节,其数据部分的长度为 3800 字节(使用固定首部),需要分片为长度不超过 1420 字节的数据报片。

    wsuo
  • IDEA 连接数据库

    然后输入用户名和密码(密码是隐藏的),然后点击 Test Connection :

    wsuo
  • 微服务配置 Config 与消息总线

    启动之后访问 http://localhost:3344/master/config-dev.yml 查看打印出来的信息:

    wsuo
  • PHP二分查找

    这是属于查找类型的题目,因为数组是一个升序排列的整数叔组所以很容易想到使用二分查找这种思想来实现 O(log n) 级别的效率获取答案结果。代码如下

    大眼瞪小眼
  • nginx请求连接限制笔记

    当时爬取时当并发过大的时候,请求就会出现卡死的情况。其实这可能就是珍爱网对请求和连接进行了限制。

    我的小碗汤
  • Android资源混淆打包方案

    概述 我们知道在Android的打包过程中,有一个步骤是压缩,也是为了减少apk包的大小,其中在压缩的过程中,很大一部分就是对资源的压缩,除了系统的压缩方案之外...

    xiangzhihong
  • Android资源混淆打包方案

    概述 我们知道在Android的打包过程中,有一个步骤是压缩,也是为了减少apk包的大小,其中在压缩的过程中,很大一部分就是对资源的压缩,除了系统的压缩方案之外...

    xiangzhihong
  • (代码篇)从基础文件IO说起虚拟内存,内存文件映射,零拷贝

    JAVA虚拟机内部便会调用OS底层的 read()系统调用完成操作,在调用 in.read()的时候就是从内核缓冲区直接返回数据了。

    intsmaze-刘洋
  • 如何更早地体验到Excel的最新功能?

    最近看到Microsoft新推出的XLOOKUP函数被炒得火热,禁不住好奇心,也想体验一下,但怎么也找不到!虽然我装的是Office 365。怎么办呢?捣鼓了半...

    fanjy
  • Java入门系列-04-java中的变量

    内存像旅馆一样,不同的房间类型对应不同的数据类型,内存存储数据时会根据数据的需求为它申请一块合适的空间。用于存储数据的这个空间就是变量。

    享智同行

扫码关注云+社区

领取腾讯云代金券