学习java的第二天 配置环境及数据库,MVC三层相关

本文详细介绍了SpringBoot项目中数据库配置(如MySQL连接和MyBatisPlus设置)、MVC三层结构模板、水平与垂直分库分表的方法以及雪花算法在分布式ID生成中的应用。重点讲解了如何配置主键生成策略以支持自增ID和非标准主键命名。
摘要由CSDN通过智能技术生成
一.数据库基本配置 

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争抢。垂直切分带来的性能提升主要集中在热门数据的操作效率上,而且磁盘争用情况减少。

通常我们按以下原则进行垂直拆分:

  1. 把不常用的字段单独放在一张表;
  2. 把text,blob等大字段拆分出来放在附表中;
  3. 经常组合查询的列放在一张表中;
垂直分库

按照业务将表进行分类,分布到不同的数据库上面,每个库可以放在不同的服务器上,它的核心理念是专库专用。

它带来的提升是:

  • 解决业务层面的耦合,业务清晰
  • 能对不同业务的数据进行分级管理、维护、监控、扩展等
  • 高并发场景下,垂直分库一定程度的提升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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值