You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
执行更新时, set version = newVersion where version = oldVersion
如果version不对,就更新失败
乐观锁: 1 、先查询,获得版本号 version =1-- Aupdate user set name ="kuangshen", version = version +1where id =2and version =1-- B 线程抢先完成,这个时候 version = 2,会导致 A 修改失败!update user set name ="kuangshen", version = version +1where id =2and version =1
// 模糊查询@Testvoidtest5(){
QueryWrapper<User> wrapper = newQueryWrapper<>();
// id 在子查询中查出来wrapper.inSql("id","select id from user where id<3");
List<Object> objects = userMapper.selectObjs(wrapper);
objects.forEach(System.out::println);
}
MyBatisPlus概述
需要的基础:把我的MyBatis、Spring、SpringMVC就可以学习这个了!
为什么要学习它呢?MyBatisPlus可以节省我们大量工作时间,所有的CRUD代码它都可以自动化完成!
JPA 、 tk-mapper、MyBatisPlus
简介
是什么? MyBatis 本来就是简化 JDBC 操作的!
官网:https://mp.baomidou.com/ MyBatis Plus,简化 MyBatis !
特性
无侵入 :只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺-滑
损耗小 :启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作, BaseMapper
强大的 CRUD 操作 :内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分
CRUD 操作,更有强大的条件构造器,满足各类使用需求, 以后简单的CRUD操作,它不用自己编写 了!
支持 Lambda 形式调用 :通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
支持主键自动生成 :支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配 置,完美解决主键问题
支持 ActiveRecord 模式 :支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
支持自定义全局通用操作 :支持全局通用方法注入( Write once, use anywhere )
内置代码生成器 :采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、
Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用(自动帮你生成代码)
内置分页插件 :基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
分页插件支持多种数据库 :支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
内置性能分析插件 :可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
内置全局拦截插件 :提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
所有学不会都是给懒找的借口!伸手党,白嫖党!
快速入门
地址:https://mp.baomidou.com/guide/quick-start.html#初始化工程
使用第三方组件:
1 、导入对应的依赖
2 、研究依赖如何配置
3 、代码如何编写
4 、提高扩展技术能力!
步骤
1 、创建数据库
mybatis_plus
2 、创建user表
3 、编写项目,初始化项目!使用SpringBoot初始化!
4 、导入依赖
说明:我们使用 mybatis-plus 可以节省我们大量的代码,尽量不要同时导入 mybatis 和 mybatis-plus!版本的差异!
5 、连接数据库!这一步和 mybatis 相同!
6 、传统方式pojo-dao(连接mybatis,配置mapper.xml文件)-service-controller
6 、使用了mybatis-plus 之后
思考问题?
1 、SQL谁帮我们写的? MyBatis-Plus 都写好了
2 、方法哪里来的? MyBatis-Plus 都写好了
配置日志
我们所有的sql现在是不可见的,我们希望知道它是怎么执行的,所以我们必须要看日志!
配置完毕日志之后,后面的学习就需要注意这个自动生成的SQL,你们就会喜欢上 MyBatis-Plus!
CRUD扩展
插入操作
Insert 插入
数据库插入的id的默认值为:全局的唯一id
主键生成策略
默认 ID_WORKER 全局唯一id
分布式系统唯一id生成:https://www.cnblogs.com/haoxinyue/p/5208136.html
雪花算法:
snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID( 5 个bit是数据中心, 5 个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是 0 。可以保证几乎全球唯一!
主键自增
我们需要配置主键自增:
实体类字段上
@TableId(type = IdType.AUTO)
数据库字段一定要是自增!
再次测试插入即可!
其与的源码解释
更新操作
所有的sql都是自动帮你动态配置的!
自动填充
创建时间、修改时间!这些个操作一遍都是自动化完成的,我们不希望手动更新!
阿里巴巴开发手册:所有的数据库表:gmt_create、gmt_modified几乎所有的表都要配置上!而且需要自动化!
方式一:数据库级别(工作中不允许你修改数据库)
在表中新增字段 create_time, update_time
再次测试插入方法,我们需要先把实体类同步!
方式二:代码级别
删除数据库的默认值、更新操作!
实体类字段属性上需要增加注解
测试插入
测试更新、观察时间即可!
乐观锁
在面试过程中,我们经常会被问道乐观锁,悲观锁!这个其实非常简单!
我们这里主要讲解 乐观锁机制!
乐观锁实现方式:
取出记录时,获取当前 version
更新时,带上这个version
执行更新时, set version = newVersion where version = oldVersion
如果version不对,就更新失败
给数据库中增加version字段!
我们实体类加对应的字段
查询操作
分页查询
分页在网站使用的十分之多!
如何使用!
删除操作
我们在工组中会遇到一些问题:逻辑删除!
逻辑删除
管理员可以查看被删除的记录!防止数据的丢失,类似于回收站!
测试一下:
在数据表中增加一个 deleted 字段
实体类中增加属性
记录依旧在数据库,但是值确已经变化了!
以上的所有CRUD操作及其扩展操作,我们都必须精通掌握!会大大提高你的工作和写项目的效率!
性能分析插件
我们在平时的开发中,会遇到一些慢sql。测试! druid,,,,,
作用:性能分析拦截器,用于输出每条 SQL 语句及其执行时间
MP也提供性能分析插件,如果超过这个时间就停止运行!
记住,要在SpringBoot中配置环境为dev或者 test 环境!
2. 测试使用!
使用性能分析插件,可以帮助我们提高效率!
条件构造器
十分重要:Wrapper
我们写一些复杂的sql就可以使用它来替代!
代码自动生成器
dao、pojo、service、controller都给我自己去编写完成!
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
测试:
MyBatisPlusConfig配置类
application配置
The text was updated successfully, but these errors were encountered: