我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mybatis-plus学习笔记

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mybatis-plus学习笔记

Mybatis-plus

id设置的值

1.ASSIGN_ID(雪花算法)

如果不设置 type 值,默认则使用 IdType.ASSIGN_ID 策略(自 3.3.0 起)。该策略会使用雪花算法自动生成主键 ID,主键类型为 Long 或 String(分别对应 MySQL 的表字段为 BIGINTVARCHAR

@Datapublic class UserInfo {    //指定主键生成策略使用雪花算法(默认策略)    @TableId(type = IdType.ASSIGN_ID)    private Long id;    private String userName;    private String passWord;}
2.ASSIGN_UUID(不含中划线的UUID)

如果使用 IdType.ASSIGN_UUID 策略,则会自动生成不含中划线的 UUID 作为主键。主键类型为 String,对应 MySQL 的表字段为 VARCHAR(32)

@Datapublic class UserInfo {    //指定主键生成策略为不含中划线的UUID    @TableId(type = IdType.ASSIGN_UUID)    private String id;    private String userName;    private String passWord;}
3.AUTO(数据库 ID 自增)

对于像 MySQL 这样的支持主键自动递增的数据库,我们可以使用 IdType.AUTO 策略。

@Datapublic class UserInfo {    //指定主键使用数据库ID自增策略    @TableId(type = IdType.AUTO)    private Integer id;    private String userName;    private String passWord;}
4.NONE(无状态)

如果使用 IdType.NONE 策略,表示未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)

5.全局策略配置
mybatis-plus.global-config.db-config.id-type=auto

配置文件

如果数据库中所有表都有个表名前缀,比如我们想让 t_user_info 表仍然对应 UserInfo 实体类,可以添加如下全局配置设置表名前缀:

mybatis-plus.global-config.db-config.table-prefix=t_

实体类上的注解,如实体类user名字,数据库的数据表是t_user加上这个就行

注解类

@TableName

除了上面两种全局配置方法外,我们还可以使用 @TableName 表名注解指定当前实体类对应的表名,比如下面 UserInfo 实体类对应表名为 user:

@Data@TableName(value = "user")public class UserInfo {    private Integer id;    private String userName;    private String passWord;
@TableId和 @TableField

除了全局配置方法外,我们还可以使用 @TableId 注解(标注在主键上)和 @TableField 注解(标注在其他成员属性上)来指定对应的字段名:

@Datapublic class UserInfo {    @TableId(value = "uuid")    private Integer id;    @TableField(value = "uname")    private String userName;    @TableField(value = "pword")    private String passWord;}

设置模糊查询@TableField

@Datapublic class UserInfo {    private Integer id;    @TableField(condition = SqlCondition.LIKE)    private String userName;    private String passWord;    private Integer age;}

函数

select
1.selectById(根据 id 查询一条记录)
@RestControllerpublic class HelloController {     @Autowired    UserInfoMapper userInfoMapper;     @RequestMapping("/test")    public void test(){        // 根据id查询数据        UserInfo user = userInfoMapper.selectById(2);        System.out.println(user);    }}
2.selectOne(使用查询构造器,查询一条记录):

注意:是数据库中符合传入条件的记录有多条,那就不能用这个方法,会报错。

(1)查询前我们需要先创建相应的 QueryWrapper,通过自己写表中相应的属性来构造 where 条件:
// 查询条件:名字中包含'ha'并且年龄小于40QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();queryWrapper.like("user_name","ha").lt("age",40);// 开始查询UserInfo user = userInfoMapper.selectOne(queryWrapper);System.out.println(user);
(2)除了使用 QueryWrapper 外,我们还可以 lambda 条件构造器做同样的事。

提示:lambda 条件构造器好处是由于它是通过调用实体类中的方法,如果方法名称写错,会直接报错,从而提前纠错。不像 QueryWrapper 是通过自己写表中相应的属性来构造 where 条件,容易发生拼写错误,等到运行时才发现。
// 查询条件:名字中包含’ha’并且年龄小于40
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(UserInfo::getUserName,“ha”).lt(UserInfo::getAge,40);
// 开始查询
UserInfo user = userInfoMapper.selectOne(queryWrapper);
System.out.println(user);

  • MyBatis-Plus 提供了 4 种方式创建 lambda 条件构造器,前三种分别如下:
LambdaQueryWrapper<UserInfo> lqw1 = new QueryWrapper<UserInfo>().lambda();LambdaQueryWrapper<UserInfo> lqw2= new LambdaQueryWrapper<>();LambdaQueryWrapper<UserInfo> lqw3 = Wrappers.lambdaQuery();
  • 无论是之前的 lambda 构造器还是 queryWrapper,每次编写完条件构造语句后都要将对象传递给 mapper 的 selectOne 方法,比较麻烦,MyBatisPlus 提供了第四种函数式编程方式,不用每次都传。
UserInfo userInfo = new LambdaQueryChainWrapper<>(userInfoMapper)        .like(UserInfo::getUserName,"ha")        .lt(UserInfo::getAge,40)        .one();
  • 如果想通过对象中某些属性进行模糊查询,我们可以在跟数据库表对应的实体类中相应的属性标注相应注解即可。比如我们想通过姓名进行模糊查询用户:
@Datapublic class UserInfo {    private Integer id;    @TableField(condition = SqlCondition.LIKE)    private String userName;    private String passWord;    private Integer age;}
3.selectBatchIds(根据 ID 批量查询,返回一个 List)
List<Integer> ids = new ArrayList<>();ids.add(1);ids.add(2);ids.add(3);List<UserInfo> users = userInfoMapper.selectBatchIds(ids);System.out.println(users);
4.selectByMap(通过 Map 封装的条件查询,返回一个 List)

注意:map 写的是数据表中的列名,而非实体类的属性名。比如属性名为 userName,数据表中字段为 user_name,这里应该写的是 user_name。
Map columnMap = new HashMap<>();
columnMap.put(“user_name”, “hangge”);
columnMap.put(“age”, 22);
List users = userInfoMapper.selectByMap(columnMap);
System.out.println(users);

5.selectList(使用查询构造器,返回一个 List)
注意:selectList 使用与 selectOne 类似,不同的是当数据库中符合传入的条件的记录有多条,使用 selectOne 会报错。这时就要使用 selectList。1// 查询条件:名字中包含'ha'并且年龄小于40QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();queryWrapper.like("user_name","ha").lt("age",40);// 开始查询List<UserInfo> users = userInfoMapper.selectList(queryWrapper);System.out.println(user);
6.selectCount(使用查询构造器,查询总记录数):

selectCount 的用法和前面的 selectList 很像,都是传入一个查询构造器进行查询,不同的是 selectCount 返回的是一个 Integer 值(符合条件的记录数):

UserInfo userInfo = new UserInfo();userInfo.setAge(22);QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>(userInfo);// 开始查询Integer count = userInfoMapper.selectCount(queryWrapper);System.out.println(count);
7.selectObjs(使用查询构造器,返回一个 List):

selectObjs 的用法和前面的 selectList 很像,都是传入一个查询构造器进行查询,然后返回一个 List。不同在于 selectObjs 返回的 List 里面只有返回的第一个字段值:

UserInfo userInfo = new UserInfo();userInfo.setAge(22);QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>(userInfo);// 开始查询List<Object> users = userInfoMapper.selectObjs(queryWrapper);System.out.println(users);
条件构造器
1,相等、不相等
(1)allEq 表示全部 eq(或个别 isNull):

方法最后一个参数 null2IsNull 是可选的(默认为 true),为 true 时则在 map 的 value 为 null 时调用 isNull 方法,为 false 时则忽略:

  • allEq({id:1,user_name:“hangge”,age:null}) — 生成的sql为 —> id = 1 and user_name = ‘hangge’ and age is null
  • allEq({id:1,user_name:“hangge”,age:null}, false) — 生成的sql为 —> id = 1 and user_name = ‘hangge’
Map<SFunction<UserInfo, ?>, Object> map = new HashMap<>();map.put(UserInfo::getId, 3);map.put(UserInfo::getUserName, "hangge");map.put(UserInfo::getAge, null); List<UserInfo> userInfos = new LambdaQueryChainWrapper<>(userInfoMapper)        .allEq(map)        .list();
(2)eq 表示等于(=),ne 表示不等于(<>)
List<UserInfo> userInfos = new LambdaQueryChainWrapper<>(userInfoMapper)        .eq(UserInfo::getId, 1) // id = 1        .ne(UserInfo::getAge, 22) // age <> 22        .list();
2,大于、小于
(1)gt 表示大于(>)、ge 表示大于等于(>=)、lt 表示小于(<)、le 表示小于等于(<=)

来源地址:https://blog.csdn.net/qq_43842093/article/details/126446116

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Mybatis-plus学习笔记

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mybatis学习笔记之mybatis注解配置详解

Java API既然你已经知道如何配置 MyBatis 和创建映射文件,你就已经准备好来提升技能了。 MyBatis 的 Java API 就是你收获你所做的努力的地方。正如你即将看到的,和 JDBC 相比, MyBatis 很大程度简化了
2023-05-30

GNS3学习笔记

最近在自学CCNA,为了搭建路由模拟器先后下载了Boson Network 、DynamipsGUI用的不是很顺手,后来听朋友推荐GNS3很好用,他们报的CCNP培训班老师用的就是GNS,平时的模拟实验都是用这个完成的,由于我本机已有下好的
2023-01-31

20200616学习笔记

count(*) 的实现方式 在不同的 MySQL 引擎中,count(*) 有不同的实现方式 MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高 而 InnoDB 引擎就麻烦了,它执行 coun
20200616学习笔记
2018-10-19

Kafka 学习笔记

😀😀😀创作不易,各位看官点赞收藏. 文章目录 Kafka 学习笔记1、消息队列 MQ2、Kafka 下载安装2.1、Zookeeper 方式启动2.2、KRaft 协议启动2.3
2023-08-30

20200619 学习笔记

主键和唯一的区别 主键:唯一、不为空、只能有一个、可以组合但不推荐 唯一:唯一、可为空、可以多个、可以组合但不推荐 外键 要求在从表设置外键关系 从表的外键列的类型和主表的关联列的类型要求一致或兼容 主表的关联列必须时一个key 插入数据时,
20200619 学习笔记
2019-12-15

Mycat 学习笔记

概述1. Mycat 是什么?Mycat 是数据库中间件,连接 Java 应用程序和数据库,它的作用如下:读写分离数据分片:垂直拆分(分库)、水平拆分(分表)、垂直+水平拆分(分库分表)多数据源整合2. Mycat 原理Mycat 拦截了用户发送过来的 SQL
Mycat 学习笔记
2019-10-05

sqlite3 学习笔记

#!/usr/bin/env python3# -*- coding: utf-8 -*-# @descrip : operate SqLite intrface# @Time : 2020/04/22 21:57# @Author : mingfei
sqlite3 学习笔记
2017-12-28

学习笔记3

一文件查找和压缩1文件查找locate 搜索依赖于数据库,非实时搜索,搜索新建文件需手动更新,适于搜索稳定不频繁修改文件 find 实时搜索,精确搜索,默认当前目录递归搜索 find用法 -maxdepth l
2023-01-31

H3CNE学习笔记

H3CNE五日“游”——之第一天废话少说 直接进入真题!!!!(哈哈 )H3CNE   H3C认证初级网络工程师第    一   节路由器、交换机及其操作系统介绍路由器1、 路由器的作用连接具有不同介质的链路连接网络或子网,隔离广播交换和维
2023-01-31

Python学习笔记

Python介绍Python是一种解释型、面向对象的语言。官网:www.python.orgPython环境解释器:www.python.org/downloads运行方式:交互模式。在IDLE中运行。脚本模式。文件的后缀名为.py。
2023-01-30

学习笔记(3)

1.* 匹配零个或多个字符(通配符中)2.ls 的-d选项不仅仅可以显示指定目录的信息,还可以用来表示不递归子文件夹。  # ls -dl /etc 显示/etc目录的信息  # ls -d /etc/* 显示/etc下面的文件和文件夹,并
2023-01-31

postgres学习笔记

将一个标识符变得受限同时也使它变成大小写敏感的,反之非受限名称总是被转换成小写形 式。例如,标识符FOO、foo和"foo"在PostgreSQL中被认为是相同的,而"Foo"和"FOO"则互 不相同且也不同于前面三个标识符(PostgreSQL将非受限名字转
postgres学习笔记
2018-01-09

20200618_MySQL学习笔记

加号 + Mysql中加号只能做运算符 select 100+90  ==> 190  select "100"+90 ==> 190  如果有一个是字符串,那么尝试转换成数值型,转换成功 select "jack" + 90 ==> 90 转换失败则
20200618_MySQL学习笔记
2014-11-26

MySQL学习笔记

作者: Grey原文地址:MySQL学习笔记说明注:本文中的SQL语句如果用到了特定方言,都是基于MySQL数据库。关于DDLDDL 的英文全称是 Data Definition Language,中文是数据定义语言。它定义了数据库的结构和数据表的结构。在 D
MySQL学习笔记
2015-01-17

20200617学习笔记

基数  一个索引上不同的值的个数,我们称之为“基数”(cardinality)。也就是说,这个基数越大,索引的区分度越好 我们可以使用 show index 方法,看到一个索引的基数 MySQL 是怎样得到索引的基数的呢? 采样统计 : 因为把整张表取出来一行
20200617学习笔记
2022-02-22

编程热搜

目录