m

MyBatisPlus架构图(盗用官网的,侵,删。)

SpringBoot第一个简单应用

8.编写测试类

运行结果:

常用注解

MyBatisPlus提供了一些注解供我们在实体类和表信息出现不对应的时候使用。通过使用注解完成逻辑上匹配。

注解名称说明

实体类的类名和数据库表名不一致

实体类的主键名称和表中主键名称不一致

实体类中的成员名称和表中字段名称不一致

排除实体类中非表字段

CURD

BaseMapper中封装了很多关于增删该查的方法,后期自动生成,我们直接调用接口中的相关方法即可完成相应的操作。
BaseMapper部分代码

插入一条记录测试:

条件构造器查询

除了 BaseMapper中提供简单的增删改查方法之外,还提供了很多关于区间查询,多表连接查询,分组等等查询功能,实现的类图如下所示:

通过观察类图可知,我们需要这些功能时,只需要创建

对象即可。

上面的日期查询使用的是占位符的形式进行查询,目的就是为了防止SQL注入的风险。

apply方法的源码

SQL 注入的例子:

queryWrapper.apply("date_format(create_time,'%Y-%m-%d')=2019-02-14 or true=true")
              .inSql("manager_id","select id from user where name like '王%'");

sql注入例子

在我们调用的查询语句中,通过查看源码(这里以 apply方法为例)可以看出,每个查询方法的第一个参数都是boolean类型的参数,重载方法中默认给我们传入的都是true。

这个condition的作用是为true时,执行其中的SQL条件,为false时,忽略设置的SQL条件。

在web开发中,controller层常常会传递给我们一个用户的对象,比如通过用户姓名和用户年龄查询用户列表。
我们可以将传递过来的对象直接以构造参数的形式传递给 QueryWrapper,MyBatisPlus会自动根据实体对象中的属性自动构建相应查询的SQL语句。

如果想通过对象中某些属性进行模糊查询,我们可以在跟数据库表对应的实体类中相应的属性标注注解即可。
比如我们想通过姓名进行模糊查询用户列表。

MybatisPlus提供了4种方式创建lambda条件构造器,前三种分别是这样的

QueryWrapper类已经提供了很强大的功能,而lambda条件构造器做的和QueryWrapper的事也是相同的为什么要冗余的存在lambda条件构造器呢?
QueryWrapper是通过自己写表中相应的属性进行构造where条件的,容易发生拼写错误,在编译时不会报错,只有运行时才会报错,而lambda条件构造器是通过调用实体类中的方法,如果方法名称写错,直接进行报错,所以lambda的纠错功能比QueryWrapper要提前很多。
举个例子:
查找姓名中包含”雨”字的员工信息。
使用QueryWrapper

queryWrapper.like("name","雨");

使用lambda

lambdaQueryWrapper.like(User::getName,"雨");

如果在拼写name的时候不小心,写成了naem,程序并不会报错,但是如果把方法名写成了getNaem程序立即报错。

第四种lambda构造器
细心的人都会发现无论是之前的lambda构造器还是queryWrapper,每次编写完条件构造语句后都要将对象传递给mapper 的selectList方法,比较麻烦,MyBatisPlus提供了第四种函数式编程方式,不用每次都传。

自定义SQL

UserMapper.xml

分页查询

MyBatis分页提供的是逻辑分页,每次将所有数据查询出来,存储到内存中,然后根据页容量,逐页返回。如果表很大,无疑是一种灾难!
MyBatisPlus物理分页插件

删除方式和update极其类似。

AR模式(Active Record)

直接通过实体类完成对数据的增删改查。

Model类中封装了很多增删改查方法,不用使用UserMapper即可完成对数据的增删改查。

主键策略

MyBatisPlus的主键策略封装在 IdType枚举类中。

在实体类中对应数据库中的主键id属性上标注注解 TableId(type='xxx')即可完成主键配置。

这种配置方式的主键策略只能在该表中生效,但是其他表还需要进行配置,为了避免冗余,麻烦,MybatisPlus提供了全局配置,在配置文件中配置主键策略即可实现。

如果全局策略和局部策略全都设置,局部策略优先。

基本配置

Original: https://www.cnblogs.com/handsome1013/p/12811634.html
Author: wjj1013
Title: MyBatisPlus学习整理(一)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/543407/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Nginx作为代理服务

    一、代理相关概念 1、什么是代理? 代理不直接让客户端请求源服务器,由代理服务器来代为办理。 生活中如 代理理财,代理收快递都是同一个道理。 2、代理的分类 按应用场景进行分类 正…

    Java 2023年5月30日
    081
  • AOP介绍

    java;gutter:true;/**作者:呆萌老师*☑csdn认证讲师*☑51cto高级讲师*☑腾讯课堂认证讲师*☑网易云课堂认证讲师*☑华为开发者学堂认证讲师*☑爱奇艺千人名…

    Java 2023年6月13日
    069
  • Spring Boot【快速入门】

    转自: https://www.cnblogs.com/wmyskxz/p/9010832.html Spring Boot 概述 Build Anything with Spri…

    Java 2023年5月30日
    077
  • Redis SCAN命令

    获取指定前缀的key 需求描述: Redis中有大量以xxx开头的key,在不使用keys命令的情况下,如何快速获取这些前缀的key 解决方案: redis自带的scan命令可以解…

    Java 2023年6月7日
    091
  • Redis锁相关

    Redis锁相关 君不见,高堂明镜悲白发,朝如青丝暮成雪。 背景:面试的时候被问到有哪些锁,很快脱口而出Volatile、Synchronized和ReentrantLock,也能…

    Java 2023年6月5日
    083
  • Java 微服务框架选型(Dubbo 和 Spring Cloud?)

    微服务(Microservices)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件…

    Java 2023年5月29日
    094
  • IntelliJ IDEA 快捷键

    参考资料 windows 和 Linux 下快捷键 功能 快捷键 智能代码补全 Ctrl + Shift + Space 全部查找 Double Shift Show intent…

    Java 2023年6月13日
    053
  • java 读取文本 读取每行字符串

    开发中难免遇到一些需要临时处理的问题, 比如产品经理给到你一个TXT文件,帮我把这个数据 怎么怎么样…很急 现在就要 当然这种事情也是见怪不怪 读取文件的代码其实平时用…

    Java 2023年6月5日
    080
  • 白嫖CSDN付费资源方法

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年5月29日
    069
  • 分布式锁的三种实现方式

    点赞再看,养成习惯,微信搜索「 小大白日志」关注这个搬砖人。 文章不定期同步公众号,还有各种一线大厂面试原题、我的学习系列笔记。 nacos eureka 应用 nacos是阿里巴…

    Java 2023年6月8日
    082
  • springboot2 xxl-job 调度中心

    1,下载自己需要的版本 1,https://github.com/xuxueli/xxl-job2,https://gitee.com/xuxueli0323/xxl-job/re…

    Java 2023年5月30日
    083
  • Markdown (一)

    Markdown 基础学习(一) Markdown初识 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。 使用 …

    Java 2023年6月7日
    0103
  • SpringBoot:Springboot项目中调用第三方jar包中的类时报错–注入类的两种方式

    场景:将一些公共的方法封装成了一个jar包,在其他项目中进行引用的时候报错 报错原因:bean没有注入,引进来的jar包没有被spring管理, 因为类没有被@Service,@R…

    Java 2023年5月30日
    077
  • 人生苦短,我用python

    今天开始自学Python。 找到神圣传说中的Python官网:https://www.python.org/,安装了Python3.6.5。 安装步骤省略。 安装requests库…

    Java 2023年6月7日
    087
  • 关系数据库元数据处理类(一) 创建MSSQL元数据具体处理类

    1 public class SqlServer : BaseMetadata 2 { 3 4 public SqlServer(string connectionString) …

    Java 2023年6月5日
    055
  • mybatis各阶段的详解

    1 本阶段的需要注意的几个点 配置的顺序,不配则不用管,配则必须按顺序来!!!!properties?,settings?,typeAliases?,typeHandlers?,o…

    Java 2023年6月8日
    0120
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球