搞懂Mybatis逆向⼯程这一篇就够了

2023-11-02

使用基础版本

前置准备

项目结构

创建一个空的模块,此时java目录里面没有代码,mapper映射文件也没有。
在这里插入图片描述

导入依赖

在pom中添加逆向⼯程插件

<!--定制构建过程-->
<build>
 <!--可配置多个插件-->
 <plugins>
 <!--mybatis逆向⼯程插件-->
 <plugin>
 <!--插件的GAV坐标-->
 <groupId>org.mybatis.generator</groupId>
 <artifactId>mybatis-generator-maven-plugin</artifactId>
 <version>1.4.1</version>
 <!--允许覆盖-->
 <!--如果存在pojo实体类使用逆向工程时候,是清空然后在写入,如果不覆盖可能是追加的模式,会出错-->
 <configuration>
 <overwrite>true</overwrite>
 </configuration>
 <!--插件的依赖-->
 <dependencies>
 <!--mysql驱动依赖-->
 <dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>8.0.30</version>
 </dependency>
 </dependencies>
 </plugin>
 </plugins>
</build>

GAV坐标是指在软件开发中常用的一种标识方式,用于唯一确定一个软件插件或库。它由三个部分组成:Group ID(组织ID)、Artifact ID(项目ID)和Version(版本号),因此又称为GAV坐标。

  • Group ID(组织ID):代表开发插件或库的组织或团队的唯一标识符。
  • Artifact ID(项目ID):代表插件或库的名称或项目的唯一标识符。
  • Version(版本号):代表插件或库的特定版本。

配置generatorConfig.xml

该⽂件名必须叫做: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>
    <!--
    targetRuntime有两个值:
    MyBatis3Simple:⽣成的是基础版,只有基本的增删改查。
    MyBatis3:⽣成的是增强版,除了基本的增删改查之外还有复杂的增删改查。
    -->
    <context id="DB2Tables" targetRuntime="MyBatis3Simple">
        <!--防⽌⽣成重复代码-->
        <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>

        <commentGenerator>
            <!--是否去掉⽣成⽇期-->
            <property name="suppressDate" value="true"/>
            <!--是否去除注释-->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--连接数据库信息-->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/hqyj03"
                        userId="root"
                        password="yjg">
        </jdbcConnection>
        <!-- ⽣成pojo包名和位置 -->
        <javaModelGenerator targetPackage="com.yjg.mybatis.pojo" targetProject="src/main/java">
            <!--是否开启⼦包-->
<!--如果为false会把com.yjg.mybatis.pojo当成一个目录造出来-->
            <property name="enableSubPackages" value="true"/>
            <!--是否去除字段名的前后空⽩-->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- ⽣成SQL映射⽂件的包名和位置 -->
        <sqlMapGenerator targetPackage="com.yjg.mybatis.mapper" targetProject="src/main/resources">
            <!--是否开启⼦包-->
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- ⽣成Mapper接⼝的包名和位置 -->
        <javaClientGenerator
                type="xmlMapper"
                targetPackage="com.yjg.mybatis.mapper"
                targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!-- 表名和对应的实体类名-->
        <table tableName="user" domainObjectName="User"/>
    </context>
</generatorConfiguration>

数据库表

CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

使用逆向工程

点击插件使用

在这里插入图片描述

双击之后效果

双击之后就会出现,对应得实体类和mapper映射文件。
在这里插入图片描述

UserMapper.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.yjg.mybatis.mapper.UserMapper">
  <resultMap id="BaseResultMap" type="com.yjg.mybatis.pojo.User">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="username" jdbcType="VARCHAR" property="username" />
    <result column="password" jdbcType="VARCHAR" property="password" />
  </resultMap>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
    delete from user
    where id = #{id,jdbcType=INTEGER}
  </delete>
  <insert id="insert" parameterType="com.yjg.mybatis.pojo.User">
    insert into user (id, username, password
      )
    values (#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}
      )
  </insert>
  <update id="updateByPrimaryKey" parameterType="com.yjg.mybatis.pojo.User">
    update user
    set username = #{username,jdbcType=VARCHAR},
      password = #{password,jdbcType=VARCHAR}
    where id = #{id,jdbcType=INTEGER}
  </update>
  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    select id, username, password
    from user
    where id = #{id,jdbcType=INTEGER}
  </select>
  <select id="selectAll" resultMap="BaseResultMap">
    select id, username, password
    from user
  </select>
</mapper>

UserMapper接口的内容

package com.yjg.mybatis.mapper;
import com.yjg.mybatis.pojo.User;
import java.util.List;
public interface UserMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(User row);

    User selectByPrimaryKey(Integer id);

    List<User> selectAll();

    int updateByPrimaryKey(User row);
}

测试逆向工程

使用接口里面的方法看是否能够成功操作数据库

测试一

@Test
public void test01() throws Exception{
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis.xml"));
    SqlSession sqlSession = sqlSessionFactory.openSession();


    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    List<User> users = userMapper.selectAll();
    users.forEach(user -> System.out.println(user));
}

测试结果

能够查出结果,没有问题

在这里插入图片描述
测试二

@Test
public void test02() throws Exception{
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis.xml"));
    SqlSession sqlSession = sqlSessionFactory.openSession();


    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    int i = userMapper.deleteByPrimaryKey(0);
    System.out.println(i);
}

测试结果

能够删除数据库数据,没有问题
在这里插入图片描述

使用增强版

在配置generatorConfig.xml的时候

targetRuntime有两个值:
MyBatis3Simple:⽣成的是基础版,只有基本的增删改查。
MyBatis3:⽣成的是增强版,除了基本的增删改查之外还有复杂的增删改查。

只需要把上面的generatorConfig.xml文件的targetRuntime值换一下即可。

项目结构

当使用增强版本的时候,就会出现除了User实体类的其他两个类
在这里插入图片描述

UserExample和UserWithBLOBs

  1. UserExampleUserExample是一个用于构建查询条件的辅助类。它提供了一系列的方法,用于设置查询条件,比如等于、大于、小于、排序等。通过使用UserExample,可以方便地构建复杂的查询条件,并将其传递给MyBatis的查询接口进行数据库查询操作。
  2. UserWithBLOBsUserWithBLOBs是生成的包含大字段(BLOBs)的实体类。如果表中存在大字段类型(如TEXT、BLOB等),MyBatis逆向工程会为这些字段生成对应的实体类,并在原有的实体类(比如User)基础上扩展,以支持大字段的获取和设置。

总的来说,UserExampleUserWithBLOBs在MyBatis逆向工程中的作用如下:

  • UserExample帮助构建复杂的查询条件,提供了灵活的方法来指定查询规则和约束条件。
  • UserWithBLOBs是对包含大字段的表生成的实体类,它扩展了原有实体类的功能,使得对大字段的操作更加方便。

UserMapper接口

会比基础的版本多一些方法,相应的UserMapper.xml映射文件也会增多语句

package com.yjg.mybatis.mapper;

import com.yjg.mybatis.pojo.User;
import com.yjg.mybatis.pojo.UserExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;

public interface UserMapper {
    long countByExample(UserExample example);

    int deleteByExample(UserExample example);

    int deleteByPrimaryKey(Integer id);

    int insert(User row);

    int insertSelective(User row);

    List<User> selectByExample(UserExample example);

    User selectByPrimaryKey(Integer id);

    int updateByExampleSelective(@Param("row") User row, @Param("example") UserExample example);

    int updateByExample(@Param("row") User row, @Param("example") UserExample example);

    int updateByPrimaryKeySelective(User row);

    int updateByPrimaryKey(User row);
}

测试方法

@org.junit.Test
public void test01() throws Exception{
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis.xml"));
    SqlSession sqlSession = sqlSessionFactory.openSession();

    //执行查询
    //查询一个
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    User user = userMapper.selectByPrimaryKey(1);
    System.out.println(user);
    System.out.println("===============================================");

    //查询所有(selectByExample根据条件查询,如果条件为空,则表示没有条件)
    List<User> users = userMapper.selectByExample(null);
    users.forEach(user1 -> System.out.println(user1));
    System.out.println("===============================================");


    //按照条件进行查询
    //多条件查询
    // QBC ⻛格:Query By Criteria ⼀种查询⽅式,⽐较⾯向对象,看不到sql语句。
    UserExample userExample = new UserExample();
     userExample.createCriteria().andPasswordLike("%d%").andIdBetween(3, 5);
    List<User> userList = userMapper.selectByExample(userExample);
    userList.forEach(u-> System.out.println(u));
}

测试结果

查询一个成功
在这里插入图片描述
查询所有成功

在这里插入图片描述
根据条件查询成功
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

搞懂Mybatis逆向⼯程这一篇就够了 的相关文章

随机推荐

  • 盘点国内10家互联网AI大模型

    ChatGPT在国内掀起热潮后 中国的生成式AI技术也迎来了蓬勃发展 中国国产AI模型的前景非常广阔 尤其是在中国国家战略的推动下 人工智能领域正在迅速发展 中国的公司和研究机构都在积极进行研发 并取得了一些重大进展 下面我们来看一下已经开
  • spark-2.2.0安装和部署——Spark集群学习日记

    前言 在安装后hadoop之后 接下来需要安装的就是Spark scala 2 11 7下载与安装 具体步骤参见上一篇博文 Spark下载 为了方便 我直接是进入到了 usr local文件夹下面进行下载spark 2 2 0 wget h
  • 【ffmpeg + VS2010】编译包含libavutil\common.h后出现找不到inttypes.h的问题

    包含libavutil common h 由于里面 include
  • 正则表达式(Regular Expressions)

    1 至少8个字符 8 2 URL http w w w URL 2 a zA z w w w w S 3 E Mail w w w w w w E Mail 2 w w w E Mail 3 w w w w 4 非负整数 正整数 0 d 5
  • 【设计】LDO

    参考 设计 低压差稳压器 LDO 的设计分析 对于误差放大器 当没有输出电容 为寄生电容的时候 输出的误差放大器为高频极点 而LDO的输出极点为环路的主极点 LDO输出极点随负载电流变化而变化 当负载电流变小 RL增大 Ppow的输出极点也
  • RPC调用的流程

    RPC调用的流程 要让网络通信细节对使用者透明 我们自然需要对通信细节进行封装 我们先看下一个RPC调用的流程
  • 【svelte】A11y: <div> with click handler must have an ARIA role;A11y: non-interactive elements

    问题描述 svelte项目跑起来的时候 控制台打印以下警告 vite plugin svelte src routes page svelte 50 8 A11y visible non interactive elements with
  • Servlet文件上传

    1 创建upload html文件为了提交上传表单
  • matlab 和 excel 数据的导入导出

    1 将excel中的数据导入到matlab中 将excel中 的数据导入到matlab中采用matlab库函数xlsread 1 C xlsread filename xls 2 C xlsread filename xls range 表
  • import java util_java里面import java.util.*;是什么用处?

    展开全部 import java util 导入32313133353236313431303231363533e78988e69d8331333366303064 java util包中的类接口 Java中import的作用是导入要用到的
  • 实验——田忌赛马c++

    故事概述 孙膑先以下等马对齐威王的上等马 第一局田忌输了 接着进行第二场比赛 孙膑拿上等马对齐威王的中等马 获胜了一局 第三局比赛 孙膑拿中等马对齐威王的下等马 又战胜了一局 比赛的结果是三局两胜 田忌赢了齐威王 还是同样的马匹 由于调换一
  • grep高级用法shell

    一 grep命令的基本概念和用途 grep命令是linux中一种强大的文本搜索工具 它能使用正则表达式搜索文本 并把匹配的行打印出来 在一个或多个文件中搜素字符串模式 如果字符串模式包括空格 也必须被引用 模式后的所有字符串被看作文件名 搜
  • 在头文件中加入#program once

    在头文件中加入 program once 可以解决头文件被重复引用的问题 例 error C2143 语法错误 缺少 在 的前面 error C4430 缺少类型说明符 假定为 int 注意 C 不支持默认 int error C4430
  • 中国汽车工业的发展道路

    中国汽车工业的发展道路 回顾与展望 合作与自主问题 1 中国汽车工业发展的背景与回顾 1 1 认识汽车工业 汽车是惟一的一种 零件以万计 产量以百万计 保有量以亿计 的 第一商品 它的巨大市场潜力 不断产生着科技进步的不竭动力 使它成为各种
  • Kotlin中take、drop方法使用

    1 take方法 private fun take val mList mutableListOf 1 2 3 4 5 6 7 8 9 0 take函数是根据传入的参数挑出该集合 前n个元素 的子集合 val mNewList1 mList
  • 全文搜索引擎,索引库

    全文搜索引擎的工作原理理论上很简单 关键技术就是 分词 索引库 使用分词技术把 文档数据 按分词拆分 也就是一个文档拆分为多个分词 一条普通数据拆分为多个词的索引数据 这个结构就形成了 索引库 索引库存储的数据就叫索引 索引数据 所以当普通
  • 全国计算机等级考试题库二级C操作题100套(第68套)

    第68套 给定程序中 函数fun的功能是 求ss所指字符串数组中长度最长的字符串所 在的行下标 作为函数值返回 并把其串长放在形参n所指变量中 ss所指字符串数组中共有M个字符串 且串长
  • Esxi下通过虚拟文件安装lede系统(一分钟搞定)

    Esxi下通过虚拟文件安装lede系统 一分钟搞定 安装环境esxi6 7 已经提供的LEDE相关文件 安装说明 安装下面提供的图片依次设置即可 1 登录esxi 选择存储 选择数据存储浏览器 2 设置目录名称 3 安装下图将文件依次上载
  • 用 Github Codespaces 免费搭建本地开发测试环境

    如何丝滑地白嫖一个本地开发环境 怎么新建一个代码空间 1 通过Github网页新建 2 通过VSCode插件新建 为代码创建相应的开发测试环境 如何丝滑地白嫖一个本地开发环境 使用Codespaces为开发者解决这样的痛点 为项目设置和维护
  • 搞懂Mybatis逆向⼯程这一篇就够了

    Mybatis逆向 程配置与 成 使用基础版本 前置准备 项目结构 导入依赖 配置generatorConfig xml 数据库表 使用逆向工程 点击插件使用 双击之后效果 UserMapper xml的内容 UserMapper接口的内容