官方地址: http://mp.baomidou.com

1.SpringBoot配置yaml文件

spring:datasource:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf8&useSSL=falseusername: rootpassword: 123456

注意:

1、驱动类driver-class-name spring boot 2.0(内置jdbc5驱动),

驱动类使用:driver-class-name: com.mysql.jdbc.Driver

spring boot 2.1及以上(内置jdbc8驱动),

驱动类使用:driver-class-name: com.mysql.cj.jdbc.Driver

否则运行测试用例的时候会有 WARN 信息

2、连接地址url

MySQL5.7版本的url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false

MySQL8.0版本的url: jdbc:mysql://localhost:3306/mybatis_plus? serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false

否则运行测试用例报告如下错误: java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more

@Autowired private UserMapper userMapper;

userMapper常常爆红的原因:

配置了mapper自动扫描,会将mapper文件和bean映射,ioc只能映射实体类的bean,不能映射接口中的bean;原理:是把userMapper动态生成的代理类交给了ioc容器管理,idea在编译的时候,会认为userMapper是无法装配的,在运行阶段没有错。

2.配置日志

# 配置MyBatis日志
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3.通过全局配置解决问题

在开发的过程中,我们经常遇到以上的问题,即实体类所对应的表都有固定的前缀,例如t_或tbl_ 此时,可以使用MyBatis-Plus提供的全局配置,为实体类所对应的表名设置默认的前缀,那么就 不需要在每个实体类上通过@TableName标识实体类对应的表

mybatis-plus:configuration:# 配置MyBatis日志log-impl: org.apache.ibatis.logging.stdout.StdOutImplglobal-config:db-config:# 配置MyBatis-Plus操作表的默认前缀table-prefix: t_

4.@TableName 和 @TableId

Name:在实体类类型上添加@TableName("t_user"),标识实体类对应的表,即可成功执行SQL语句

ID:在实体类中uid属性上通过@TableId将其标识为主键,即可成功执行SQL语句,并在插入数据时,默认 基于雪花算法的策略生成id。value属性:指定数据库表中主键字段。type属性:IdType.AUTO、IdType.ASSIGN_ID(默 认)

mybatis-plus:global-config:db-config:# 配置MyBatis-Plus的主键策略id-type: auto

5.雪花算法

背景

需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量。 数据库的扩展方式主要包括:业务分库、主从复制,数据库分表。

数据库分表

垂直分表

垂直分表适合将表中某些不常用且占了大量空间的列拆分出去。 例如,前面示意图中的 nickname 和 description 字段,假设我们是一个婚恋网站,用户在筛选其他用 户的时候,主要是用 age 和 sex 两个字段进行查询,而 nickname 和 description 两个字段主要用于展 示,一般不会在业务查询中用到。description 本身又比较长,因此我们可以将这两个字段独立到另外 一张表中,这样在查询 age 和 sex 时,就能带来一定的性能提升。

水平分表

水平分表适合表行数特别大的表,有的公司要求单表行数超过 5000 万就必须进行分表,这个数字可以 作为参考,但并不是绝对标准,关键还是要看表的访问性能。对于一些比较复杂的表,可能超过 1000 万就要分表了;而对于一些简单的表,即使存储数据超过 1 亿行,也可以不分表。 但不管怎样,当看到表的数据量达到千万级别时,作为架构师就要警觉起来,因为这很可能是架构的性 能瓶颈或者隐患。 水平分表相比垂直分表,会引入更多的复杂性,例如要求全局唯一的数据id该如何处理

主键自增

①以最常见的用户 ID 为例,可以按照 1000000 的范围大小进行分段,1 ~ 999999 放到表 1中, 1000000 ~ 1999999 放到表2中,以此类推。 ②复杂点:分段大小的选取。分段太小会导致切分后子表数量过多,增加维护复杂度;分段太大可能会 导致单表依然存在性能问题,一般建议分段大小在 100 万至 2000 万之间,具体需要根据业务选取合适 的分段大小。 ③优点:可以随着数据的增加平滑地扩充新的表。例如,现在的用户是 100 万,如果增加到 1000 万, 只需要增加新的表就可以了,原有的数据不需要动。 ④缺点:分布不均匀。假如按照 1000 万来进行分表,有可能某个分段实际存储的数据量只有 1 条,而 另外一个分段实际存储的数据量有 1000 万条。

取模

①同样以用户 ID 为例,假如我们一开始就规划了 10 个数据库表,可以简单地用 user_id % 10 的值来 表示数据所属的数据库表编号,ID 为 985 的用户放到编号为 5 的子表中,ID 为 10086 的用户放到编号 为 6 的子表中。 ②复杂点:初始表数量的确定。表数量太多维护比较麻烦,表数量太少又可能导致单表性能存在问题。 ③优点:表分布比较均匀。 ④缺点:扩充新的表很麻烦,所有数据都要重分布。

雪花算法

雪花算法是由Twitter公布的分布式主键生成算法,它能够保证不同表的主键的不重复性,以及相同表的 主键的有序性。 ①核心思想: 长度共64bit(一个long型)。 首先是一个符号位,1bit标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负 数是1,所以id一般是正数,最高位是0。 41bit时间截(毫秒级),存储的是时间截的差值(当前时间截 - 开始时间截),结果约等于69.73年。 10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID,可以部署在1024个节点)。 12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID)。

②优点:整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞,并且效率较高。

6.@TableField

实体类中的属性名和字段名不一致的情况

7. @TableLogic

a>逻辑删除

物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除的数据 逻辑删除:假删除,将对应数据中代表是否被删除字段的状态修改为“被删除状态”,之后在数据库 中仍旧能看到此条数据记录 使用场景:可以进行数据恢复

b>实现逻辑删除

step1:数据库中创建逻辑删除状态列,设置默认值为0

step2:实体类中添加逻辑删除属性

step3:测试 测试删除功能,真正执行的是修改 UPDATE t_user SET is_deleted=1 WHERE id=? AND is_deleted=0 测试查询功能,被逻辑删除的数据默认不会被查询 SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0

8.分页插件

配置类

@Configuration
@MapperScan("com.atguigu.mybatisplus.mapper") //可以将主类中的注解移到此处
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(newPaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}

9.枚举

配置

mybatis-plus:# 配置扫描通用枚举type-enums-package: com.atguigu.mybatisplus.enums

10.MyBatisX插件

MyBatisX插件用法:https://baomidou.com/pages/ba5b24/

尚硅谷Mybatis相关推荐

  1. 尚硅谷 MyBatis 新版视频教程发布

    人是这样的-- 一旦有了对别人的期待, 就可能承受期待带给你的痛苦. 真实的世界很残酷, 永远不要把期待放在别人身上, 因为别人没有义务要实现你的期待. 除非-- 这个"别人"是尚 ...

  2. 尚硅谷Java、HTML5前端、全栈式开发视频

    Java基础阶段: 一.20天横扫Java基础(课堂实录) https://pan.baidu.com/s/1htTzZRQ 二.尚硅谷Java基础实战--Bank项目 http://pan.baid ...

  3. {转发}尚硅谷资料集锦

    2018年05月18日 20:13:25 寒夕若梦 阅读数:8093 Java基础阶段 一. 20天横扫Java基础(课堂实录) https://pan.baidu.com/s/1htTzZRQ 二. ...

  4. 尚硅谷《全套Java、Android、HTML5前端视频》

    尚硅谷<全套Java.Android.HTML5前端视频> (百万谷粉推荐:史上最牛.最适合自学的全套视频.资料及源码) [尚硅谷官网资料导航] 谷粒学院在线学习:http://www.g ...

  5. 【备忘】2018年最新尚硅谷全套Java、Android、HTML5前端视频教程下载

    全套Java教程--打包下载地址]     Java基础阶段     一.20天横扫Java基础(课堂实录)     二.尚硅谷Java基础实战--Bank项目     三.尚硅谷_ORACLE.SQ ...

  6. Mybatis学习笔记(尚硅谷版整理)

    Mybatis [尚硅谷]2022版MyBatis教程(细致全面,快速上手)_哔哩哔哩_bilibili 笔记 Mybatis框架搭建 步骤 创建maven工程,引入依赖 创建Mybatis的核心配置 ...

  7. Mybatis(尚硅谷)

    Mybatis简介 MyBatis历史 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google ...

  8. 总结尚硅谷的视频springboot视频

    这16个章节也就讲个大概,更多内容需要你自己去学习. 第1章尚硅谷SpringBoot入门 P01.尚硅谷_SpringBoot_入门-课程简介 P02.尚硅谷_SpringBoot_入门-Sprin ...

  9. 尚硅谷全套课件整理:Java、前端、大数据、安卓、面试题

    目录 Java 尚硅谷 IT 精英计划 JavaSE 内部学习笔记.pdf 尚硅谷 Java 基础实战之银行项目.pdf 尚硅谷 Java 技术之 JDBC.pdf 尚硅谷 Java 技术之 Java ...

最新文章

  1. PPP协议的CHAP验证
  2. spring中resource设计与实现
  3. 一些界面库比较以及如何选择界面库
  4. windows消息定义
  5. Oracle 数据库实例启动关闭过程
  6. [2019人工智能实战_廖盈嘉]第1次个人作业
  7. 设计模式:单例模式7种写法
  8. java邮箱找回密码_java实现邮箱找回密码 简单邮件
  9. HDU1576 A/B【扩展欧几里得算法+试探法】
  10. 使用 PyQT5 来做一个简易版库存管理系统(二)
  11. idea的阿里代码规范检查
  12. N卡驱动版本与NVCUDA驱动版本和CUDA toolkit的关系
  13. Linux安装JDK步骤
  14. python初学之字符串、列表与元组小练习
  15. react应用结构框架图
  16. python3 print函数格式化输出
  17. 蓬莱与威海的几尊塑像
  18. 设置操作系统(win10)的环境变量以便从cmd直接进入Python
  19. Office多版本共存,设置打开的版本
  20. 启动和关闭MySQL服务

热门文章

  1. 2010计算机上机考试试题,WORD2010上机操作练习题
  2. Jackson - 将 JSON字符串转换为 List
  3. 中国·希腊国家馆落户上海自贸区
  4. 物联网终端的信息保护
  5. Redis_15_Redis线程模型与事件
  6. VQA系列论文(五)
  7. python实训三 编写函数,接收一个字符串,分别统计大写字母,小写字母,数字,其他字符的个数,并以元组的形式返回结果
  8. 华为设备vlan聚合配置命令
  9. SQL工具性能实测:居然比Navicat还快,数百万行数据导出仅51秒
  10. python版本切换