【MybatisPlus】简介与使用

MyBatisPlus

1.简介

MyBatisPlus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生

官网:https://baomidou.com/

MyBatis-Plus特性:

  • 无侵入:只做增强不做改变,不会对现有的工程产生影响
  • 强大的CRUD操作:内置通用Mapper,少量配置即可实现单表CRUD操作
  • 支持Lambda:编写查询条件无需担心字段写错
  • 支持主键自动生成
  • 内置分页插件

开发方式

  • 单独使用MyBatis-Plus
  • 基于Spring使用MyBatis-Plus
  • 基于SpringBoot使用MyBatis-Plus(最常用)

maven坐标

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3</version>
</dependency>
2.CRUD接口

MP框架提供常用的CRUD方法,这些方法都是定义在BaseMapper接口中的,开发过程中经常使用这写方法操作数据库

3.常用注解
3.1 @TableName注解

通过@TableName注解可以映射实体类和表的对应关系

  • 名称:@TableName

  • 类型:类注解

  • 位置:模型类上

  • 作用:设置当前类对应与数据库表关系

  • 示例

    @TableName("t_user") //当前实体类对应的表为t_user
    public class User {
        private Long id;
    }
    

    注:如果类名和表名一致,MP可以自动进行映射,此时@TableName注解可以省略

3.2 @TableField注解

通过@TableField注解可以映射实体类的属性和表字段的对应关系

  • 名称:@TableField

  • 类型:属性注解

  • 位置:模型类属性上

  • 作用:设置当前属性对应的数据库表中的字段关系

  • 相关属性

    value:设置数据库表字段名称

    exist:设置属性在数据库表字段中是否存在,默认为true

  • 示例

    public class User {
        @TableField(value="pwd") //当前属性对应的字段为pwd
        private String password;
        
        @TableField(exist = false) //当前属性在表中没有对应的字段
        private String online;
    }
    

    如果属性名和字段名一致,MP可以自动进行映射,此时@TableField注解可以省略

    如果属性名使用驼峰命名法命名,字段名使用对应的下划线分割命名,MP可以自动进行映射,此时@TableField可以省略

3.3@TableId注解

通过@TableId注解可以映射实体类的属性和表主键字段的对应关系,还可以设置主键的生成策略

  • 名称:@TableId

  • 类型:属性注解

  • 位置:模型类中用于标注在逐渐的属性上

  • 相关属性

    value:设置数据库主键字段名称,如果属性名和字段名一致,可以省略此属性

    type:设置主键的生成策略,值参照IdType枚举值

  • 示例

    public class User {
        @TableId(type = IdType.AUTO) //当前id属性和表的主键字段id对应,并且设置主键生成策略为AUTO
        private Long id;
    }
    

主键生成策略

  • AUTO:使用数据库id自增策略控制id生成
  • NONE:不设置id生成策略
  • INPUT:用户手工输入id
  • ASSIGN_ID:以雪花算法生成id(可兼容数值型与字符串型)

为了简化开发,可以在application,yml中配置全局的主键生成策略

mybatis-plus:
  global-config:
    db-config:
      id-type: assign_id #全局设置主键生成策略
4.条件构造器

MP对于Service层的支持,提供操作数据库的方法
IService接口:
在这里插入图片描述
IService接口实现类:
在这里插入图片描述
MP对于Mapper层的支持,提供操作数据库的方法
在这里插入图片描述

4.1 条件构造器介绍

通过条件构造器(Wrapper),可以控制最终生成的 SQL 语句的条件部分,如下:

  • select ____ from table where ____ order by ____
  • update table set ____ where ____
  • delete from table where____

通过条件构造器,就可以控制上面SQL语句中____位置的SQL片段,在项目开发过程中经常使用到

mybatis-plus支持service层继承IService接口,mapper层继承BaseMapper接口,IService接口和BaseMapper接口中有很多方法,都需要条件构造器作为参数

4.2使用较多的条件构造器
  • QueryWrapper

    通过QueryWrapper条件构造器,可以控制最终生成的查询、删除类的SQL语句

    SQL结构:

    select_from table where_order by_

    delete from table where_

    示例:

    @Service
    public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements IStudentService {
        //创建 QueryWrapper对象
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.select("id","name");//设置查询字段
        queryWrapper.gt("age",20);//添加查询条件,要求age大于20
        queryWrapper.eq("province","陕西省");//添加查询条件,要求省份是陕西省
        queryWrapper.like("name","zhangsan");//模糊查询
        queryWrapper.orderByDesc("id");//排序条件,根据id字段进行降序排序   
        List<Student> studentList = getList(queryWrapper);
       
    }
    
  • LambdaQueryWrapper

    使用QueryWrapper设置条件时,是通过字符串指定字段名,在编译阶段无法发现错误,程序运行阶段就会抛出异常

    LambdaQueryWrapper的作用和QueryWrapper相同,都是控制最终生成的查询、删除类的SQL语句。不同点在于语法层面。QueryWrapper是通过字段名来设置条件,LambdaQueryWrapper是通过Lambda语法来设置条件,可以做到在编译时期能够发现错误

    示例:

    @Service
    public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements IStudentService {
        //创建LambdaQueryWrapper对象
        LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper();
        queryWrapper.select(Student:id,Student:name);//设置查询字段
        queryWrapper.gt(Student:age,20);//添加查询条件,要求age大于20
        queryWrapper.eq(Student:privince,"陕西省");//添加查询条件,要求省份是陕西省
        queryWrapper.like(Student:name,"zhangsan");//模糊查询
        queryWrapper.orderByDesc(Student:id);//排序条件,根据id字段进行降序排序   
        List<Student> studentList = getList(queryWrapper);
       
    }
    
  • UpdateWrapper

    通过 UpdateWrapper 条件构造器,可以控制最终生成的更新类的SQL语句。

    **SQL结构:**update table set _______ where _______

    示例:

    @Service
    public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements IStudentService {
        //创建QueryWrapper对象
        UpdateWrapper updateWrapper = new UpdateWrapper();
        updateWrapper.set("name","zhangsan");//将姓名修改为zhangsan
        updateWrapper.gt("age",20);//添加查询条件,要求age大于20
        update(updateWrapper)
       
    }
    
  • LambdaUpdateWrapper

    LambdaUpdateWrapper的作用和UpdateWrapper相同,都是控制最终生成的更新类的SQL语句。不同点在于语法层面。UpdateWrapper是通过字段名来设置条件,LambdaUpdateWrapper是通过Lambda语法来设置条件,可以做到在编译期就能够发现错误。

    @Service
    public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements IStudentService {
        //创建QueryWrapper对象
        UpdateWrapper updateWrapper = new UpdateWrapper();
        updateWrapper.set(Student:name,"zhangsan");//将姓名修改为zhangsan
        updateWrapper.gt(Student:age,20);//添加查询条件,要求age大于20
        update(updateWrapper)
       
    }
    

    项目开发中建议使用 LambdaUpdateWrapper 来代替 UpdateWrapper

    在使用条件构造器进行条件构造时,可以使用链式编程

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一文深入理解Linux进程间通信

一、进程间通信的本质 什么是进程间通信&#xff1f;为什么要有进程间通信&#xff1f; 为什么能进程间通信&#xff1f; 1.1 为什么要通信 我们先拿人来做个类比&#xff0c;人与人之间为什么要通信&#xff0c;有两个原因。首先是因为你有和对方沟通的需求&#xff0c;如…

常用的工作资料怎么在电脑上记录呢?

在现代工作中&#xff0c;我们经常需要记录各种各样的工作资料&#xff0c;例如会议记录、项目计划、待办事项等等。传统的纸质笔记本虽然方便携带&#xff0c;但难以整理和检索。而在电脑上直接记录常用的工作资料&#xff0c;在记录、整理、查看、使用等方面都是更为高效、便…

什么是搜索相关性?AI如何驱动搜索相关性?

训练数据驱动机器学习&#xff0c;机器学习促进丰富的人机交互体验。在快速迭代的互联网时代&#xff0c;我们不断被各种广告铺盖&#xff0c;甚至经常细思极恐&#xff0c;“天呐&#xff0c;小红书怎么知道我面膜没了。”这都是算法和机器学习的鬼斧神工洞察着用户的搜索意图…

使用Microsoft Dynamics AX 2012 - 4. 销售和配送

销售和分销的主要职责是为客户提供您的商品和服务。为了完成这项任务&#xff0c;销售和分销需要通过分拣、运输和开具发票来处理销售订单&#xff0c;从而管理客户的材料需求。 销售和配送业务流程 在我们开始详细介绍之前&#xff0c;下面几行概述了销售和配送中的业务流程…

Imaris 卡退,是不是缓存盘没有设置好?

必须记录一下&#xff0c;从Imaris哔哩哔哩官方视频上学到的&#xff0c;如何设置缓存位置&#xff0c;尤其是做3D视频的时候。 但是隔一段时间就忘记&#xff0c;找不到当时的哔哩哔哩视频 这里记一下 如果是空间比较小的C盘&#xff0c;可以改成一个空间大一点的位置。 把缓…

vue3.0 + qiankun遇到的问题

进入子应用再回到主应用切换动态路由时 TypeError: Cannot read properties of undefined (reading ‘appWrapperGetter’) application ‘plat’ died in status UNMOUNTING: instance.$destroy is not a function 第一个报错是因为子应用切走时没有销毁 vue的实例&#xff0…

React中封装echarts图表组件以及自适应窗口变化

文章目录 前言环境代码接口使用效果后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;react.js &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误&#xff0c;…

自动化脚本不稳定,原来是软件弹窗惹的祸,2个方法解决!

很多同学在学习 App 自动化或者在项目中落地实践 App 自动化时&#xff0c;会发现编写的自动化脚本无缘无故的执行失败、不稳定。 而导致其问题很大原因是因为应用的各种弹窗&#xff08;升级弹窗、使用过程提示弹窗、评价弹窗等等&#xff09;&#xff0c;比如这样的&#xff…

sizeof和strlen的区别

目录 一、 sizeof 二、 strlen 三、 sizeof 和 strlen的对比 一、 sizeof 在学习操作符的时候&#xff0c;我们学习了 sizeof &#xff0c; sizeof 计算变量所占内存内存空间大小的&#xff0c;单位是字节&#xff0c;如果操作数是类型的话&#xff0c;计算的是使⽤类型创…

No such module ‘FacebookCore‘

在下面的地方添加这个库

算法——滑动窗口(Sliding Window)

一、背景知识 滑动窗口算法&#xff08;Sliding Window&#xff09;&#xff1a; 在给定数组 / 字符串上维护一个固定长度或不定长度的窗口。可以对窗口进行滑动操作、缩放操作&#xff0c;以及维护最优解操作。题型一&#xff1a;固定长度题型二&#xff1a;不固定长度 二、例…

【Java】智慧工地管理系统源代码,支持二次开发,SaaS模式

智慧工地系统围绕工程现场人、机、料、法、环及施工过程中质量、安全、进度、成本等各项数据满足工地多角色、多视角的有效监管,实现工程建设管理的降本增效。 一、行业现状 1、施工现场管理难&#xff1a;安全事故频发&#xff0c;人工巡检难度大&#xff0c;质量进度协同难等…

一文让你上手Linux常用命令(考前十分钟快速突击+零基础阅读)

文章目录 前言Linux 常用命令1. 基本操作lscdpwd 2. 对文件的操作touchcatechovim 3. 对目录的操作mkdirrm 4. 移动文件 / 目录的操作cpmv 5. 总结基本操作6. 必不可少的实用操作mangreppsnetstat 总结 前言 本文内容为 Linux 的一些超常用命令, 内容不多且十分实用, 这些命令…

前端开发学习 (二) 事件修饰符、系统命令

其实&#xff0c;我们上一章的时候就已经说过了一些系统指令&#xff0c;这里详细介绍一下 一、v-on的事件修饰符 事件作用click点击时触发submit表单被提交时触发input输入框发生改变时触发keyup按键松开时触发keydown按键按下时触发mouseover鼠标悬停触发mouseout当鼠标移开…

Python基础教程: sorted 函数

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 sorted 可以对所有可迭代的对象进行排序操作&#xff0c; sorted 方法返回的是一个新的 list&#xff0c;而不是在原来的基础上进行的操作。 从新排序列表。 &#x1f447; &#x1f447; &#x1f447; 更多精彩机密、教程…

数字IC基础:有符号数和无符号数加、减法的Verilog设计

相关阅读 数字IC基础https://blog.csdn.net/weixin_45791458/category_12365795.html?spm1001.2014.3001.5482 本文是对数字IC基础&#xff1a;有符号数和无符号数的加减运算一文中的谈到的有符号数加减法的算法进行Verilog实现&#xff0c;有关算法细节请阅读原文&#xff0…

一个月B站涨粉200万,品牌号不可错过的吸粉秘籍

越来越多品牌为了持续在B站营销而创建品牌官方账号&#xff0c;发布原创作品融入B站UP主中&#xff0c;吸引B站用户塑造品牌形象&#xff0c;提高品牌传播度、品牌声量。 据飞瓜数据&#xff08;B站版&#xff09;统计&#xff0c;B站有着超过2万个品牌号&#xff0c;本篇文章…

Linux系统管理与服务器安全:构建稳健云数据中心

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 在当今数字化时代&#xff0c;云数据中心已经成…

【23真题】劝退211!今年突变3门课!

今天分享的是23年云南大学847&#xff08;原827&#xff09;的考研试题及解析。同时考SSDSP的院校做一个少一个&#xff0c;珍惜&#xff01;同时考三门课的院校&#xff0c;复习压力极大&#xff0c;但是也会帮大家劝退很多人&#xff0c;有利有弊&#xff0c;请自行分析~ 本…

【人工智能】知识表示与知识图谱

目录 前言 一、知识与知识表示的概念 二、知识图谱 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&#x1f4da;。 &#x1f4e3;如…