mp总结 mybatisPlus

news2024/12/24 10:05:13

一、准备

1.引入依赖(引入后可以不再引mybatis依赖)

<dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>mybatis-plus-boot-starter</artifactId>
   <version>3.4.2</version>
</dependency>

2.在mapper和services上继承mp

mapper:  extends BaseMapper<User>(泛型为对应的实体类)

services:

启动类上加上扫描@MapperScan("com.xxxde.mp.mapper")

3.常用配置

二、常用注解

    1.原理与约定

mp的原理是基于反射得到实体类的字节码,从而得到数据库中表的字段一般mp对实体类的约定:

  类名驼峰转下划线作为表名

  名为id的字段作为主键
  变量名驼峰转下划线作为表的字段名

2.常用注解

@TableName:用来指定表名
@Tableld:用来指定表中的主键字段信息

@TableField:用来指定表中的普通字段信息

2.1示例

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("user")
public class Users {

     //用户id
    @TableId(value = "id",type = IdType.AUTO)
    private Long id;

    // 用户名
    @TableField("username")
    private String username;

    // 状态
    @TableField("is_married")
    private boolean isMarried;

    @TableField("`order`")
    private Integer order;

    //不是数据库字段
    @TableField(exist = false)
    private String password;



}

2.2解释

IdType枚举
AUTO:数据库自增长
INPUT:通过set方法自行输入
ASSIGN_ID:分配lD,接口ldentifierGenerator的方法nextld来生成id默认实现类为DefaultldentifierGenerator雪花算法

使用@TableField的常见场景:
成员变量名与数据库字段名不一致

成员变量名以is开头,且是布尔值 

成员变量名与数据库关键字冲突
成员变量不是数据库字段

三、条件构造器

1.QueryWrapper

(除了新增,其他的都可以用这个进行条件构造)

示例

 @Test
    void tesQueryRupper() {
        //1.构造查询条件 select id,username,info,balance from user where username like ? and balance>?
        QueryWrapper<User> wrapper = new QueryWrapper<User>()
                .select("id","username","info","balance")
                .like("username","o")
                .ge("balance",1000);
        //2.查询
        List<User> users = userMapper.selectList(wrapper);
        users.forEach(System.out::println);
    }

 @Test
    void tesUpdateQueryWrapper() {
        //1.要更新的数据  update user set balance=2000 where username="jack"
        User user = new User();
        user.setBalance(2000);
        //2.更新的条件
        QueryWrapper<User> wrapper = new QueryWrapper<User>()
                .eq("username","jack");
        //3.执行更新
        userMapper.update(user,wrapper);
    }

  @Test
    void tesUpdate() {
       List<Long> ids=List.of(1L,2L,4L);
        UpdateWrapper<User> wrapper = new UpdateWrapper<User>()
                .setSql("balance = balance- 200")
                        .in("ids",ids);

        //3.执行更新 update user set balance = balance- 200 where id in(1,2,4)
        userMapper.update(null,wrapper);
    }

2.自定义SQL 

 利用wrapper构建where条件mp

四、services接口

自己的services接口继承 IService<User>泛型是对应的实体

自己的services接口的实现类 继承ServicesImpl<UserMapper,User>

1. IService的Lambda查询

表格的条件查询

2.IService的Lambda更新

 

3.IService的Lambda批量新增

在mp的配置中加入配置&rewriteBatchedStatements=true,开启预编译,让所有语句变成一条,提高效率

五、mp的扩展功能

1.Db静态工具

当在一个services中使用另一个services,另一个也要使用这个services,这样就会出现循环依赖,而静态工具就能解决

2.逻辑删除

如 用户删除商品的订单时采用逻辑删除,这样商家可以进行分析和统计

实现:在表中添加一个字段进行区分标记

MybatisPlus提供了逻辑删除功能,无需改变方法调用的方式,而是在底层帮我们自动修改CRUD的语句。我们要做的就是在application.yaml文件中配置逻辑删除的字段名称和值即可:

3.枚举处理器

java中的枚举与数据库类型的转换

定义一个枚举类在与要进行对应的项上加上 @EnumValue

枚举类

实体类

在配置文件中加入配置

mybatis-plus:
      configuration:
        default-enum-type-handler: com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler

4.JSON处理器

数据库中表的字段类型时JSON格式,对应的实体是String

在实体上加入@TableName("user",autoResultMap = true)

对应的字段上加入

@TableField(value = "info",typeHandler = JacksonTypeHandler.class)

六、mp分页插件

使用 首先定义一个配置类注册插件

使用

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

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

相关文章

Leetcode JAVA刷刷站(95)不同的二叉搜索数 ||

一、题目概述 二、思路方向 为了生成所有由 n 个节点&#xff08;值从 1 到 n&#xff09;组成的不同二叉搜索树&#xff08;BST&#xff09;&#xff0c;我们可以采用递归的方式。核心思想在于&#xff0c;对于每个数字 i&#xff08;从 1 到 n&#xff09;&#xff0c;我们可…

【C语言报错已解决】 `Buffer Overflow`

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引言一、问题描述&#x1f469;‍&#x1f52c;报错示例&#x1f4da;报错分析&#x1f4da;解决思路 二、解决方法&a…

麒麟V10(x86_64)安装部署MySQL-5.1.70

麒麟V10(x86_64)安装部署MySQL-5.1.70 1. 主机信息 [kalamikysrv1 ~]$ uname -a Linux kysrv1 4.19.90-24.4.v2101.ky10.x86_64 #1 SMP Mon May 24 12:14:55 CST 2021 x86_64 x86_64 x86_64 GNU/Linux [kalamikysrv1 ~]$ [kalamikysrv1 ~]$ uname -m x86_64 [kalamikysrv1 ~…

深度学习模板方法设计模式

文章目录 前言一、介绍二、特点三、详细介绍1.核心组成2.代码示例3.优缺点优点缺点 4.使用场景 总结 前言 模板方法设计模式是行为型设计模式&#xff0c;主要是定义算法框架&#xff0c;并将一些步骤的实现延迟到子类&#xff0c;重新定义算法的步骤。 一、介绍 模板设计模式…

项目初始化踩坑记录

dependence not found: D:/yupiProject/yubi-bi-frontend/node_modules/umijs/plugins/node_modules/react-intl 这个没有在github上找到解决方法&#xff0c;于是我在命令行 npm install 执行这个之后&#xff0c;就可以重新运行了 思考过程&#xff1a;突然空了个文件我…

开放式耳机是什么意思?开放式耳机推荐

在探讨音频设备的广阔领域中&#xff0c;开放式耳机以其独特的设计理念和卓越的性能体验&#xff0c;逐渐成为耳机市场上一股不可忽视的力量。顾名思义&#xff0c;开放式耳机是一种采用开放式设计&#xff0c;不堵塞或覆盖耳朵&#xff0c;允许佩戴者同时听到部分外部声音的耳…

Unity滚滚车轮计划 之 新输入系统控制2D角色移动动画(俯视)

本系列的初衷是因为很多时候基础代码不得不重复又重复&#xff0c;所以为了更快更好地学习到新的知识&#xff0c;我就把已经掌握的知识造成自己的轮子吧&#xff0c;等用到的时候直接复制就行了 叠甲&#xff1a;虽然不能保证全是原创&#xff0c;有些写法可能烂大街&#xff…

arm64--内嵌汇编

内嵌汇编代码基本用法 1.作用&#xff1a;对于特定重要和时间敏感的代码进行优化&#xff0c;同时在C语言中访问某些特殊指令&#xff08;例如内存屏障指令&#xff09;来实现特殊功能 2.内嵌汇编代码主要有两种形式 基础内嵌汇编代码&#xff1a;不带任何参数 扩展内嵌汇…

【ES6新特性】介绍ES6新特性的内容,如var,Let,Const声明变量的区别,解构赋值的概念,字符串的扩展,数组的扩展,以及对象的扩展。

目录 1.var&#xff0c;let&#xff0c;const的区别 1.1 var 1.2 let 1.3 const 1.4 区别总结 2.解构赋值 2.1 基本解构化赋值 2.2 数组取值 2.3 对象解构化赋值和取值 2.4 Math对象的解构化使用 3. 字符串扩展 3.1 新增字符串遍历方式 3.2 模版字符串 3.3 字符串…

数据库学习笔记

一、数据库相关概念 主流的关系型数据库管理系统&#xff08;DBMS&#xff09; 关系型数据库以 表格 的形式存在&#xff0c;以 行和列 的形式存取数据&#xff0c;关系型数据库这一系列的行和列被称为表&#xff0c;无数张表组成了 数据库 &#xff0c;常见的关系型数据库有 …

绿色积分引领:我店平台的可持续消费革命

在当今数字化浪潮的推动下&#xff0c;“我店”凭借其创新的环保积分系统&#xff0c;在消费市场中脱颖而出&#xff0c;逐渐改变着市场的结构。本文将详细分析该平台的竞争优势、市场策略以及它如何利用创新手段塑造未来的消费趋势。 一、环保积分&#xff1a;消费体验革新的关…

在ElementUI项目中集成iconfont图标库

在前端项目开发中经常会遇到使用的组件库提供的ICON图标不够用的情况。最常见的解决方案无非就是把设计图的图标切图引入到项目中。还有就是使用svg图标&#xff0c;封装一个渲染组件在项目里面直接引入这个组件。 本文将介绍另一种方法&#xff0c;即集成iconfont图标库的图标…

redis面试(二十二)读锁释放

假设现在已经有各种锁的重入什么的&#xff0c;那如何释放锁&#xff1f; 读锁读锁 假如说&#xff0c;同一个线程多次加读锁&#xff0c;或者不同的线程加了多个读锁 当前的锁结构长这样 anyLock: { “mode”: “read”, “UUID_01:threadId_01”: 2, “UUID_02:threadId_02…

CRUD的最佳实践,联动前后端,包含微信小程序,API,HTML等(二)

CRUD老生常谈&#xff0c;但是我搜索了一圈&#xff0c;发觉几乎是着重在后端&#xff0c;也就是API部分&#xff01; 无外乎2个思路 1.归总的接口&#xff0c;比如一个接口&#xff0c;实现不同表的CRUD 2.基于各自的表&#xff0c;使用代码生成器实现CRUD 个人来说是推荐2&am…

css设置input单选radio多选checkbox样式

最近接手一个古老的项目&#xff0c;要修改里边的主题颜色&#xff0c;使用css的var方法一路轻松&#xff0c;最后在input的单选radio和多选checkbox被踩了刹车&#xff0c;也是有几年没做这种原始的项目手生了&#xff0c;最后经过几番折腾后&#xff0c;通过input的伪元素将其…

FPGA开发——使用verilog实现异步FIFO

一、FIFO 介绍 1、FIFO的分类 FIFO &#xff08; First In First Out&#xff09;先进先出存储器。根据接入的时钟信号&#xff0c;可以分为同步 FIFO 和异步 FIFO 。 FIFO 底层是基于双口 RAM &#xff0c;同步 FIFO 的读写时钟一致&#xff0c;异步 FIFO 读时钟和…

一看就会的Mysql 集群技术

目录 一、Mysql介绍 1.1什么是MySQL 1.2MySQL的优势 1.3MySQL的常用语句 二、MySQL源码安装 三、实验练习 3.1MySQL部署 实验环境 实验步骤 1.创建用户&#xff0c;数据目录&#xff0c;更改权限 2.修改文件 3.初始化&#xff0c;会生成一个密码&#xff0c;将其保…

没有人会窃取你的想法,关键在于执行

没有人会窃取你的想法&#xff0c;关键在于执行 引言 当我第一次读到 Pieter Levels 的创业故事时&#xff0c;我感到无比激动和鼓舞。那种看到未来无限可能的感觉&#xff0c;让我充满了希望与奋斗的力量。他的经历不仅让我明白了创意的价值&#xff0c;更重要的是让我深刻感…

内网穿透的几种方法

内网穿透的几种方法 随着网络技术和应用的不断发展&#xff0c;越来越多的企业和个人需要实现内外网之间的数据交互和服务访问。然而&#xff0c;由于防火墙、NAT&#xff08;网络地址转换&#xff09;等安全措施的存在&#xff0c;直接从外部访问内部网络中的服务器或设备变得…

Linux基础软件-dns(一)

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux进阶部分又分了很多小的部分,我们刚讲完了Linux日常运维。讲的那些东西都算是系统自带的&#xff0c;但是Linux作为一个…