一.数据库基本配置
application.properties mybatis:数据库相关配置
#mysql 数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxxxxx?useUnicode=true&serverTimezone=GMT&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=xxxxxx
#mybatis 输出日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
上面一行代码可以再测试代码时输出sql语句等相关信息
二. MVC三层相关模板
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="">
</mapper>
application.properties mybatis-plus.mapper-locations=classpath:xml/*.xml
识别非mapper文件下的.xml 持久层文件 。 xml/*.xml 为更改后的文件路径规则
不设置则默认mapper文件夹下
@TableName(value = "t_user")
作用在实体类中,将系统默认的查询表名更改
数据库中表名为t_user, 使用后将默认user 改为 t_user
三. 分库分表
水平分表
:在同一个数据库内,把同一个表的数据按一定规则拆到多个表中。
它带来的提升是:
- 优化单一表数据量过大而产生的性能问题
- 避免IO争抢并减少锁表的几率
库内的水平分表,解决了单一表数据量过大的问题,分出来的小表中只包含一部分数据,从而使得单个表的数据量变小,提高检索性能。
水平分库
:把同一个表的数据按一定规则拆到不同的数据库中,每个库可以放在不同的服务器上。
它带来的提升是:
- 解决了单库大数据,高并发的性能瓶颈。
- 提高了系统的稳定性及可用性。
当一个应用难以再细粒度的垂直切分,或切分后数据量行数巨大,存在单库读写、存储性能瓶颈,这时候就需要进行水平分库了,经过水平切分的优化,往往能解决单库存储量及性能瓶颈。但由于同一个表被分配在不同的数据库,需要额外进行数据操作的路由工作,因此大大提升了系统复杂度。
垂直分表
:将一个表按照字段分成多表,每个表存储其中一部分字段。
1.为了避免IO争抢并减少锁表的几率,查看详情的用户与商品信息浏览互不影响
2.充分发挥热门数据的操作效率,商品信息的操作的高效率不会被商品描述的低效率所拖累。
一般来说,某业务实体中的各个数据项的访问频次是不一样的,部分数据项可能是占用存储空间比较大的BLOB或是TEXT。例如上例中的商品描述。所以,当表数据量很大时,可以将表按字段切开,将热门字段、冷门字段分开放置在不同库中,这些库可以放在不同的存储设备上,避免IO争抢。垂直切分带来的性能提升主要集中在热门数据的操作效率上,而且磁盘争用情况减少。
通常我们按以下原则进行垂直拆分:
- 把不常用的字段单独放在一张表;
- 把text,blob等大字段拆分出来放在附表中;
- 经常组合查询的列放在一张表中;
垂直分库
:按照业务将表进行分类,分布到不同的数据库上面,每个库可以放在不同的服务器上,它的核心理念是专库专用。
它带来的提升是:
- 解决业务层面的耦合,业务清晰
- 能对不同业务的数据进行分级管理、维护、监控、扩展等
- 高并发场景下,垂直分库一定程度的提升IO、数据库连接数、降低单机硬件资源的瓶颈
垂直分库通过将表按业务分类,然后分布在不同数据库,并且可以将这些数据库部署在不同服务器上,从而达到多个服务器共同分摊压力的效果,但是依然没有解决单表数据量过大的问题。
彻底搞清分库分表(垂直分库,垂直分表,水平分库,水平分表) - 知乎 (zhihu.com)
分布式id生成策略(雪花算法)
当实体类中主键不是id时,eg:uid 并且需要使用雪花算法。需要配合@TableId
1.第一种
@Data
@TableName(value = "user")
public class User {
@TableId
private Integer uid;
private String name;
private Integer age;
private String email;
}
2.第二种
@Data
@TableName(value = "user")
public class User {
@TableId(value = "uid")
private Integer id;
private String name;
private Integer age;
private String email;
}
当实体类@TableId 注解配置 type = IdType.AUTO 并且 数据库设置主键自增,可以实现雪花算法自增策略。
@Data
@TableName(value = "user")
public class User {
//@TableId(value = "uid")
@TableId(value = "uid", type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
}
但是当实体类中注解@TableId 不设置type时,需要配置application.properties文件
#全局设置主键生成策略 mybatis-plus.global-config.db-config.id-type=auto