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

这篇具有很好参考价值的文章主要介绍了搞懂Mybatis逆向⼯程这一篇就够了。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用基础版本

前置准备

项目结构

创建一个空的模块,此时java目录里面没有代码,mapper映射文件也没有。
搞懂Mybatis逆向⼯程这一篇就够了,MyBatis,mybatis

导入依赖

在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;

使用逆向工程

点击插件使用

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

双击之后效果

双击之后就会出现,对应得实体类和mapper映射文件。
搞懂Mybatis逆向⼯程这一篇就够了,MyBatis,mybatis

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));
}

测试结果

能够查出结果,没有问题

搞懂Mybatis逆向⼯程这一篇就够了,MyBatis,mybatis
测试二

@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);
}

测试结果

能够删除数据库数据,没有问题
搞懂Mybatis逆向⼯程这一篇就够了,MyBatis,mybatis

使用增强版

在配置generatorConfig.xml的时候

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

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

项目结构

当使用增强版本的时候,就会出现除了User实体类的其他两个类
搞懂Mybatis逆向⼯程这一篇就够了,MyBatis,mybatis

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));
}

测试结果

查询一个成功
搞懂Mybatis逆向⼯程这一篇就够了,MyBatis,mybatis
查询所有成功

搞懂Mybatis逆向⼯程这一篇就够了,MyBatis,mybatis
根据条件查询成功
搞懂Mybatis逆向⼯程这一篇就够了,MyBatis,mybatis文章来源地址https://www.toymoban.com/news/detail-678092.html

到了这里,关于搞懂Mybatis逆向⼯程这一篇就够了的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 学习SpringSecurity这一篇就够了

    案例源码地址:https://gitee.com/gzl_com/spring-security.git 1.1、概要 Spring Security 是 Spring 家族中的成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。 安全方面的两个主要区域是“ 认证 ”和“ 授权 ”。在Web 应用又称之为 用户认证 和 用户授权 两个部

    2024年02月11日
    浏览(54)
  • CSS基础——看这一篇就够了

    目录 一、CSS简介 1.CSS是什么? 2.CSS的作用 3.CSS的构成 二、CSS选择器 1.基础选择器 (1).标签选择器 (2)类选择器 (3)标签选择器 (4) 通配符选择器 2.复合选择器 (1)后代选择器(包含选择器) (2)子选择器 (3)并集选择器 (4)伪类选择器  三、基本属性 1.字体属性

    2024年02月09日
    浏览(61)
  • 精通线程池,看这一篇就够了

    当我们运用多线程技术处理任务时,需要不断通过new的方式创建线程,这样频繁创建和销毁线程,会造成cpu消耗过多。那么有没有什么办法 避免频繁创建线程 呢? 当然有,和我们以前学习过多连接池技术类似,线程池通过提前创建好线程保存在线程池中, 在任务要执行时取

    2023年04月17日
    浏览(90)
  • 学习C++这一篇就够了(进阶篇)

    C++在执行程序的时候,将内存方向划分为4个区域: 代码区:存放二进制代码,由操作系统进行管理 全局区:存放全局变量、静态变量、常量,程序结束后由操作系统释放 栈区:存放函数参数、局部变量,由编译器自动分配和释放 堆区:由开发者申请分配和释放,若程序员

    2024年02月12日
    浏览(43)
  • 超图(HyperGraph)学习,看这一篇就够了

    最近事多,好久没更新了,随便写写(Ctrl+V)点 一、超图定义 通常图论中的图,一条edge只能连接2个vertex,在超图中,不限量 如何理解呢,就用我正在做的KT问题来看:7道题目-7个顶点;4种概念-4条超边,其中第1,2,3题都是考察概念1的,则构建一个包含了这仨的超边,以此类

    2024年02月02日
    浏览(58)
  • 还不会二分查找?看这一篇就够了

    二分查找分为整数二分和浮点数二分,一般所说的二分查找都是指整数二分。 满足单调性的数组一定可以使用二分查找,但可以使用二分查找的数组不一定需要满足单调性。 不妨假设我们找到了条件 C 1 C_1 C 1 ​ ,它和它的 对立条件 C 2 C_2 C 2 ​ 能够将数组 a a a 一分为二,

    2024年01月19日
    浏览(48)
  • SourceTree使用看这一篇就够了

     你梦想有一天成为git大师,然而面对复杂的git命令,你感觉TMD这我能记得住吗?你曾经羡慕从命令行敲git命令,才会更加炫酷,然而时间一长,TMD命令我有忘了。那么今天我介绍的这款工具会让你从git命令中解救出来,这就是git可视化工具SourcTree。 事实上Git的功能十分强大

    2024年02月08日
    浏览(60)
  • CAS自旋锁,看这一篇就够了

    前序 时隔多年,杰伦终于出了新专辑,《最伟大的作品》让我们穿越到1920年,见到了马格利特的绿苹果、大利的超现实、常玉画的大腿、莫奈的睡莲、徐志摩的诗… 他说“最伟大的作品”并不是自己的歌,而是这个世界上最伟大的艺术作品们。 为什么要写CAS自旋锁呢?最近

    2023年04月08日
    浏览(39)
  • Docker Volume 看这一篇就够了

    默认情况下,在容器内创建的所有文件都存储在可写容器层上。这意味着: 当该容器不再存在时,数据不会持续存在,并且如果另一个进程需要数据,则可能很难将数据从容器中取出。 容器的可写层与运行容器的主机紧密耦合。您无法轻松地将数据移动到其他地方。 写入容

    2024年02月02日
    浏览(93)
  • 还不会拓扑排序?看这一篇就够了

    拓扑排序是一种有向无环图(DAG)的顶点排序方法,它将一个有向无环图中的所有顶点排成一个线性序列,使得图中 任意一条有向边上的起点排在终点的前面 。 这样说还不够具体,我们先来看一个例子。假设某大学的课程安排如下: 课程编号 课程名称 先修课程 1 1 1 高等数

    2023年04月08日
    浏览(102)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包