SSM框架学习记录-MyBatisPlus_day01

news2024/11/16 11:31:13

1.入门案例与简介

MybatisPlus是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提供效率

未使用MybatisPlus时,在dao接口中的代码如下:

@Mapper
public interface UserDao {
        @Select("select * from user where id=#{id}")
        public User getById(Long id);
}

使用MybatisPlus后,代码如下(依旧可以和MyBatis一样写SQL):

@Mapper
public interface UserDao extends BaseMapper<User> {
}

注意:

  • dao接口要想被容器扫描到,有两种解决方案:
    • dao接口上添加@Mapper注解,并且确保dao处在引导类所在包或其子包中(缺点是需要在每个dao接口中添加注解)
    • 在引导类上添加@MapperScan注解,指定包下的所有dao接口都能被扫描到

代码参考MybatisPlus_01_quickstart


2.标准数据层开发

代码参考MybatisPlus_01_quickstart中的Mybatisplus01QuickstartApplicationTests.java

注意:

  • 使用分页的前需要先配置拦截器,具体代码见MpConfig.java

在这里插入图片描述

3.DQL编程控制

MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的组合。在查询所有和分页查询的时候,都有看到Wrapper类,该类就是用来构建查询条件的

代码参考MybatisPlus_02_dql中的Mybatisplus02DqlApplicationTests.java


条件查询

  • 三种使用方式
  • 并且与或者关系
  • null判定

查询投影

  • 查询指定字段
  • 聚合和分组查询

查询条件

  • 等值查询
  • 范围查询
  • 模糊查询
  • 排序查询

映射匹配兼容性

  • 当表的列名和模型类的属性名不一致,会导致数据封装不到模型对象,MyBatisPlus提供了注解@TableField,使用该注解可以实现模型类属性名和表的列名之间的映射关系:
public class User {
    @TableField(value = "pwd")  // pwd是表中字段名称
    private String password;
	...
}
  • 当模型类中多了数据库表不存在的字段,会导致生成的SQL语句中在select的时候查询了数据库不存在的字段,解决方案是使用@TableField的属性exist
public class User {
    // 设置该字段是否在数据库表中存在,如果设置为false则不存在,生成sql语句查询的时候,就不会再查询该字段
	...
    @TableField(exist = false)
    private Integer online;
}
  • 查询表中数据时,为了避免把敏感数据返回给前端,需要限制哪些字段默认不要进行查询,解决方案是使用@TableField的属性select
public class User {
	// 该属性设置默认是否需要查询该字段的值,true(默认值)表示默认查询该字段,false表示默认不查询该字段
    @TableField(value = "pwd",select = false)
    private String password;
	... 
}
  • 表的名称和模型类的名称不一致,导致查询失败,解决方案是使用@TableName来设置表与模型类之间的对应关系:
@TableName("tbl_user")
public class User {
	...
}

4.DML编程控制

代码参考MybatisPlus_03_dml中的Mybatisplus03DmlApplicationTests.java


id生成策略控制

新增成功后,主键ID是很长串的内容,更想要的是按数据库表字段进行自增长,在解决这个问题之前,先来分析下ID该如何选择哪种生成策略:

  • 日志:自增(如1,2,3,4,……)
  • 购物订单:特殊规则(如FQ23948AK3843)
  • 外卖单:关联地区日期等信息(如10 04 20200314 34 91)
  • 关系表:可省略id

在主键上添加@TableId即可设置主键生成策略(也可以在配置文件中设置全局配置)


多记录操作

使用deleteBatchIdsselectBatchIds方法


逻辑删除

对于删除操作业务问题有两种方式:

  • 物理删除:业务数据从数据库中丢弃,执行的是delete操作
  • 逻辑删除:为数据设置是否可用状态字段,删除时设置状态字段为不可用状态,数据保留在数据库中,执行的是update操作

MyBatisPlus进行逻辑删除的步骤如下:

  • 数据库表添加deleted
  • 实体类添加属性:
public class User {
	...
    // 逻辑删除字段,标记当前记录是否被删除
    // value为正常数据的值,delval为删除数据的值
    @TableLogic(value = "0" ,delval = "1")
    private Integer deleted;
}
  • 运行删除方法:
// 底层运行的是update tbl_user set deleted=1 where id=? and deleted=0
void testDelete(){
	userDao.deleteById(1L);
}
// 如果运行查询操作,底层运行的是select * from tbl_user where deleted=0(即也会自动添加一个未被删除的条件)

注意:

  • 如果要查询所有数据(包括逻辑删的数据),需要自己在dao层中写SQL语句
  • 如果每个表都要有逻辑删除字段,可以在配置文件中设置全局配置

乐观锁

MyBatisPlus实现乐观锁的步骤如下:

  • 数据库表添加列(如version)
  • 在模型类中添加对应的属性:
public class User {
   ...
   @Version
   private Integer version;
}
  • 添加乐观锁的拦截器:具体见MpConfig.java
  • 执行更新操作

参考


https://www.bilibili.com/video/BV1Fi4y1S7ix?p=105-118

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

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

相关文章

冬日宅家选哪款投影仪比较好?极米H5陪你温暖过冬天

随着室外温度的逐步下降&#xff0c;寒冬也真的来了。相信对于许多朋友来说&#xff0c;宅家是冬季最惬意的时光&#xff0c;就是开着空调、电暖风、暖气&#xff0c;在温暖的室内&#xff0c;再打开投影仪&#xff0c;用超大屏追剧、看看电影&#xff0c;听听美妙的音乐&#…

光伏二次设备概述

概述 分布式光伏发电项目一般根据并网的电压等级分为380V和10KV。一般电压等级为380V低压并并网基本不涉及到什么二次产品&#xff0c;通常采用光伏并网柜就能解决&#xff0c;常见的并网设备为防孤岛保护装置和电能质量在线监测装置为主。而10KV并网的光伏容量一般处于1MWP到1…

加强企业数据库安全的行为准则

现在大多数企业都拥有可靠的网络安全程序&#xff0c;这些程序利用多种控件来实现深度防御安全性。通过这些程序&#xff0c;企业服务器得到加固&#xff0c;企业端点得到保护&#xff0c;监控工具也得以部署。还能够消除来自端点设备的高度敏感信息&#xff0c;并整合企业系统…

基于jsp+sevlet+mysql实验室设备管理系统

基于jspsevletmysql实验室设备管理系统一、系统介绍二、功能展示1.通知公告(学生)2.实验设备借用申请(学生)3.设备借用记录(学生)4.实验室预约申请(老师)5.实验室预约记录(老师)6.实验设备借用申请(老师)7.设备借用记录(老师)8.通知公告(管理员)9.实验室管理(管理员)10.设备管理…

QA | 关于可编程信号发生器,您在使用中可能遇到的问题

Q1&#xff1a;为什么信号源插在电脑上会显示电压不足&#xff1f; A&#xff1a;通常需要比普通电脑USB接口能提供更大的功率&#xff0c;需要高达2.0A的电流&#xff0c;超出了许多老式 USB 端口的水平。可以通过多种方式满足这一要求。适配器、USB 3.0计算机/笔记本电脑端口…

python——Matplotlib之fill_between函数

Matplotlib是Python提供的一套基于NumPy的绘图工具包&#xff0c;用Python实现与MATLAB相似的命令API&#xff0c;十分适合交互式绘制图表&#xff0c;成为Python中应用非常广的绘图工具包之一。 在对数据可视化时&#xff0c;为了突出某一段数据需要对部分区域进行填充处理。…

用这4招优雅的实现Spring Boot 异步线程间数据传递

Spring Boot 自定义线程池实现异步开发相信看过文章都了解&#xff0c;但是在实际开发中需要在父子线程之间传递一些数据&#xff0c;比如用户信息&#xff0c;链路信息等等 比如用户登录信息使用ThreadLocal存放保证线程隔离&#xff0c;代码如下&#xff1a; /*** author 公…

认监委调整《有机产品认证目录》

认监委关于调整《有机产品认证目录》的公告为进一步完善有机产品认证制度&#xff0c;规范有机产品认证活动&#xff0c;促进有机产业发展&#xff0c;根据《有机产品认证管理办法》&#xff08;质检总局令第155号&#xff09;和《有机产品认证实施规则》&#xff08;认监委201…

大数据编程期末大作业

大数据编程期末大作业 文章目录大数据编程期末大作业一、Hadoop基础操作二、RDD编程三、SparkSQL编程四、SparkStreaming编程一、Hadoop基础操作 在HDFS中创建目录 /user/root/你的名字 例如李四同学 /user/root/lisi 首先我们需要启动hdfs&#xff0c;我们直接在终端输入如下命…

JavaScript for 循环

文章目录JavaScript for 循环JavaScript 循环使用for循环不同类型的循环For 循环语句 1语句 2语句 3For/In 循环JavaScript for 循环 循环可以将代码块执行指定的次数。 JavaScript 循环 如果您希望一遍又一遍地运行相同的代码&#xff0c;并且每次的值都不同&#xff0c;那么…

MCU-51:单片机DS18B20温度报警器

目录一、DS18B201.1 DS18B20介绍1.2 引脚及应用电路1.3 内部结构框图1.4 存储器结构二、单总线2.1 单总线介绍2.2 单总线电路规范2.3 单总线时序结构三、DS18B20操作流程四、DS18B20数据帧五、温度存储格式六、代码演示6.1 温度读取6.2 温度报警器注意&#xff1a;一定要看一、…

Qt OpenGL(04)Sierpinski 镂垫 3D 版

文章目录三维 Siepinski 镂垫相关代码main.cppHelp.hppWidget.hWidget.cpp顶点着色器片元着色器总结三维 Siepinski 镂垫 把前面的二维Sierpinski程序转换成一个生成三维Sierpinski镂垫的程序&#xff0c;也就是说要绘制的镂垫不再只是限制在一个平面里。我们可仿效对二维镂垫所…

什么? @ConditionalOnMissingBean 你没设置value?

序 这两天再看 公司 之前写的组件的代码&#xff0c;不看不知道&#xff0c;一看吓一跳。。。。这里就说其中一个 不知道你在写组件中的 Bean 加载的时候 怎么写&#xff1f; 方法一 直接META-INF/spring.factories 写 org.springframework.boot.autoconfigure.EnableAuto…

消息队列应用与原理剖析

什么是消息队列 消息队列&#xff1a;在消息的传输过程中保存消息的容器&#xff0c;生产者和消费者不直接通讯&#xff0c;依靠队列保证消息的可靠性&#xff0c;避免了系统间的相互影响。系统间的数据流通道 应用场景 异步处理&#xff1a;用户注册后&#xff0c;需要发注…

linux C--管道

这里写自定义目录标题基本概念管道特征编写模型有名管道模型示例demowrite.cread.c结果记录笔记1无名管道基本概念 进程间存在天然的壁垒,进程间通信(Interperocess Communication,IPC)是指二个或者多个进程之间进行数据交换的过程 管道特征 管道是进程间通讯的一种常用方法…

Tomcat安装及使用

1.下载 Tomcat官网 选择系统 2.解压 解压到没有中文路径的文件夹中,解压路径会在配置环境变量时用到 3.配置环境变量 在电脑点击鼠标右键->点击属性>点击高级系统设置->点击环境变量->新建系统变量 1.新建系统变量 变量名为CATALINA_HOME&#xff0c;变…

【unity3D】DoTween动画插件(下)

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于游戏开发的学习笔记 &#x1f236;本篇是unity的DoTween动画插件可视化编辑 DoTween动画插件&#xff08;可视化编辑&#xff09;DOTween AnimationDoTween Path路径编辑器Scene…

【Linux】Linux编辑器—vim使用

目录1.vim的基本概念2.vim基本操作3.vim命令模式命令集4.vim末行模式命令集5.简单vim配置6.使用sudo提权为什么要学习vim&#xff1f; “在 Linux 系统中一切都是文件&#xff0c;而配置一个服务就是在修改其配置文件的参数”。 而且在日常工作中大家也肯定免不了要编写文档&am…

学习C语言笔记:浮点类型float、double和long double

浮点类型能表示包括小数在内更大范围的数。浮点数的表示类似于科学计数法&#xff08;即用小数乘以10的幂来表示数字&#xff09;。该记数系统常用于表示非常大或非常小的数。 float C语言规定&#xff0c;float类型必须至少能表示6位有效数字&#xff0c;且取值范围至少是~…

【阶段二】Python数据分析Pandas工具使用03篇:数据预处理:多表合并与连接

本篇的思维导图: 数据预处理:多表合并与连接 将表结构相同(即变量个数和变量类型均相同)的多张表纵向合并到一张长表中,或者将多张表的变量水平扩展到一张宽表中。 需要注意的是,对于多表之间的纵向合并,则必须确保多表的列数和数据类型一致;对于多表之间的水平扩展,…