这里写目录标题

  • 建立数据库
    • utf8mb4是什麽?为什么要用这个呢?
    • utf8mb4_unicode_ci、utf8mb4_general_ci的区别总结
  • 数据库连接配置文件
  • 创建实体类模型
    • sql日志的输出
  • 创建springboot的测试类
    • 批量查询
    • 自定义Mapper
  • service
  • tableName注解
  • 雪花算法
  • 分布式算法
    • TableField
    • 数据库中时间戳
    • @TableLogic
    • 分页插件

建立数据库

注意一下,这个表应该这么去建

utf8mb4是什麽?为什么要用这个呢?

2.1 utf8
是针对Unicode的一种可变长度字符编码。

由于对可以用Ascll表示的字符,使用Unicode并不高效,因为Unicode比Ascll占用大一倍的空间,而对ASCII来说高字节的0对他毫无用处。

为了解决这个问题,就出现了一些中间格式的字符集,他们被称为通用转换格式,即UTF(Unicode Transformation Format)。

2.2 utf8mb4(mb4 = most bytes 4)
所以utf8是utf8mb4的子集,除了将编码改为utf8mb4外不需要做其他转换。

MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。

既然utf8应付日常使用完全没有问题,那为什么还要使用utf8mb4呢?

低版本的MySQL支持的utf8编码,最大字符长度为 3 字节,如果遇到 4 字节的字符就会出现错误了。

三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xFFFF,也就是 Unicode 中的基本多文平面(BMP)。

也就是说,任何不在基本多文平面的 Unicode字符,都无法使用MySQL原有的 utf8 字符集存储。

可以到以下的链接,看unicode编码区从1 ~ 126就属于传统utf8区,当然utf8mb4也兼容这个区,126行以下就是utf8mb4扩充区,什么时候你需要存储那些字符,你才用utf8mb4,否则只是浪费空间
————————————————
版权声明:本文为CSDN博主「骑台风走」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_52385631/article/details/123019036

utf8mb4_unicode_ci、utf8mb4_general_ci的区别总结

https://blog.csdn.net/weixin_45839894/article/details/128096805

数据库连接配置文件

#mysql数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456

数据库连接这个别自己瞎写了。

创建实体类模型

实体类模型,用于接收数据库中的数据情况
所以

@Data
public class User {private Long id;private String name;private Integer age;private String email;
}

必须要一一对应,小数据,要用包装类,ID可能会很长,所以要用长整型。

@Data这个是干嘛呢的呢,就是你装上Lombok插件之后,可以自动生成Getter和Setter方法,或者重写hashcode等方法。


這個可以看类的结构。

package com.atguigu.mybatisplus.Mapper;import com.atguigu.mybatisplus.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;public interface UserMapper extends BaseMapper<User> {//你必须告诉电脑,你需要输入的泛型是啥
}

注意这里头有泛型的。

一个实体类,对应一个Mapper
Mapper应该去继承BASEMAPPER
BASEMAPPER中,所有曾删改查的方法,都被USERMAPPER给继承了,相当于省去了我们自己写增删改查。


加一個扫描注解,把Mapper这个包扫描进入

springboot天然給安排了一個测试类,主要是需要這個注解


在测试里创建接口类,然后对接口类进行注入。


把数据库的东西打印一下,看看,连接没连接上

sql日志的输出


往配置文件裏加一句話就行。

创建springboot的测试类

CTRL + H可以看到类的结构

批量查询


我们可以根据,我们可以往里面放个List,list里面的都是id

自定义Mapper

1.先创建接口


这个配置文件下的mapper基本就相当于一个实现类了
里面的xml写法:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.atguigu.mybatisplus.mapper.UserMapper"><sql id="Base_Column_List">id, name, age, email</sql><select id="selectAllByName" resultType="com.atguigu.mybatisplus.entity.User">select<include refid="Base_Column_List"/>from userwherename = #{name}</select>
</mapper>

service


父类本身具有泛型,那么子类继承父类后,就不用写泛型了。

比如後續用到UserService之后,就不用泛型了



服務端接口实现类,直接点那个小鸟,就能去实现类。

tableName注解

简单的来说,你的类名,叫User,但是实际开发中,会有好多张表,一张表理论上应该对应一个实体类作为模型去接收

但是,问题在于,我们很多好多表
比如管理员表
t_User
商人表
bu_User
老板股东表
bo_User
我们不好一一建立类,对吧??那就用这个注解

參考一下TableName去生成数据库表名。

雪花算法

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

简单来说就是User是一张表
User_info是一张表,User上存储主要检索信息,User_info上存细节
有点像身份证和在电脑上数据

如果我们把身份证上存太多信息,身份证就很大,很难带。

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

简单来说,就是数据量太大了,行太多了

分布式算法

雪花算法:
解决分表后,或者多个表一起处理时候,应该怎么做。

雪花算法,分布式处理Id

想讓ID应用雪花算法,就在ID上加入这个注解。

这样可以告诉数据库,我所有的IDEA程序中id,都映射的是你数据库中的那个uid
这种情况是为了解决一个问题,什么问题呢,就是本来我模型和业务,都是做的id对应你表中那个uid,结果好家伙,你就跟我说id这个名字,我看着不顺眼,强制把数据库中那个改成uid了,那我总不到到程序中去一个个改吧???

那直接用这种注解,去一个个做映射就行了。我告诉你我这里头的id和你那个里的uid是一一对应的。

TableField

做映射的,告訴數據庫,我这个对象,对应的是你那个里面的,username

数据库中时间戳


經常性去更新这两个时间太麻烦了,一个简单办法


Update時間戳這樣处理,可以保证每次添加或者更新自动更新时间

創建的时间只要这个一个就行了,只会在创建的时候,有数据更新。

@TableLogic

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

其实就是做一个假性删除,我们在检索时候普遍都带上Is_deleted =0
这样所有被删除的数据都不会被检索了。

帶上這個标记后,我们执行的就是update语句了,把那个数据改成了1状态,假性删除。

这里我们强调的,全部都是BaseMapper里头的数据。

分页插件

先建立好一個配置類

package com.atguigu.mybatisplus.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}

然然後做測試

Mybatis_plus的一些介绍相关推荐

  1. MyBatis_Plus(Spring版本笔记)

    目录 前言 一.MyBatis-Plus简介 1.1 简介 1.2 特性 1.3 支持数据库 1.4 框架结构 1.5 代码及文档地址 二. 入门案例 2.1 开发环境 2.2 创建数据库和表 2.2 ...

  2. 1-医疗挂号系统_【项目介绍与Mybatis Plus】

    版本:V1.0 一.项目介绍 1简介 尚医通即为网上预约挂号系统,网上预约挂号是近年来开展的一项便民就医服务,旨在缓解看病难.挂号难的就医难题,许多患者为看一次病要跑很多次医院,最终还不一定能保证看得 ...

  3. 在线教育_Day01-项目介绍和MyBatisPlus

    一.在线教育概述 1.1 什么是在线教育 1.1.1 基本概述 在线教育顾名思义,是以网络为介质的教学方式,通过网络,学员与教师即使相隔万里也可以开展教学 活动:此外,借助网络课件,学员还可以随时随地 ...

  4. 谷粒学院day0day1——项目介绍与mybatis plus入门

    目 录 day0.项目介绍 1 前置知识 2 项目背景 3 项目商业模式 4 项目核心功能模块 5 本项目使用的技术 day1.Mybatis-plus 1 Mybatis-plus简介 2 mysq ...

  5. 简单介绍互联网领域选择与营销方法

    在我看来,互联网领域的选择是"安家",而营销方法的不同则表现了"定家"的方式多种多样,只有选对了,"家"才得以"安定". ...

  6. 常用开源协议介绍以及开源软件规范列表

    1. 开源协议介绍 GPL: General Public License,开源项目最常用的许可证,衍生代码的分发需开源并且也要遵守此协议.该协议也有很多变种,不同变种要求会略微不同. MPL: MP ...

  7. python:Json模块dumps、loads、dump、load介绍

    20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...

  8. pytorch学习笔记(九):PyTorch结构介绍

    PyTorch结构介绍 对PyTorch架构的粗浅理解,不能保证完全正确,但是希望可以从更高层次上对PyTorch上有个整体把握.水平有限,如有错误,欢迎指错,谢谢! 几个重要的类型 和数值相关的 T ...

  9. Python字节码介绍

    了解 Python 字节码是什么,Python 如何使用它来执行你的代码,以及知道它是如何帮到你的. 如果你曾经编写过 Python,或者只是使用过 Python,你或许经常会看到 Python 源代 ...

最新文章

  1. 在Cisco交换机上实现隔离访问
  2. SimGAN-Captcha代码阅读与复现
  3. 该项目不在桌面中删除不了_win7系统桌面上的文件删不掉怎么办
  4. 30行代码AC——例题6-3 矩阵链乘(Maxtrix Chain Multiplication, UVa 442)——解题报告
  5. make时候说找不到makefile_找不到对象,应不应该接受相亲?听听三个过来人怎么说...
  6. 《工业控制网络安全技术与实践》一一第3章 工业控制网络安全威胁
  7. Tomcat启动时项目重复加载,导致资源初始化两次的问题
  8. xp电脑多少位怎么看_如何查看电脑是什么操作系统和多少位?
  9. mysql视图什么时候用_Mysql为什么要使用视图?
  10. 第一次用PHP做电影站 用thinkphp开发的!!
  11. 图的绝对中心(bzoj 2180: 最小直径生成树)
  12. 武术擂台机器人所需传感器_华北工控:嵌入式计算机在AMR机器人中的应用
  13. QT5.14.2+VS2017环境安装
  14. python showinfo函数_Python 函数
  15. 时间片,从多任务系统说起
  16. cass简码大全_考考你......列出 南方cass 简码指令50个。
  17. war包里面文件的修改方式
  18. 【淘宝SEO】淘宝官方SEO资料
  19. 企业微信公众号运营技巧有哪些
  20. 淘宝直通车为什么要低价引流,低价引流的原理、低价引流的具体操作

热门文章

  1. 微店铺是什么?做一个微店铺小程序的流程
  2. 解决kde 桌面环境,触摸板手指轻触无法使用的问题
  3. 1.算法入门必知必会:时间复杂度和空间复杂度
  4. Qt Designer工具的使用
  5. Android混淆学习
  6. 计算机多媒体思政课,关于思政课多媒体教学存在的问题及对策论文
  7. 界面控件Telerik R3 2022新版亮点 - 全新的ThemeBuilder工具
  8. 新东方2021Q3净收入与盈利增长超预期 老牌教育巨头焕发生机?
  9. 如何在windows下安装CentOS7.7
  10. 从A股中获利读书总结