MyBatisPlus入门

入门:

依赖:

<dependency>

    <groupId>com.baomidou</groupId>

    <artifactId>mybatis-plus-boot-starter</artifactId>

    <version>{version}</version>

</dependency>

配置:

## 去除logo

mybatis-plus:

  global-config:

    banner: false

  ## 日志输出sql语句

configuration:

    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private Long id;private String name;private Integer age;private String email;
}@Mapper
public interface UserMapper extends BaseMapper<User> {
}public interface UserService {List<User> selectList();
}@Service
public class UserServiceImpl implements UserService {@AutowiredUserMapper userMapper;public List<User> selectList(){return userMapper.selectList(null);}
}

简单定义对象,dao,以及service

继承BaseMapper后可使用一些简单的操作

userMapper.insert(user);userMapper.deleteById(10L);userMapper.updateById(user);userMapper.selectById(user);userMapper.selectList(Wrapper<T> queryWrapper);

除了Mapper接口,MybatisPlus还提供了IService接口和对应的实现类ServiceImpl,该实现类已经提供好了一些对应的Service相关的方法,在某些场景下,我们可以直接使用ServiceImpl提供的方法,实现对应的功能。此时Service接口可以继承IService<T>,Service实现类可以继承ServiceImpl<TMapper,T>

public interface UserService extends IService<User> {}@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic List<User> selectList() {return userMapper.selectList(null);}
}

 可以使用ServiceImpl类中的各种接口,还可以自定义xml文件,配置sql,与Mybstis一致

进阶:

1、表名和实体类名映射 -> 表名user   实体类名User

若是表名不一致,可以使用@TableName("user")注解

或若有前缀,则可以设置全局配置;例如:表名为:t_vip_user,其他表也都以t_vip为前缀

mybatis-plus:

  global-config:

    db-config:

      table-prefix: t_vip_

2、字段名和实体类属性名映射 -> 字段名name   实体类属性名name  (get属性)

2.1 支持注解映射

        当数据库字段和表实体类的属性不一致时,我们可以使用@TableField()注解改变字段和属性

的映射,让注解中的名称和表字段保持一致

如:此时将数据库字段的名称我们改为username,在根据实体类的属性拼接SQL的使用,就会使

@TableField("username")中指定的名称username进行拼接,完成查询

SELECT id,username AS name,email FROM user

2.2 关键字注解映射

        比如:desc   @TableField("‘desc   ’")   需要在双引号中加个单引号

3、字段名下划线命名方式和实体类属性小驼峰命名方式映射

字段名 user_email   实体类属性名 userEmail

MybatisPlus支持这种映射规则,可以通过配置来设置

mybatis-plus:

  configuration:

        map-underscore-to-camel-case: true 表示支持下划线到驼峰的映射

        map-underscore-to-camel-case: false 表示不支持下划线到驼峰的映射

4、特殊注解:

当数据库中有字段不希望被查询,可以通过@TableField(select = false)来隐藏这个字段,那在拼接SQL语句的时候,select后就不会拼接这个字段,

在实际开发中,有些字段不需要数据库存储,但是却需要展示,需要展示也就是意味着实体类中需要存在这个字段,我们称这些实体类中存在但是数据库中不存在的字段,叫做视图字段。通过@TableField(exist = false)来去掉这个字段,不让它作为查询字段。

5、条件构造器

        5.1 Wrapper

抽象类,条件类的顶层Wrapper,提供了一些获取和判断相关的方法

public abstract class Wrapper<T> implements ISqlSegment {public Wrapper() {}.....//各种方法
}

        5.2 AbstractWrapper

抽象类,Wrapper的子类,提供了所有的条件相关方法

public abstract class AbstractWrapper<T, R, Children extends AbstractWrapper<T, R, Children>> extends Wrapper<T> implements Compare<Children, R>, Nested<Children, Children>, Join<Children>, Func<Children, R> {}

        5.3 ​​​​​AbstractLambdaWrapper

抽象类,AbstractWrapper的子类,确定字段参数为方法引用类型

        5.4 ​​​​​​​QueryWrapper

类,AbstractWrapper的子类,如果我们需要传递String类型的字段信息,创建该对象

        5.5 LambdaQueryWrapper

类,AbstractLambdaWrapper的子类,如果我们需要传递方法引用方式的字段信息,创建该对象

        需要重点掌握QueryWrapper和LambdaQueryWrapper这两个类,在一般情况下,大多选择LambdaQueryWrapper,因为选择这种方式传递参数,不用担心拼写错误问题。

6、查询

6.1 eq 等值查询

  QueryWrapper<User> queryWrapper = new QueryWrapper<>();//2.设置条件,指定String字段名称和值queryWrapper.eq("name","Jack");//3.使用条件完成查询User user = userMapper.selectOne(queryWrapper);//1.创建QueryWrapper对象LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();//2.设置条件,指定String字段名称和值lambdaQueryWrapper.eq(User::getName,"Jack");//3.使用条件完成查询User user = userMapper.selectOne(lambdaQueryWrapper);//使用QueryWrapper<T>容易拼错字段名称   需注意//存在多条件查询或单条件查询时,前端传过来的值为null的情况下,如果直接查询,会将查询条件=null进行查询
//因此,可以使用
String name = null;
lambdaQueryWrapper.eq(name != null,User::getName,name);String email = null;
queryWrapper.eq(email != null,"email",email);

6.2 allEq 多条件查询

//eq演示多条件  LambdaQueryWrapper
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.eq(User::getName,"Jone");lambdaQueryWrapper.eq(User::getAge,18);User user = userMapper.selectOne(lambdaQueryWrapper);//allEq    QueryWrapper//1.创建QueryWrapper对象QueryWrapper<User> queryWrapper = new QueryWrapper<>();//2.构建条件MapHashMap<String, Object> hashMap = new HashMap<>();hashMap.put("name","Jone");hashMap.put("age",null);//3.使用条件完成查询// 参数params:表示传递的Map集合
//参数null2IsNull:表示对于为null的条件是否判断isNullqueryWrapper.allEq(hashMap,false);User user = userMapper.selectOne(queryWrapper);//allEq   LambdaQueryWrapper
Map<SFunction<User,?>, Object> map = new HashMap<>();
map.put(User::getName,"三沙");
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.allEq(map,false);User user = userMapper.selectOne(lambdaQueryWrapper);

6.3 ne 不等查询

  //1.创建QueryWrapper对象LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();//2.设置条件,指定String字段名称和值String name = "Jone";lambdaQueryWrapper.ne(User::getName,name);//3.使用条件完成查询List<User> users = userMapper.selectList(lambdaQueryWrapper);

6.4 范围查询

        6.4.1 gt 大于

        6.4.2 ge 大于等于

        6.4.3 lt小于 (<)

        6.4.4 le小于等于  (<=)

        6.4.5 between    范围查询       (between  ?  and ?)

        6.4.6 notBetween 范围查询 (not between  ?  and ?)

    //  gt//1.创建QueryWrapper对象LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();//2.设置条件,指定字段名称和值Integer age = 18;lambdaQueryWrapper.gt(User::getAge,age);//3.使用条件完成查询List<User> users = userMapper.selectList(lambdaQueryWrapper);

6.5 模糊查询

        6.5.1 like    (like %?%)

        6.5.2 notLike  (not like %?%)

        6.5.3 likeLeft   (like %?)

        6.5.4 likeRight  (like ?%)

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

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

相关文章

无涯教程-PHP - 标量函数声明

在PHP 7中&#xff0c;引入了一个新函数&#xff0c;即标量类型声明。标量类型声明有两个选项- Coercive - 强制性是默认模式。Strict - 严格模式必须明确提示。 可以使用上述模式强制执行以下类型的函数参数- intfloatbooleanstringinterfacesarraycallable 强制模…

opencv 进阶15-检测DoG特征并提取SIFT描述符cv2.SIFT_create()

前面我们已经了解了Harris函数来进行角点检测&#xff0c;因为角点的特性&#xff0c;这些角点在图像旋转的时候也可以被检测到。但是&#xff0c;如果我们放大或缩小图像时&#xff0c;就可能会丢失图像的某些部分&#xff0c;甚至有可能增加角点的质量。这种损失的现象需要一…

Revit 3D高效处理:cad exchanger sdk 3.21 Crack

3D 格式概述&#xff1a;Revit Revit 已成为寻求高效、准确的建筑信息建模的专业人士的首选解决方案。在这篇引人入胜的功能概述中了解 Revit 的特性和影响。 什么是Revit&#xff1f; Autodesk Revit 是一款流行的 CAD 软件&#xff0c;重点关注 BIM&#xff0c;被建筑师、工…

C++入门:引用是什么

目录 1.引用的概念 2.引用的特征 3.常引用 4.引用使用场景 5.传值&#xff0c;传引用效率比较 6.引用与指针的区别 1.引用的概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空 间&#xff0c;它和它引用…

AUTBUS全球首发,东土与您相约工博会

2023年中国国际工业博览会将于9月19日至9月23日在上海盛大举办。作为工博会重点参展企业之一&#xff0c;东土科技将重磅亮相6.1号馆工业自动化展&#xff08;展位号&#xff1a;6.1H-D137&#xff09;。 值得一提的是&#xff0c;AUTBUS 国际标准作为全球第一个基于时间敏感网…

LLMs 缩放法则和计算最优模型Scaling laws and compute-optimal models

在上一个视频中&#xff0c;您探讨了训练大型语言模型的计算挑战。在这里&#xff0c;您将了解关于模型大小、训练、配置和性能之间关系的研究&#xff0c;以确定模型需要多大。请记住&#xff0c;预训练期间的目标是最大化模型的学习目标性能&#xff0c;即在预测令牌时最小化…

LeetCode--HOT100题(38)

目录 题目描述&#xff1a;226. 翻转二叉树&#xff08;简单&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;226. 翻转二叉树&#xff08;简单&#xff09; 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 LeetCode做题链…

pytorch 入门1-tensor 广播 view reshape

tensor 的四则运算broadcast import torch import numpy as np # 张量tensor 随机初始化 x torch.rand(4,3) print(x) y torch.randn(4,3) print(y)# 初始化全零 张量 a torch.zeros((4,4),dtypetorch.long) print(a) #初始化全一 张量 b torch.ones(4,4) print(b) c tor…

多客户企业选择拥有哪些功能的CRM系统?

管理海量客户信息对于每一家企业都是巨大的挑战。粗放式的管理客户资料是对资源的一种浪费&#xff0c;让很多有意向的高价值客户流失。客户比较多&#xff0c;有什么CRM系统推荐吗&#xff1f;帮助企业轻松地跟进客户&#xff0c;提高销售效率&#xff1f; 1.易于使用 首先是…

macOS Ventura 13.5.1(22G90)发布(附黑/白苹果系统镜像地址)

系统镜像下载&#xff1a;百度&#xff1a;黑果魏叔 系统介绍 黑果魏叔 8 月 18 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.5.1 更新&#xff08;内部版本号&#xff1a;22G90&#xff09;&#xff0c;本次更新距离上次发布隔了 24 天。 本次更新重点修复了…

Docker部署MongoDB 5.0.5

1、查看目录 rootwielun:~# tree mongo mongo ├── conf │ └── mongod.conf ├── data ├── docker-compose.yml └── logrootwielun:~# cd mongo rootwielun:~/mongo# chmod 777 log2、配置docker-compose.yml rootwielun:~/mongo# cat docker-compose.yml ve…

【ES6】—【必备知识】—扩展运算符与rest参数

一、扩展运算符 1. 定义&#xff1a;把数组或类数组展开成用逗号隔开的值 function foo(a,b,c) {console.log(a,b,c) } let arr [1,2,3] foo(...arr)2. 把两个数组合并 2-1. ES5 实现 let arr1 [1,2,3] let arr2 [4,5,6] Array.prototype.push.apply(arr1, arr2) consol…

多线程+隧道代理:提升爬虫速度

在进行大规模数据爬取时&#xff0c;爬虫速度往往是一个关键问题。本文将介绍一个提升爬虫速度的秘密武器&#xff1a;多线程隧道代理。通过合理地利用多线程技术和使用隧道代理&#xff0c;我们可以显著提高爬虫的效率和稳定性。本文将为你提供详细的解决方案和实际操作价值&a…

文心一言 VS 讯飞星火 VS chatgpt (80)-- 算法导论7.4 5题

五、如果用go语言&#xff0c;当输入数据已经“几乎有序”时&#xff0c;插入排序速度很快。在实际应用中&#xff0c;我们可以利用这一特点来提高快速排序的速度。当对一个长度小于 k 的子数组调用快速排序时&#xff0c;让它不做任何排序就返回。当上层的快速排序调用返回后&…

国产精品:讯飞星火最新大模型V2.0

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

ethers.js2:provider提供商

1、Provider类 Provider类是对以太坊网络连接的抽象&#xff0c;为标准以太坊节点功能提供简洁、一致的接口。在ethers中&#xff0c;Provider不接触用户私钥&#xff0c;只能读取链上信息&#xff0c;不能写入&#xff0c;这一点比web3.js要安全。 除了之前介绍的默认提供者d…

VMware 使用U盘进入PE系统,下划线光标闪烁

一、前言 vmware虚拟机各种原因崩溃&#xff0c;然后又没有快照&#xff0c;怎么办&#xff1f; 或者 密码忘记了无法开机&#xff0c;这时候就想到使用PE了。 二、分析 但是使用U盘进入PE的时候&#xff0c;遇到了各种问题&#xff1a; 加载U盘修改启动顺序启动后出现下划线…

介绍Server-Sent Events,以及使用,超级简单!

一、SSE 的本质 严格地说&#xff0c;HTTP 协议无法做到服务器主动推送信息。但是&#xff0c;有一种变通方法&#xff0c;就是服务器向客户端声明&#xff0c;接下来要发送的是流信息&#xff08;streaming&#xff09;。 也就是说&#xff0c;发送的不是一次性的数据包&…

[四次挥手]TCP四次挥手握手由入门到精通(知识精讲)

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;(*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &am…

【Python教程】3道循环结构练习题,都会了吗?

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 练习1&#xff1a;输入一个数判断是不是素数。 from math import sqrtnum int(input(请输入一个正整数: )) end int(sqrt(num)) is_prime True for x in range(2, end 1):if num % x 0:is_prime Falsebreak if is_prime an…