2021-10-27 mybatisPlus学习的一些细节知识

Dao层

1.在插入数据时,mybatisplus如果识别到实体类里面有个字段叫id,那么会默认把这个字段当成主键。当传入的实体id=null时,mp会自动生成一个全局唯一的主键
如:
在这里插入图片描述

==>  Preparing: INSERT INTO table1_employee ( id, name, gender, email, dept_id ) VALUES ( ?, ?, ?, ?, ? )
==> Parameters: 478154753(Integer), 王麻子(String), 1(String), 578223@qq.com(String), 2(Integer)
<==    Updates: 1
//478154753即为生成的主键

如果在表中已经设置了主键自增长,如果想关闭这个功能,在id字段上面添加注解:

@TableId(value = “id”, type = IdType.AUTO):自增 —开启这个
@TableId(value = “id”, type = IdType.ID_WORKER_STR):分布式全局唯一ID字符串类型
@TableId(value = “id”, type = IdType.INPUT):自行输入 @TableId(value = “id”, type =IdType.ID_WORKER):分布式全局唯一ID 长整型类型 —默认是这个 @TableId(value = “id”,
type = IdType.UUID):32位UUID字符串 @TableId(value = “id”, type = IdType.NONE):无状态

当然也可以在配置文件里面开启全局的设置:
在这里插入图片描述

如果想获取插入的主键,插入的主键id就在原来传入的实体类的id字段里面,取出来即可。

        Employee employee = new Employee(null, "王麻子", "1", "578223@qq.com", 2);
        int i = myDao.insert(employee);
        System.out.println(employee.getId());

Service层

service写法;

public interface MyService extends IService<Employee> {
//泛型里面是数据库对应的pojo

}

serviceImpl的写法:

@Service
public class MyServiceImpl extends ServiceImpl<MyDao, Employee> implements MyService {
//泛型:第一个是mapper类,第二个操作的实体类
//因为service层本质上还是整合的Dao层,因此传入mapper类是必不可少的。
}

如果只有implements MyService,那么就必须实现里面的很多抽象方法,再extends ServiceImpl<MyDao, Employee>就可以避免重写。

写完后一些基础的用法可在https://baomidou.com/guide/crud-interface.html#service-crud-%E6%8E%A5%E5%8F%A3查询得到。

Page 分页功能

1.在上述已经完成Service层的基础上,如果mybatis-plus想实现分页功能:需要用到

在这里插入图片描述
如果不实现page插件的话,演示:

 @Test
    void contextLoads4() {
        IPage<Employee> page =new Page<Employee>(1,2);
        IPage<Employee> employeeIPage = myService.page(page);
        List<Employee> records = employeeIPage.getRecords();
        System.out.println(records);
    }

查看控制台的sql语句,开启控制台日志的方法:在springboot配置文件中写入

#打开log日志--->用来观察mybatisplus调用的sql语句
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

再具体的看:https://blog.csdn.net/qq_36407469/article/details/119003229

可以看到sql语句为;==> Preparing: SELECT id,name,gender,email,dept_id FROM table1_employee
没有limit说明没有分页,page没用。
需要注册page插件才能起作用(详见:https://baomidou.com/guide/page.html)注意因为使用的mysql,所以需要修改为DbType.MYSQL
因此在上述操作后,再次运行page就会生效了

==>  Preparing: SELECT COUNT(*) AS total FROM table1_employee
==> Parameters: 
<==    Columns: total
<==        Row: 10
<==      Total: 1
==>  Preparing: SELECT id,name,gender,email,dept_id FROM table1_employee LIMIT ?
==> Parameters: 2(Long)
<==    Columns: id, name, gender, email, dept_id
<==        Row: 1, 王地爆, 1, <<BLOB>>, 1
<==        Row: 4, 王天宝, 0, <<BLOB>>, 2
<==      Total: 2
2.page也可以用于xml文件的的分页

mp实现了一些基础功能,也有条件查询器可以帮助查询,但是有时候很复杂的sql还是会写在mapper.xml文件里面的。
在这里插入图片描述
是真的智能,只需要在定义方法的时候把page对象放在第一位,然后返回值由mybatis的list<实体>改为IPage<实体>就可以实现自动分页,最基本的page实现在上面已经说明。
而且神奇的是好像不用再SBoot配置文件里面写mapper.xml文件的位置都可以自动去找了,因为mp默认认的mapper.xml文件位置为:classpath*:/mapper/**/*.xml

Wrapper 条件构造器

在这里插入图片描述
在这里插入图片描述
Lambda方式使用QueryWrapper:

    @Test
    void contextLoads5() {
        QueryWrapper<Employee> queryWrapper = new QueryWrapper<>();
        LambdaQueryWrapper<Employee> wrapper = queryWrapper.lambda().ge(Employee::getId, 1);
        List<Employee> list = myService.list(wrapper);
        System.out.println(list);
    }

拓展

逻辑/物理删除

在这里插入图片描述
使用方法:
https://baomidou.com/guide/logic-delete.html#%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95

自动填充

一般来说是在数据表字段中自动填充创建表的时间和修改的时间(mysql5.7以上版本才支持自动填充时间)
https://baomidou.com/guide/auto-fill-metainfo.html

SQL打印分析

https://baomidou.com/guide/p6spy.html

数据安全保护

https://baomidou.com/guide/safety.html

乐观/悲观锁

乐观锁的mp实现:https://baomidou.com/guide/interceptor-optimistic-locker.html#optimisticlockerinnerinterceptor —乐观锁的bean可以和前面的page分页写在一起,就不用配多个bean了,add就行
事务的隔离级别

悲观锁:悲观锁,正如其名,具有强烈的独占和排他特性。它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度。因此,在整个数据处理过程中,将数据处于锁定状态。假设功能并发量非常大,就需要使用如:synchronized来处理高并发下产生线程不安全问题, 会使其他线程进行挂起等待从而影响系统吞吐量。
乐观锁(CAS):乐观锁是相对悲观锁而言的,乐观锁假设数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则返回给用户错误的信息,让用户决定如何去做。乐观锁适用于读操作多的场景,这样可以提高程序的吞吐量。 假设功能产生并发几率极少,采用乐观锁版本机制对比, 如果有冲突 返回给用户错误的信息。(在有可能会产生不可重复读的问题的时候产生冲突,数据不入库,返回错误信息)

代码生成器

最后一个视频一个小时未看。。。
https://www.bilibili.com/video/BV1Tr4y1A7jf?p=13

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值