MyBatis Plus

文章目录

        • 第一节 MyBatis Plus 的简介
        • 第二节 MyBatis Plus 的框架搭建
          • [1] 第一步:导包
          • [2] 搭建SSM开发环境
          • [3] 在数据库中创建测试表
          • [4] 在pojo层下创建Student表的实体类
          • [5] 在mapper层创建StudentMapper接口并继承BaseMapper接口
          • [6] 创建测试类,并从Spring容器中获取StudentMapper的接口的实例化对象并使用对象完成数据的查询操作,查询所有的学生信息
          • [7] MyBatis和Mybatis Plus的使用比较
        • 第三节MyBatis Plus 中的CRUD
          • [1] 添加操作
          • [2] 修改操作
          • [3] 删除操作
          • [4] 查询操作
        • 第四节MyBatis Plus 条件构造器Wrapper的使用
          • [1] Wrapper条件构造器的介绍
          • [2] QueryWrapper常用的方法说明
          • [3] 带条件的查询的代码示例
        • 第五节:MybatisPlus的分页查询
          • [1] MybatisPlus的分页查询介绍
          • [2] MybatisPlus的分页查询的配置
          • [3] MybatisPlus分页查询的使用
        • 第六节 MybatisPlus的常用注解
          • [1] MybatisPlus的注解的介绍
          • [2] 常用注解及其作用
          • [3] MybatisPlus中获取自增的主键值
        • 第七节 MybatisPlus的全局配置策略
          • [1] 全局配置策略介绍
          • [2] 全局配置策略示例
        • 第八节 Active Record
          • [1] AR模式和MP的Mapper模式的比较
          • [2] AR模式的特点
          • [3] AR模式的使用代码示例
          • [1] MP的代码生成器介绍
          • [2] MP代码生成器的使用

第一节 MyBatis Plus 的简介

[1] 为什么使用MyBatis Plus?

A、再之前学习的Mybatis中 我们对单表的增删改查的操作,都是自己再mapper.xml中进行代码的书写,这样一来我们书写的代码比较的麻烦。
B、我们目前封装数据库的实体的时候,每一表都需要自己的书写实体类,这样一来,我们书写的代码就比较的麻烦。

[2] 解决的方案

MyBatis Plus:其实就是对MyBatis的进一步的封装。

[3]MyBatis Plus 的简介

Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。官方文档说的愿景是成为 Mybatis 最好的搭档,就像魂斗罗中的1P、2P,基友搭配,效率翻倍。


2,特性


3,架构原理
在这里插入图片描述

第二节 MyBatis Plus 的框架搭建

[1] 第一步:导包
在原有SSM的jar包的基础上增加MybatisPlus的jar即可。
![在这里插入图片描述](https://img-blog.csdnimg.cn/d072c2e3efd749cfbd60a2cdcec004b1.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzUzNjA5Njgz,size_16,color_FFFFFF,t_70)
[2] 搭建SSM开发环境
  1. 在Src下创建MVC的包结构

  2. 在src下创建和配置SSM相关配置文件
    注意:
    其他配置和原有SSM流程不变,在applicationcontext.xml文件中
    将Mybatis的工厂bean替换为MybatisPlus的工厂bean即可。
    在这里插入图片描述

  3. 在web.xml中配置SSM相关信息

[3] 在数据库中创建测试表

创建t_student表并添加测试数据
在这里插入图片描述

[4] 在pojo层下创建Student表的实体类

在这里插入图片描述

[5] 在mapper层创建StudentMapper接口并继承BaseMapper接口

在这里插入图片描述

[6] 创建测试类,并从Spring容器中获取StudentMapper的接口的实例化对象并使用对象完成数据的查询操作,查询所有的学生信息

在这里插入图片描述

[7] MyBatis和Mybatis Plus的使用比较

1、MybatisPlus包含了Mybatis的所有功能,也就说在MybatisPlus中我们仍然可以按照Mybatis的方式来完成数据库的操作(无侵入)。
2、MybatisPlus的数据库操作的Mapper层的接口只需要继承BaseMapper接口,就自动的拥有了当前对应的表的基本的CRUE操作,无需声明接口方法及其xml文件,极大的提升了开发效率(MybatisPlus是通过实体类来逆向动态生成对应的表的基本的Sql语句)

第三节MyBatis Plus 中的CRUD

[1] 添加操作

在这里插入图片描述

[2] 修改操作

在这里插入图片描述

[3] 删除操作

在这里插入图片描述

[4] 查询操作

在这里插入图片描述

第四节MyBatis Plus 条件构造器Wrapper的使用

[1] Wrapper条件构造器的介绍

问题:

目前我们可以使用mp完成基本的增删改查操作,但是我们在进行数据操作
时,很多时候Sql语句中的筛选条件是非常复杂的,比如or关键,>,<,模
糊查询等,怎么办?

解决:

mp提供了功能非常强大的Wrapper条件构造器

本质:

条件构造器其实就是一个对象,以方法的形式提供了数据库操作的筛选关键字
我们调用该对象,来拼接我们的筛选条件即可。

实现:
QueryWrapper
使用:

创建QueryWrapper对象,使用该对象中提供的对应的数据库操作的方法,来
完成条件的拼接,QueryWrapper对象最终存储拼接好的Sql片段,将片段
拼接在Sql语句中。

[2] QueryWrapper常用的方法说明

在这里插入图片描述

[3] 带条件的查询的代码示例

在这里插入图片描述

第五节:MybatisPlus的分页查询

[1] MybatisPlus的分页查询介绍

问题:

对于传统的分页Sql语句,需要我们自己在Sql语句中
使用limit关键字来实现分页查询。但是呢,在MybatisPlus
中,Sql语句是动态生成的,那么如何完成数据的分页查询呢?

解决:

使用分页插件。

使用:

  1. 在配置文件中配置分页插件
  2. 在代码中调用分页效果
[2] MybatisPlus的分页查询的配置

在这里插入图片描述

[3] MybatisPlus分页查询的使用

在这里插入图片描述

第六节 MybatisPlus的常用注解

[1] MybatisPlus的注解的介绍

问题:

在使用MybatisPlus后,我们不用再声明Sql语句了,只需要我们的Mapper
接口继承BaseMapper接口即可拥有对应的CRUD操作。通过我们之前的学习
我们发现,MyBatisPlus其实在根据我们的实体类来动态的生成对象的Sql语句
默认会按照类名即是对应的表的表名,属性名即是对应的表的字段名。但是如果
实体类名和表名不一致,或者属性名和字段名不一致怎么办?

解决:

在实体类上使用注解表名对应的映射关系。

注意:

建议大家在开发时尽量保证实体类和表之间的对应关系是相同的。这样就不用
声明注解。

[2] 常用注解及其作用
  1. @TableName注解
    作用:表明实体类对应的数据库表
    使用:在类名上使用,值为对应的表的表名
    示例:
    在这里插入图片描述

官方说明:
在这里插入图片描述

  1. @TableId
    作用:表明类中的某个属性为主键字段对应的属性
    使用:在为主键的属性上使用
    示例:
    在这里插入图片描述

官方说明:
在这里插入图片描述

  1. @TableField
    作用:表明普通属性映射的表中的字段,值为字段名
    使用:在普通属性上使用
    示例:
    在这里插入图片描述

    官方说明:
    在这里插入图片描述

[3] MybatisPlus中获取自增的主键值

在Mybatis中需要使用 useGeneratedKeys,keyProperty,keyColumn 设置自增主键值的回返,在实体类对象中获取即可。在MybatisPlus中在进行数据新增时,在新增成功后,会自动的将自增的主键值返回到实体类对象中,前提是需要在实体类中使用@TableId表明主键字段,并且为自增类型。
在这里插入图片描述

第七节 MybatisPlus的全局配置策略

[1] 全局配置策略介绍

问题:

假如我们每个实体类和数据库中的表名都不一致,表的格式都是t_表名
类名呢没有t_字符,比如t_student表和Student类。这样每个实体类
上我们都要使用@TableName注解来表名类和表的映射关系,过于麻烦
怎么办?

解决:

使用MP的全局配置策略。GlobalConfig

作用:

配置表和类名映射关系的前缀。
配置全局主键自增

[2] 全局配置策略示例

在这里插入图片描述

第八节 Active Record

支持 ActiveRecord 模式:

支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作

[1] AR模式和MP的Mapper模式的比较
  1. 原有MP的Mapper模式
    ① 创建项目完成Spring和MP的集成
    ② 创建数据库表对应的实体类
    ③ 创建mapper接口并继承BaseMapper接口
    ④ 从Spring容器中获取Mapper接口的实例化对象完成数据库操作
    描述:
    通过以上流程,MP的操作模式较于原有Mybatis的数据库操作流程
    没有任何变化,只是我们在编写代码的时候不用在mapper层声明
    Sql语句或者XML文件了,提升开发效率。
  2. MP的AR模式
    ① 创建项目完成Spring和MP的集成
    ② 创建数据库表对应的实体类,继承Model类
    ③ 在实体类中覆写pkVal方法.
    ④ 创建Mapper接口并继承BaseMapper接口
    ⑤ 创建Spring对象,让Spring容器完成对Mapper层的实例化扫描
    ⑥ 创建实体类对象,直接调用实体类从Model中继承的数据库方法完成
    数据库操作。
  3. 流程比较分析
    MP的AR模式其实底层仍然使用的是Mapper层在完成数据库操作。
    只不过由我们自己调用Mappe对象操作数据库,变成了通过
    实体类对象来调用Mapper完成数据库操作。从代码的物理视图上
    我们是看不到实体类调用Mapper的过程的。也就说,本质上仍然
    是Mapper层在操作数据库
[2] AR模式的特点

AR模式较于传统的MP模式操作数据库,在代码体系中,我们不用在获取Mapper对象,然后再将实体类传入给mapper层完成数据库操作,直接使用实体类即可完成操作。
提升开发效率。

[3] AR模式的使用代码示例
  1. 创建一个集成了MP的SSM项目

  2. 在pojo层创建实体类,并继承Model类,覆写pkVal的方法
    在这里插入图片描述

  3. 使用AR模式完成数据库操作

在这里插入图片描述

第九节 AutoGenerator代码生成器

[1] MP的代码生成器介绍

问题:

目前我们在开发SSM项目的时候,会先搭建一个SSM的开发环境。我们会根据数据库的表在pojo包中创建对应的实体类,而且可以不关心项目功能的同时,在mapper层对数据库的表的基础增删改查功能提前实现,同理,在service层可以将基础的业务代码提前声明。然后再根据项目功能完成对应的复杂操作。而整个过程需要程序员手动
完成搭建,效率低下。

解决:

创建一个代码生成类,调用该类的对象,并将对应的数据库表作为参数传递进入
以及一些生成代码的其他要求也传递给该对象,让该对象帮助我们生成基础的开发
代码。

实现:

MP的代码生成器

作用:

根据数据库中的表动态的生成表对应的mapper,service,pojo,controller层的基础代码,提升开发效率。

[2] MP代码生成器的使用
  1. 导入代码生成器相关jar包
    在这里插入图片描述

  2. 使用代码生成器生成代码

package com.bjsxt.test;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;public class TestCode {public static void main(String[] args) {// 代码生成器AutoGenerator mpg = new AutoGenerator();//全局配置策略GlobalConfig gc = new GlobalConfig();String path = System.getProperty("user.dir");//动态获取当前项目的路径System.out.println(path);gc.setFileOverride(false);// 是否覆盖同名文件,默认是falsegc.setActiveRecord(true);// 不需要ActiveRecord特性的请改为falsegc.setEnableCache(false);// XML 二级缓存gc.setBaseResultMap(true);// XML ResultMapgc.setBaseColumnList(false);// XML columListgc.setOutputDir(path+"/09-mp-code/src");gc.setIdType(IdType.AUTO);//设置主键策略//数据源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setUrl("jdbc:mysql://localhost:3306/mp?useUnicode=true&useSSL=false&characterEncoding=utf8");// dsc.setSchemaName("public");dsc.setDriverName("com.mysql.jdbc.Driver");dsc.setUsername("root");dsc.setPassword("1234");// 包配置PackageConfig pc = new PackageConfig();pc.setParent("com.bjsxt").setMapper("mapper").setService("service").setController("controller").setEntity("pojo").setXml("mapper");//策略配置StrategyConfig stConfig = new StrategyConfig();stConfig.setCapitalMode(true) //全局大写命名.setNaming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略.setTablePrefix("t_").setInclude("t_student"); // 生成的表,多个表继续传递即可,String类型的可变参数//将策略配置对象集成到代码生成器中mpg.setGlobalConfig(gc);mpg.setDataSource(dsc);mpg.setPackageInfo(pc);mpg.setStrategy(stConfig);//执行生成mpg.execute();}
}

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

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

相关文章

班级日常分享,一天一瞬间

119级日常分享经过两周左右的KTV项目终于要告一段落了&#xff0c;上午先让各个小组在班内试讲了下自己小组所做的KTV点歌系统&#xff0c;整体上做的还可以&#xff0c;有些小组还存在一些细节问题&#xff0c;在试讲的时候也都给他们指了指&#xff0c;相信下来会有所改进的。…

DDOS 攻击的防范教程

转载自 DDOS 攻击的防范教程 一个多月前&#xff0c;阮一峰的个人网站遭受 DDOS 攻击&#xff0c;下线了50多个小时。这篇文章就是他总结的&#xff0c;教大家如何应对这种攻击。 需要说明的是&#xff0c;我对 DDOS 并不精通&#xff0c;从没想过自己会成为攻击目标。攻击…

【2018.3.17】模拟赛之四-ssl1864jzoj1368 燃烧木棒【最短路,Floyd】

正题 链接 需要纪中OJ账号 有n条木棒&#xff0c;长度为1或根号2&#xff0c;给出每根木棒两头的坐标&#xff0c;和燃烧需要的时间。只能从一个木棒的一头开始点火&#xff0c;求燃烧完所有木棒所需要的最短时间。 输入输出&#xff08;需要自取&#xff09; Input 输入…

python变量的创建过程(内存地址变化)

​ name “Alex” 原因 python 解释器有自动垃圾回收机制&#xff0c;自动隔一段时间把没有跟变量名关联的内存数据回收。

推荐一份基于Docker的DevOps实战培训教程

01. 基于Docker的DevOps实战培训 微软工具链 基于Azure和Team Foundation Server 微软DevOps工具链是基于Visual Studio 应用生命周期管理&#xff08;VSALM - Visual Studio Application Lifecycle Managemnet&#xff09;的软件管理平台&#xff0c;本动手实验希望通过模拟一…

所有和Java中代理有关的知识点都在这了

转载自 所有和Java中代理有关的知识点都在这了 对于每一个Java开发来说&#xff0c;代理这个词或多或少都会听说过。你可能听到过的有代理模式、动态代理、反向代理等。那么&#xff0c;到底什么是代理&#xff0c;这么多代理又有什么区别呢。本文就来简要分析一下。 代理技…

神奇!一行代码实现删除某集合下标20-30的元素

大家好&#xff0c;我是雄雄。今天我们还是分享关于集合的内容。假如有这样的需求&#xff0c;已知集合的长度为100&#xff0c;也就是集合中有100个元素&#xff0c;现需要删除索引20-30之间的元素&#xff0c;我们应该怎么实现呢&#xff1f;我们先初始化集合&#xff0c;代码…

ssl初一组周六模拟赛【2018.3.17】

前言 先说一下成绩&#xff1a; 姓名成绩xjq(没错又是他)310hjq200hzb150wyc(本人)130lrz130xxy100lw30zyc缺考 正题 题目1&#xff1a;ssl2574 & jzoj1368 无限序列【斐波那契数列】 刚开始想用分治&#xff0c;结果做不出来&#xff0c;然后想到了更好的方法&#xff…

注意!在subList生成子列表之后,一定不要随便更改原列表

大家好&#xff0c;我是雄雄。前几期我们说过&#xff0c;subList方法是返回原列表的子列表&#xff0c;并且我们还说过&#xff0c;在subList返回的子列表上操作时&#xff0c;会直接影响着原列表&#xff0c;原文在这里&#xff1a;subList?? subString???子列表只是原列…

DotNetCore跨平台~Dockerfile的解释

大叔感觉网上对Dockerfile的说明不是很清楚&#xff0c;或者说怎么去用说的不清楚&#xff0c;在vs2017里我们可以去建立自己的Dockerfile文件&#xff0c;然后你的项目可以被生成一个镜像&#xff0c;把它推到仓库之后&#xff0c;你可以在linux,mac上去run你的项目了&#xf…

当你「ping 一下」的时候,你知道它背后的逻辑吗

转载自 当你「ping 一下」的时候&#xff0c;你知道它背后的逻辑吗 我们在遇到网络不通的情况&#xff0c;大家都知道去 ping 一下&#xff0c;看一下网络状况。 那你知道「ping」命令后背的逻辑是什么吗&#xff1f;知道它是如何实现的吗&#xff1f; 一、「ping」命令的作…

POJ1611-嫌犯【图论,并查集】

正题 题目链接&#xff1a; http://poj.org/problem?id1611 大意 有n个人&#xff0c;m个组&#xff0c;有一个流感嫌犯&#xff0c;流感嫌犯会将所在的组的所有人变成流感嫌犯&#xff0c;求流感嫌犯的数量。 解题思路 并查集将各个组合并&#xff0c;然后看看那些人是和…

python的三元运算

a 10 b 5if a > 15 :c a else:c bd a if a > 15 else bd 值1 if 条件A else 值2如果条件A成立&#xff0c;就取左边的 值1&#xff0c;则 取 值2

​凌云KTV点歌系统功能简介

19级青鸟三班 凌云小组指导老师&#xff1a;穆雄雄老师 班主任&#xff1a;王欣欣老师小组成员&#xff1a;组长&#xff1a;李磊 副组长&#xff1a;杨云浩组员&#xff1a;高启航 朱齐 李欣然 高松 张方仪 王浩如 苏荟旭 贾增伟制作周期&#xff1a;2020年9月25日-10月…

REST参考手册

总说接口定义要遵守 RESTful&#xff0c;那么什么是REST呢&#xff0c;今天跟小编一起来了解一下这个规范吧~&#xff01; 原文作者简介&#xff1a; BRIAN SLETTEN是一个关注前沿技术的软件工程师&#xff0c;现居于加州奥本。他的职业生涯横跨了各个行业&#xff0c;包括零售…

漫画:如何用栈实现队列

转载自 漫画&#xff1a;如何用栈实现队列 栈的特点是先入后出&#xff0c;出入元素都是在同一端&#xff08;栈顶&#xff09;&#xff1a; 入栈&#xff1a; 出栈&#xff1a; 队列的特点是先入先出&#xff0c;出入元素是在不同的两端&#xff08;队头和队尾&#xff09;…

POJ2524——宗教(Ubiquitous Religions)【图论,并查集】

正题 题目链接&#xff1a; http://poj.org/problem?id2524 大意 有n个学生&#xff0c;告诉你哪两个学生的宗教相等&#xff0c;求校园里有多少个宗教。 解题思路 并查集链接就好了 代码 #include<cstdio> using namespace std; int n,m,x,y,s,father[50001],t; i…

深入理解python的元组本身不可变性

元组本身不可修改&#xff0c; 如果包含可修改的数据类型&#xff0c; 那被包含的数据类型可以修改。

SQ小组KTV点歌系统简介

19级青鸟三班 SQ小组指导老师&#xff1a;穆雄雄老师 班主任&#xff1a;王欣欣老师小组成员:组长:王世泽 副组长:张坤鹏 组员:渠德春 徐龙翥 泮迎国 程至婷 樊永奇 杜坤凯 李含笑 吴俊衫1项目整体运行视频&#xff1a;KTV前端主页点歌系统主页进入主页面后左边第一个是演唱…

什么是ABTest

转载自 什么是ABTest 在互联网公司的业务发展过程中&#xff0c;用户增长是永恒的主题&#xff0c;因为没有增长也就没有发展&#xff0c;所以在业务发展的早期产品迭代速度往往是越快越好&#xff0c;总之一句话&#xff1a;“怎么快怎么来”&#xff0c;至于系统建设得是否可…