前言技术之Mybatis Plus02

第一步:实体类中加入注解

//表明在插入时自动维护字段

@TableField(fill = FieldFill.INSERT)

private Date createTime;

//表明在插入和更新时自动维护字段

@TableField(fill = FieldFill.INSERT_UPDATE)

private Date lastModifiedTime;

第二步:编写处理类

// 不要忘了处理器是spring的组件

@Component

public class AutoFillHandler implements MetaObjectHandler {

@Override

public void insertFill(MetaObject metaObject) {

this.setFieldValByName(“createTime”,new Date(), metaObject);

this.setFieldValByName(“lastModifiedTime”,new Date(), metaObject);

}

@Override

public void updateFill(MetaObject metaObject) {

//this.setFieldValByName(“createTime”,new Date(), metaObject);

this.setFieldValByName(“lastModifiedTime”,new Date(), metaObject);

}

}

完成后可以通过新增或更新

5、乐观锁


含义:当要更新一条记录的时候,希望这条记录没有被别人更新

乐观锁实现方式(来自官方文档):

取出记录时,获取当前version

更新时,带上这个version

执行更新时, set version = newVersion where version = oldVersion

如果version不对,就更新失败

①、配置示例

在数据库表中加入version字段,表示数据版本号

修改实体类,在使用类中加入对应的version字段,并使用是乐观锁:

@TableField(“version”)

// 乐观锁

@Version

private int version;

②、配置乐观锁

package com.lv.plus.configurator;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;

import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

public class MybatisPlusConfig {

@Bean

public MybatisPlusInterceptor mybatisPlusInterceptor() {

MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());

return interceptor;

}

}

③、测试

package com.lv.plus;

import com.lv.plus.mapper.UserMapper;

import com.lv.plus.pojo.User;

import com.lv.plus.service.IUserService;

import org.junit.jupiter.api.Test;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import java.util.UUID;

@SpringBootTest

class PlusApplicationTests {

@Autowired

private UserMapper mapper;

@Autowired

private IUserService service;

@Test

void contextLoads() {

User u1=mapper.selectById(1L);

User u2=mapper.selectById(1L);

u1.setName(“晚柠”);

u2.setName(“爱嘤斯塔”);

int i1=mapper.updateById(u1);

int i2=mapper.updateById(u2);

System.out.println(i1+“-----”+i2);

}

}

第一次修改成功,第二次未被修改:

7、条件查询


批量查询多个对象:

System.out.println(mapper.selectBatchIds(Arrays.asList(2L,3L,4L)));


@Test

public void testSelectByMap() {

//使用map进行查询

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

map.put(“name”, “Tom”);

map.put(“age”, 28);

List users = userMapper.selectByMap(map);

users.forEach(t-> System.out.println(t));

}

8、分页查询


①、分页配置

在配置器MybatisPlusConfig中加入配置拦截器:

package com.lv.plus.configurator;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;

import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;

import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

public class MybatisPlusConfig {

@Bean

public MybatisPlusInterceptor mybatisPlusInterceptor() {

MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());

// 加入分页拦截器

interceptor.addInnerInterceptor(new PaginationInnerInterceptor());

return interceptor;

}

}

测试类:

package com.lv.plus;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import com.lv.plus.mapper.UserMapper;

import com.lv.plus.pojo.User;

import com.lv.plus.service.IUserService;

import org.apache.ibatis.jdbc.Null;

import org.junit.jupiter.api.Test;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import java.util.Arrays;

import java.util.UUID;

@SpringBootTest

class PlusApplicationTests {

@Autowired

private UserMapper mapper;

@Autowired

private IUserService service;

@Test

void contextLoads() {

mapper

.selectPage(Page.of(1l,2L),null)

.getRecords()

.forEach(System.out::println);

}

}

9、逻辑删除逻辑删除


物理删除使用起来比较简单,仿照查询功能即可,不再赘述。

什么是逻辑删除?

即:标记删除,并不是真的从数据库中删除,而是做个删除标记,在查询时,过滤掉标记为删除的记录即可。

①、数据库表结构调整

加字段:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

感受:

其实我投简历的时候,都不太敢投递阿里。因为在阿里一面前已经过了字节的三次面试,投阿里的简历一直没被捞,所以以为简历就挂了。

特别感谢一面的面试官捞了我,给了我机会,同时也认可我的努力和态度。对比我的面经和其他大佬的面经,自己真的是运气好。别人8成实力,我可能8成运气。所以对我而言,我要继续加倍努力,弥补自己技术上的不足,以及与科班大佬们基础上的差距。希望自己能继续保持学习的热情,继续努力走下去。

也祝愿各位同学,都能找到自己心动的offer。

分享我在这次面试前所做的准备(刷题复习资料以及一些大佬们的学习笔记和学习路线),都已经整理成了电子文档

拿到字节跳动offer后,简历被阿里捞了起来,二面迎来了P9"盘问"

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
6.jpg" alt=“img” style=“zoom: 33%;” />

感受:

其实我投简历的时候,都不太敢投递阿里。因为在阿里一面前已经过了字节的三次面试,投阿里的简历一直没被捞,所以以为简历就挂了。

特别感谢一面的面试官捞了我,给了我机会,同时也认可我的努力和态度。对比我的面经和其他大佬的面经,自己真的是运气好。别人8成实力,我可能8成运气。所以对我而言,我要继续加倍努力,弥补自己技术上的不足,以及与科班大佬们基础上的差距。希望自己能继续保持学习的热情,继续努力走下去。

也祝愿各位同学,都能找到自己心动的offer。

分享我在这次面试前所做的准备(刷题复习资料以及一些大佬们的学习笔记和学习路线),都已经整理成了电子文档

[外链图片转存中…(img-3LSuk94I-1711902897117)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 30
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值