2024年最全mp自动填充、乐观锁、分页、逻辑删除、Wapper(1),跳槽字节跳动

最后

面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典

  • Java核心知识整理

2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

Java核心知识

  • Spring全家桶(实战系列)

2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

  • 其他电子书资料

2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

此时测试操作就可以使version+1

测试,


@Test

public void testOptimisticLockerFail() {

 //查询

 User user = userMapper.selectById(1L);

 //修改数据

 user.setName("1");

 user.setEmail("1@qq.com");

 //失败案例   模拟取出数据后,数据库中version实际数据比取出的值大,即已被其它线程修改并更新了version

 user.setVersion(user.getVersion() - 1);

 //执行更新

 userMapper.updateById(user);

}

多个id查询


@Test

public void testSelectBatchIds(){

 List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));

 users.forEach(System.out::println);

}

通过map封装查询条件


@Test

public void testSelectByMap(){

 HashMap<String, Object> map = new HashMap<>();

 map.put("name", "Helen");

 map.put("age", 18);

 List<User> users = userMapper.selectByMap(map);

 users.forEach(System.out::println);

}

map的key要对应数据库名

分页

MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能

(1)创建配置类 此时可以删除主类中的 @MapperScan 扫描注解


/**

* 分页插件

*/

@Bean

public PaginationInterceptor paginationInterceptor() {

 return new PaginationInterceptor();

}

测试


public void testSelectPage() {

 Page<User> page = new Page<>(1,5);

 userMapper.selectPage(page, null);

 page.getRecords().forEach(System.out::println);

 System.out.println(page.getCurrent());

 System.out.println(page.getPages());

 System.out.println(page.getSize());

 System.out.println(page.getTotal());

 System.out.println(page.hasNext());

 System.out.println(page.hasPrevious());

}

逻辑删除


物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据

逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据 库中仍旧能看到此条数据记录

数据库中添加 deleted字段

ALTER TABLE `user` ADD COLUMN `deleted` boolean

不过数据库中没有布尔值,添加后是tinyint类型

实体类添加deleted 字段

并加上 @TableLogic 注解 和 @TableField(fill = FieldFill.INSERT) 注解


@TableLogic

@TableField(fill = FieldFill.INSERT)

private Integer deleted;

元对象处理器接口添加deleted的insert默认值


@Override

public void insertFill(MetaObject metaObject) {

 ......

 this.setFieldValByName("deleted", 0, metaObject);

}

application.properties 加入配置,默认值,不写也可以

mybatis-plus.global-config.db-config.logic-delete-value=1

mybatis-plus.global-config.db-config.logic-not-delete-value=0

测试后,数据并没有被删除,deleted字段的值由0变成了1

再次查询时,mp相当于在sql后都加了WHERE deleted=0

Wapper


如果想进行复杂条件查询,那么需要使用条件构造器 Wapper,涉及到如下方法

seletOne返回的是一条实体记录,当出现多条时会报错


@Test

public void testSelectOne() {

 QueryWrapper<User> queryWrapper = new QueryWrapper<>();

 queryWrapper.eq("name", "Tom");

 User user = userMapper.selectOne(queryWrapper);

 System.out.println(user);

}

between、notBetween包含大小边界

allEq


@Test

public void testSelectList() {

 QueryWrapper<User> queryWrapper = new QueryWrapper<>();

 Map<String, Object> map = new HashMap<>();

 map.put("id", 2);

 map.put("name", "Jack");

 map.put("age", 20);

 queryWrapper.allEq(map);

 List<User> users = userMapper.selectList(queryWrapper);

 users.forEach(System.out::println);

}

like、notLike、likeLeft、likeRight


@Test

public void testSelectMaps() {

 QueryWrapper<User> queryWrapper = new QueryWrapper<>();

 queryWrapper

 .notLike("name", "e")

 .likeRight("email", "t");

 List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);//返回值是Map

 maps.forEach(System.out::println);

}

inSql、notinSql:可以实现子查询


@Test

public void testSelectObjs() {

 QueryWrapper<User> queryWrapper = new QueryWrapper<>();

 //queryWrapper.in("id", 1, 2, 3);

 queryWrapper.inSql("id", "select id from user where id < 3");

 List<Object> objects = userMapper.selectObjs(queryWrapper);//返回值是Object列表

 objects.forEach(System.out::println);

}

or、and

不调用or则默认为使用 and 连

最后总结

ActiveMQ+Kafka+RabbitMQ学习笔记PDF

image.png

  • RabbitMQ实战指南

image.png

  • 手写RocketMQ笔记

image.png

  • 手写“Kafka笔记”

image

关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

外链图片转存中…(img-blxYEQMg-1715087103788)]

关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

### 回答1: Mybatis-Plus的Wrapper是一个查询条件构造器,可以用于构建复杂的SQL查询条件。它提供了多种查询条件的封装方法,如eq、ne、gt、ge、lt、le、like、in、notIn等,可以方便地构建出各种复杂的查询条件。同时,Wrapper还支持链式调用,可以更加灵活地构建查询条件。除此之外,Wrapper还提供了一些其他的查询方法,如select、groupBy、orderBy等,可以帮助我们更加方便地构建查询语句。总之,Mybatis-Plus的Wrapper是一个非常实用的工具,可以帮助我们更加方便地构建复杂的SQL查询条件。 ### 回答2: Mybatis-plus是一款非常优秀的Mybatis增强工具,其内部提供了一个非常强大的Wapper(条件构造器)功能,让我们可以快速便捷地构造出各种复杂的SQL查询语句,同时兼顾了灵活性和可读性。 Mybatis-plus wapper主要是用来构建SQL查询的查询条件,它采用了链式编程的方式,使我们可以像书写自然语言一样,构造出各种条件查询语句。 使用Mybatis-plus wapper的最大好处就在于其方便和快捷。我们只需要通过API直接创建查询对象,然后用链式编程的方式设置查询条件,最后调用查询方法即可。这不仅提高了开发效率,还避免了手写SQL语句带来的错误和风险。 除了快捷和方便,Mybatis-plus wapper还具有极强的灵活性。通过其各种API,可以满足各类SQL查询需求,例如模糊查询、多表联查、自定义字段查询、分组聚合查询等。在实际开发中,我们可以根据业务需求自由选择使用各种API来构建查询条件,以满足不同场景下的查询需求。 总的来说,Mybatis-plus wapper是一款非常实用的工具,其在快捷性、方便性、灵活性等方面均有显著优势,可以大大简化我们的查询代码,提高项目开发效率和易维护性。 ### 回答3: Mybatis-Plus是一个开源的Mybatis增强工具库,它简化了Mybatis的开发流程,提供了一些常用且优化的查询,更新等操作。Mybatis-Plus使用了Wapper作为查询条件构造器,它可以通过链式调用的方式方便的构建查询条件。Wapper是Mybatis-Plus中核心的查询条件构造器,它的主要作用是生成查询的SQL语句。 Wapper可以灵活的支持多种查询条件的组合,例如:数值、日期、字符串、枚举等类型的比较、like语句、in语句、between语句等。通过Wapper,我们可以方便的构建复杂的查询语句,从而快速的实现数据库操作。 当前,Mybatis-Plus支持两种类型的Wapper:EntityWrapper和Wrapper。其中EntityWrapper是对实体类进行的条件构造器,可以方便的基于实体类的属性值进行查询,而Wrapper则是一个通用的条件构造器,可以方便的进行各种类型的比较、模糊查询等操作。另外,Wapper还支持and和or的组合方式,可以将多个查询条件进行组合。 在使用Mybatis-Plus进行开发时,我们可以通过QueryWrapper、UpdateWrapper等工具类来实现对数据的CRUD操作。QueryWrapper可以帮助我们构建查询条件,UpdateWrapper可以帮助我们构建更新操作的条件,通过这些工具类,我们可以快速、灵活的实现各种复杂的数据库操作。总之,Wapper是Mybatis-Plus中最重要的组件之一,它可以帮助我们快速、灵活的构建查询条件,从而简化Mybatis的使用,并提高了开发效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值