企业级应用大多数都是围绕着数据库的CURD操作进行的,得益于spring boot starter 对常用数据库的封装,可以非常方便且快速与其集成。
为了确保各微服务保持自身的独立性及整个分布式架构的效率,在设计服务模块时应尽量保持每个微服务模块使用单一且独立的数据源,各微服务模块之间的数据库互不干扰。
spring data mysql :
spring data:基于spring 提供了统一编程模型,并且支持众多不同的数据库,在保证底层数据特性的前提下,为关系型数据库或非关系型数据库提供了统一的操作方式,极大的简化了开发与学习难度。
spring-boot-starter-data-jpa :是spring基于ORM框架,JPA规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作,它提供了包括增删改查等在内的常用功能,且易于扩展。
spring.datasource.url
|
数据源地址 |
spring.datasource.username
|
用户名 |
spring.datasource.password
|
用户密码 |
spring.datasource.driverClassName
|
启动名称 |
spring.jpa.database
|
指定使用的数据库 |
spring.jpa.show-sql
|
控制台中显示执行的SQL |
spring.jpa.hibernate.ddl-auto
|
自动创建表时所采用的策略 |
Create |
每次加载hibernate时都会删除上一次生成的表,然后根据你的model类再重新生成新表,即使两次没有任何改变也要这样执行 |
Create-drop |
每次加载hibernate时根据model类生成表,session Factory一旦关闭,表会自动删除 |
Update |
第一次加载hibernate时根据model类会自动建立起表的结构,以后加载hibernate时会根据model类自动更新表结构,即使表结构改变了表中的行也仍然存在,不会删除以前的行 |
Validate |
每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表但会插入新值。 |
@Entity
|
标识该类为实体类,其中的name参数用于指定数据库的表名。默认以类名作为表名 |
@Id
|
标识当前字段为主键 |
@GeneratedValue
|
指定主键的自增长策略 |
auto |
主键由程序控制 |
Identiry |
主键由数据库控制 |
Sequence |
根据底层数据库的序列来生成主键,条件时数据库支持序列 |
Table |
使用一个特定的数据库表格来保持主键 |
@Column
|
标识实体类中属性与数据表中字段的对应关系 |
Name |
数据库表中对应字段的名称 |
Unique |
唯一标识 |
Null able |
标识该字段是否可以为null值 |
Insert able |
在使用insert脚本插入数据时,是否需要插入该字段的值 |
Updatable |
在使用update脚本插入数据时,是否需要更新该字段的值 |
Columndefinition |
创建表时,该字段创建的sql语句 |
Table |
包含当前字段的表名 |
Length |
当字段的类型为varchar时,指定字段的长度 |
Precision |
数值的总长度 |
Scale |
小数点所占的位数 |
@ManyToOne
|
指定多对一关系 |
TargetEntity |
指定具体实体 |
Cascade |
指定级联关系策略 |
CascadeType.refresh |
获取数据库中的最新数据 |
CascadeType.persist |
同步新增 |
CascadeType.merge |
同步更新 |
CascadeType.remove |
同步删除 |
CascadeType.all |
以上策略总和 |
Fetch |
控制加载数据策略 |
FetchType.eager |
查询到父实体类的时候加载 |
FetchType.lazy |
第一次访问数据库的时候加载 |
Optional |
指定是否为必须 |
@OneToOne
|
一对一关系 |
OrphanRemoval |
是否开启自动删除外键为null的数据 |
MappedBy |
双向关联实体时,指定两者谁是维护端 |
Cascade/fetch |
与多对一的一直 |
|
|
spring data jpa 默认预先生成了一些基本的CURD(增删查)方法,创建接口并继承相应的repository(资源库)便可获得数据库的dao操作功能,并被spring 容器加载。
repository:通过用来访问领域对象的一个类似集合的接口,在领域与数据映射层之间进行协调,也就是dao.
Repository |
标识任何继承它的均为仓库接口类,方便spring自动扫描识别 |
Crudrepository |
继承自repository,实现了一组crud相关方法 |
Pagingandsortingrepository |
继承自Crudrepository ,实现了一组分页排序相关的方法 |
Jparepository |
继承自Pagingandsortingrepository,实现了一组jpa规范相关的方法 |
public interface StudentRepository extends PagingAndSortingRepository<Student,Long> { }
PagingAndSortingRepository:继承自repository 需要操作的实体类及id的数据类型以便完成映射。
spring data 除了提供基本的操作外还支持通过方法名自动生成SQL,使用时只需根据约定好的规则定义方法名,而方法的具体实现则由spring data完成,避免了许多重复的带啊吗。
List<Student> list = studentRepository.findByNameLikeOrderByIdAsc(String name);