mybatis逆向工程的实现

news2024/11/25 4:41:49

在本地创建一个test数据库,并在test数据库中创建一个student表;表中的数据如下:

在这里插入图片描述

创建表:

DROP TABLE IF EXISTS student;
CREATE TABLE student (
studentID int NOT NULL AUTO_INCREMENT,
StudnetName varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
studentAge int NOT NULL,
PRIMARY KEY (studentID) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;


添加数据:

INSERT INTO student (studentID, StudnetName, studentAge) VALUES (1, ‘zhangsan’, 20);
INSERT INTO student (studentID, StudnetName, studentAge) VALUES (2, ‘lisi’, 19);
INSERT INTO student (studentID, StudnetName, studentAge) VALUES (3, ‘wanwu’, 40);

上面表格创建完毕:下面开始我们的逆向工程:

第一步:创建一个maven项目并导入依赖:

 <build>
        <plugins>
            <!--逆向工程-->
            <plugin>
                <!--导入逆向工程中用到的插件-->
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.0</version>
                <!--导入逆向工程插件用到的依赖-->
                <dependencies>
                    <!--逆向工程的核心依赖-->
                    <dependency>
                        <groupId>org.mybatis.generator</groupId>
                        <artifactId>mybatis-generator-core</artifactId>
                        <version>1.3.2</version>
                    </dependency>
                    <!--数据库连接池-->
                    <dependency>
                        <groupId>com.alibaba</groupId>
                        <artifactId>druid</artifactId>
                        <version>1.2.12</version>
                    </dependency>
                    <!--MySQL驱动-->
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.29</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <!--1.导入mybatis坐标-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <!-- log4j日志 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
            <scope>runtime</scope>
        </dependency>
        <!--junit版本要等于或高于4.12-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>


第二步:配置文件generatorConfiguration.xml;

注意:配置文件的名称一定要是generatorConfiguration.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: 生成基本的CRUD(清新简洁版)
                    MyBatis3: 生成带条件的CRUD(奢华尊享版)
     -->
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <!-- 数据库的连接信息 -->
        <jdbcConnection
                driverClass="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&amp;useSSL=false&amp;avfeval=true&amp;serverTimezone=UTC"
                userId="root"
                password="sa123">
        </jdbcConnection>
        <!-- javaBean的生成策略--><!--实体类的生成策列-->
        <javaModelGenerator targetPackage="com.mybatis.bean" targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- SQL映射文件的生成策略 -->
        <sqlMapGenerator targetPackage="com.mybatis.mapper" targetProject=".\src\main\resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <!-- Mapper接口的生成策略 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.mybatis.mapper"  targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
        <!-- 逆向分析的表 -->
        <!-- tableName设置为*号,可以对应所有表,此时不写domainObjectName -->
        <!-- domainObjectName属性指定生成出来的实体类的类名 -->
        <table tableName="student" domainObjectName="StudentEntry"/>

    </context>
</generatorConfiguration>

第三步:在maven插件中mybatis-generator-maven-plugin插件的generate目标

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lLd5vHIY-1668670281814)(img/逆向工程执行.png)]

1.逆向工程生成的效果:

在上面效果中我们发现生成的实体类有俩个:StudentEntry和StudentEntryExample;StudentEntryExample是用来事项条件查询的;如果我们在配置文件generatorConfiguration.xml中配置生成的逆向工程为只有基本的CRUD的MyBatis3Simple(清新简洁版)就不会生成StudentEntryExample这个实体类;

下面我们来看一下逆向工程生成的方法:

首先如果看到方法名称上面存在Example这个词,那么这个方法就是根据条件查询

 /**

	 *根据条件获取总记录数
     */
    int countByExample(StudentEntryExample example);

    /**
 	 *根据条件进行删除,可以把任意一个字段作为条件
     */
    int deleteByExample(StudentEntryExample example);

    /**
     *根据主键进行删除
     */
    int deleteByPrimaryKey(Integer studentid);

    /**
     *普通添加:如果条件中有一个字段为空,那么就会在数据库中将这个字段以null作为属性进行添加
     */
    int insert(StudentEntry record);

    /**
     *选择性添加:如果实体类有一个属性为空,那么这个字段就不会出现在添加中
     */
    int insertSelective(StudentEntry record);

    /**
     *根据条件进行查询
     */
    List<StudentEntry> selectByExample(StudentEntryExample example);

    /**
     *根据主键进行查询
     */
    StudentEntry selectByPrimaryKey(Integer studentid);

    /**
     *根据条件选择性修改
     */
    int updateByExampleSelective(@Param("record") StudentEntry record, @Param("example") StudentEntryExample example);

    /**
     *根据条件进行修改
     */
    int updateByExample(@Param("record") StudentEntry record, @Param("example") StudentEntryExample example);

    /**
     *根据主键选择性修改
     */
    int updateByPrimaryKeySelective(StudentEntry record);

    /**
     *根据主键修改
     */
    int updateByPrimaryKey(StudentEntry record);

下面我们来测试一下逆向工程中的方法到底能不能用:

第一步:配置database.properties(用来配置数据源的配置文件,名字叫什么无所谓)和log4j.xml文件

database.properties:

jdbc.driver = com.mysql.cj.jdbc.Driver

jdbc.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8

jdbc.username = root

jdbc.password = sa123

log4j.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m  (%F:%L) \n"/>
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug"/>
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info"/>
    </logger>
    <root>
        <level value="debug"/>
        <appender-ref ref="STDOUT"/>
    </root>
</log4j:configuration>

第二步:创建mybatis-config.xml配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//MyBatis.org//DTD Config 3.0//EN"
        "http://myBatis.org/dtd/MyBatis-3-config.dtd">
<configuration>
    <!--引入properties文件,此时就可以${属性名}的方式访问属性值-->
    <properties resource="database.properties"></properties>
<!--    <typeAliases>-->
<!--        &lt;!&ndash;以包为单位,设置改包下所有的类型都拥有默认的别名,即类名且不区分大小写&ndash;&gt;-->
<!--        <package name="com.mybatis.bean"/>-->
<!--    </typeAliases>-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入映射文件-->
    <mappers>
        <package name="com.mybatis.mapper"/>
    </mappers>
</configuration>

第四步:在test/java中创建一个测试类:MBGTest;

public class MBGTest {

    @Test
    public void testMBG() throws IOException {
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSession sqlSession = new SqlSessionFactoryBuilder().build(is).openSession(true);
        StudentEntryMapper mapper = sqlSession.getMapper(StudentEntryMapper.class);
        //查询所有数据:
        List<StudentEntry> list = mapper.selectByExample(null);
        list.forEach(lit-> System.out.println(lit));

    }
}

执行后控制台输出:

StudentEntry{studentid=1, studnetname='zhangsan', studentage=20}
StudentEntry{studentid=2, studnetname='lisi', studentage=19}
StudentEntry{studentid=3, studnetname='wanwu', studentage=40}

如果输出的是三个地址,则去实体类中重写toString方法就可以实现上面的效果了;

我们发现mapper.selectByExample方法的参数为StudentEntryExample;

其实我们的条件查询可以为QBC风格的查询,QBC查询最大的特点就是将SQL语句中的WHERE子句进行了组件化的封装,让我们可以通过调用Criteria对象的方法自由的拼装查询条件。拼装为Criteria.andxxx;

如果想添加or条件则:Criteria.or().andxxx;
在这里插入图片描述

 @Test
public void testMBG() throws IOException {
    InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSession sqlSession = new SqlSessionFactoryBuilder().build(is).openSession(true);
    StudentEntryMapper mapper = sqlSession.getMapper(StudentEntryMapper.class);
    //查询所有数据:
    //        List<StudentEntry> list = mapper.selectByExample(null);
    //        list.forEach(lit-> System.out.println(lit));
    StudentEntryExample example=new StudentEntryExample();
    example.createCriteria().andStudentageGreaterThan(20);
    List<StudentEntry> list = mapper.selectByExample(example);
    list.forEach(lit-> System.out.println(lit));
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/13491.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 之 Ubuntu 下安装配置ARM交叉编译器(工具链)的简单整理

Linux 之 Ubuntu 下安装配置ARM交叉编译器(工具链)的简单整理 目录 Linux 之 Ubuntu 下安装配置ARM交叉编译器(工具链)的简单整理 一、简单介绍 二、下载 arm 交叉编译安装工具包&#xff0c;并安装到虚拟机中 一、简单介绍 Linux/Ubuntu 开发的一些知识整理&#xff0c;方…

微服务基础设施选型

微服务基础设施架构 全貌 优先级 微服务框架模式 核心 服务注册、服务发现、服务路由 模式1-嵌入SDK 优点 架构简单&#xff0c;天然支持高性能、高可用维护简答&#xff0c;无需维护独立的Proxy节点 缺点 应用侵入&#xff0c;需要集成SDK&#xff0c;并联动升级多语言重…

强化学习 Lesson2 学习笔记

Lesson2-1 MDP、Q表格 一、强化学习MDP四元组<S,A,P,R> S:state 状态A:action 动作R:reward 奖励 r[st,at]P:probability 状态转移概率 p[st1,rt|st,at] 强化学习是一系列决策的过程,通过当前的环境状态和收到的奖励来决定下一次执行的动作 ​ Model-based: P函数和R函…

零售业迎来全新发展,这个技术少不了

零售业在创新方面比较频繁&#xff0c;创新是推动零售业发展的动力&#xff0c;这可以让零售业具有了外在的生命力和内在的动力。创新要求零售商从内部建立机制&#xff0c;以创新的心态经营管理。 现在&#xff0c;零售商陷入泥潭。其中一个原因是&#xff0c;他们失去了创新能…

Docker详解(一)

文章目录参考资料一、Docker基本概念二、Docker安装1. 卸载旧版本2. 使用 Docker 仓库进行安装设置仓库安装 Docker Engine-Community卸载 Docker安装Docker CE 环境三、Docker命令1. Docker容器运行流程2. 镜像命令docker images 查看所有本地主机上的镜像docker search 搜索镜…

后端自学两个小时前端,究竟能做出什么东西?

又来给大家更文了&#xff0c;今天是微服务网关实战的第六篇。 今天的内容比较偏前端一点&#xff0c;主要是给大家换换口味&#xff0c;毕竟学一个东西学久了就想学点新东西休息一点&#xff0c;俗称换换脑子。 其实早就想学学前端看了&#xff0c;不过碍于工作繁忙&#xf…

冒泡排序和数据结构和算法可视化网站(及其一点小优化)

目录 一、冒泡排序的原理 二、动图演示原理 三、代码实现&#xff1a; 四、优化后的冒泡排序 五、算法演示网站 一、冒泡排序的原理 冒泡排序就是两两交换&#xff0c;第一趟排序可以得到最大值&#xff0c;那么第二趟排序就不用再比较最大值了&#xff0c;同样是两两交换…

电商后台管理系统(基于SSM + Vue + Restful + jquery + axios)

1.项目架构 2.config配置 JdbcConfig public class JdbcConfig {Value("${jdbc.driver}")private String driver;Value("${jdbc.url}")private String url;Value("${jdbc.username}")private String username;Value("${jdbc.password}&qu…

Spring——五大类注解和方法注解详解

文章目录1.Spring的创建2.Spring对象的存储3.将 Bean 对象通过配置文件注册到 Spring 当中4.从 Spring 中将 bean 对象读取出来并使用4.1 先得到 Spring 上下文对象4.2 再通过上下文对象提供的方法获取需要使用的baen对象4.3 使用bean对象[可选步骤]4.4 获取 getBean 的更多方法…

易基因技术推介|m1A RNA甲基化测序(MeRIP-seq/m1A-seq)

N1-甲基腺苷&#xff08;N1-methyladenosine&#xff0c;m1A&#xff09;是一种普遍存在于真核生物tRNA、rRNA和mRNA且可逆的转录后RNA修饰。基于高通量测序技术最新研究揭示m1A RNA修饰在基因调控和生物过程中的关键作用&#xff1a;对RNA稳定性和翻译起始等过程有着重要调节作…

Mybatis+Spring+SpringMVC及SSM整合

文章目录一、Mybatis&#xff08;一&#xff09;Mybatis简介1、Mybatis历史2、Mybatis特性3、Mybatis下载4、和其它持久化层技术对比&#xff08;二&#xff09;搭建Mybatis1、MySQL不同版本的注意事项2、创建Maven工程1、引入依赖3、创建MyBatis的核心配置文件3.1、核心配置文…

WRF进阶:WRF中Noah-MP地面方案中雪反照率的计算

Noah-MP简介 Noah-MP是以Noah-LSM为基础发展的一种多层模型&#xff0c;相对于Noah-LSM&#xff0c;它对于下垫面的冠层、土壤、积雪有了更多的拓展。 Noah-MP允许3层雪&#xff0c;对于雪的模拟有了极大的提升&#xff0c;同时&#xff0c;Polar-WRF中对Noah LSM和Noah MP中海…

IIS 部署HTTP 转 HTTPS完整版

1,准备SSL证书&#xff0c;阿里云有1年免费证书 免费证书有 20个&#xff0c;每年用一个就行 审核通过后下载 下载文件包含证书文件和密码 2.安装重定向模块 如果IIS上默认有安装Web平台安装程序&#xff0c;我们可以使用平台自动安装URL Rewrite重写工具&#xff0c;也可以…

Tomcat日志分割

使用cronolog日志切分工具 RPM包下载方法&#xff1a;在 rpmfind.net 上搜索cronolog选择对应RPM包复制下载链接即可 下载安装 cronolog yum install https://rpmfind.net/linux/epel/7/x86_64/Packages/c/cronolog-1.6.2-14.el7.x86_64.rpm -y验证是否安装成功及安装位置 使…

《安卓逆向》Magisk的编译踩坑记录-安装方法-分享魔改后的Magisk过root检测方法

为什么: 1.体验下如何编译面具源码 2.魔改面具-绕过更深的root检测 1.ubuntu 虚拟机下载地址 http://mirrors.aliyun.com/ubuntu-releases/20.04/github:https://github.com/topjohnwu/Magisk 编译根据这篇文章做好前缀下代码工作 https://zhuanlan.zhihu.com/p/385255256编…

图片1920x1080分辨率怎么调 ?图片如何修改分辨率?

图片是我们日常生活中经常需要使用到的东西&#xff0c;但是在使用图片时我们会遇到需要调图片分辨率的情况&#xff0c;有很多小伙伴对于图片分辨率这个概念并不了解&#xff0c;今天就来为大家具体介绍一下图片1920x1080怎么调以及怎么给图片修改分辨率&#xff0c;下面一起来…

美食杰项目 -- 首页(一)

目录前言&#xff1a;具体实现思路&#xff1a;步骤&#xff1a;1. 展示美食杰项目首页效果2. 引入 element-ui3. 头部代码4. 首页内容总代码5. 轮播图代码6. 已发布菜品内容代码7. 加载图片页面代码总结&#xff1a;前言&#xff1a; 本文给大家讲解&#xff0c;美食杰项目中…

Windows右键菜单美化(适用版本:Win7-Win11) 奇怪的美化教程 #1

在我的上篇文章中&#xff0c;只有 0% 的人点了赞 咋一人没有啊&#xff01; 所以如果觉得做的还行的话可以给我点个赞、收个藏&#xff0c;这对我真的很重要&#xff01;QWQ 祖传前言 众所周知&#xff0c; Windows11 整了个新的右键菜单 (而原来的右键菜单变成了 显示更多…

基于微信小程序的桥牌计分系统设计与实现-计算机毕业设计源码+LW文档

小程序开发说明 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Mave…

m基于MATLAB的FM调制收音机仿真实现

目录 1.算法概述 2.仿真效果预览 3.核心MATLAB代码预览 4.完整MATLAB程序 1.算法概述 那么FM调制端的基本原理图如下所示&#xff1a; FM解调 FM解调的基本原理框图为&#xff1a; 在不考虑频偏的情况下&#xff0c;FM解调运算就相当于FM调制的逆运算&#xff0c;任务的第…