Spring Boot总结(二):Spring Boot中使用数据库

Spring Boot总结(一):入门

Spring Boot总结(二):Spring Boot中使用数据库

Spring Boot总结(三):Spring Boot界面设计

Spring Boot总结(四):提高数据库访问性能

Spring Boot总结(五):安全设计

Spring Boot总结(六):Spring Boot SSO

Spring Boot总结(七):使用分布式文件系统

Spring Boot总结(八):云应用开发

Spring Boot总结(九):构建高性能的服务平台

Spring Boot总结(十):自动配置实现原理

Spring Boot总结(十一):数据访问实现原理

Spring Boot总结(十二):微服务核心技术实现原理

.1 使用MySQL

对于传统关系型数据库来讲,Spring Boot使用JPA(Java Persistence API)资源库来实现对数据库的操作,使用MySQL也是如此,简单地讲,JPA就是为POJO(Plain Ordinary Java Object)提供持久化的标准规范,即将Java的普通对象通过对象关系映射(Object-Relational Mapping,ORM)持久化到数据库中;

1.MySQL依赖配置

JPA:spring-boot-starter-data-jpa

mysql:mysql-connector-java

2.实体建模

@Table指定关联的数据库的表名

@Id定义一套记录的唯一标识

@GeneratedValue将其设置为自动生成

@ManyToOne定义多对一关系

日期类型使用@DateTimeFormat来进行格式化

@JsonBackReference用来防止关系对象的递归访问

3.实体持久化

接口:JPARepository继承于PagingAndSortingRepository,它提供了分页和排序的功能,PagingAndSortingRepository继承与CrudRepository,它提供了增删改查功能。

JPA还提供了一些自定义的声明方法的规则,例如在接口中使用关键字findBy、readBy、getBy作为方法名的前缀,拼接实体类中的属性字段(首页字母大写),并可选的拼接一些SQL关键字来组合成一个查询的方法。

对于符合JPA规则的,这些方法不需要实现,JPA会代理实现这些方法;

4.MySQL测试

JPA的配置类:

@EnableTransactionManagement 启用了JPA的事务管理;

@EnableJPARepository 启用了JPA资源库并指定了上面定义的接口资源库的位置;

@EntityScan指定定义实体的位置

数据库的表结构不需要创建,在程序运行的时候会根据实体的定义自动的创建;

hibernate:

                   ddl:update

就是使用Hibernate来自动的更新表结果,即如果数据表不存在则创建表,或者如果修改了表结构,在程序启动的时候则执行表结构的同步更新;

使用spring:datasource来设置数据源:

url:

username:

password:

.2 使用Redis

Redis是一种可以持久存储的缓存系统,是一个高性能的key-value数据库,它使用键-值的方式来存储数据;

1.Redis依赖配置

spring-boot-starter-redis

2.创建Redis服务类

Redis提供了下列几种数据类型可供存取:

  1. String
  2. hash
  3. list
  4. set以及zset

对于Redis,Spring Boot没有提供像JPA那样的相应的资源库接口

RedisTemplate初始化

@Configuration

public class RedisConfig{

         @Bean

         public RedisTemplate<String,String> redisTemplate(RedisConnectionFactory factory){

                   StringRedisTemplate

                   Jackson2JsonRedisSerializer

                   ObjectMapper

}

}

3.Redis测试

安装redis之后,在application.yml中配置连接Redis服务器等参数;

对于使用Redis还可以将注解方式与调用数据库方式相结合,那样就不需要编写像上面那样的服务类,并且使用起来更加的简单。

2.3 使用MongoDB

MongoDB是文档型的NoSQL数据库,具有大数据量、高并发等优势,但缺点是不能建立实体关系,而且也没有事务管理机制;

1.MongoDB依赖配置

Spring Boot中使用MongoDB就像使用JPA一样容易,并且同样拥有功能完善的资源库,同样的,如果要使用MongoDB,首先必须在Maven中添加spring-data-mongodb

除了MongoDB依赖之外,还需要一些附加的工具配套使用;

例如:org.pegdown

spring-boot-starter-hateoas

jackson-annotations

2.文档建模

MongoDB是文档型数据库,使用MongoDB也可以使用关系型数据库那样为文档建模

@Document(collection=)

@Id

@NotNull

@PersistenceConstructor

3.文档持久化

MongoDB也有像使用JPA那样的资源库,可以继承于MongoRepository,实现文档的持久化

MongoDB的配置类:继承AbstractMongoConfiguration

4.MongoDB测试

4 使用Neo4j

Neo4j是具有传统数据库的优点,又具备NoSQL数据库优势的一种数据库,Neo4j是一个高性能的NoSQL图数据库,并且具备完全事务特性,Neo4j将结构化数据存储在一张图上,图中每一个节点的属性表示数据的内容,每一条有向边表示数据的关系。Neo4j没有表结构的概念,它的数据用节点的属性来表示;

1.Neo4j依赖配置

spring-data-neo4j

2.节点和关系实体建模

虽然Neo4j没有表的概念,但是它有节点和关系的概念。

Neo4j的实体关系模型的定义比起关系型数据库的实体-关系模型的定义要简单的多,但是它更加形象和贴切的表现了实体之间的关系。更难能可贵的是,这个实体-关系模型可以不经过任何的转换直接存到数据库中,即,在Neo4j图数据库中保存的数据仍然是一张图,对于业务人员和数据库设计人员来讲,它的意义相同,所以使用neo4j数据库,很大程度上减轻了设计工作和沟通成本;

像JPA使用了ORM一样,Neo4j使用了对象-图形映射(Object-Graph Mapping,OGM)的方式来建模。

类注解:

@JsonIdentityInfo防止查询数据的时候引发递归访问效应

@NodeEntity 标识这个类是一个节点实体

属性注解:

@GraphId定义了节点的一个唯一性标识,它将在创建节点时候由系统自动生成,所以它是不可缺少的。节点的属性可以跟随需要增加或则减少,并不影响节点的使用;

@Relationship(type=”ACTS_IN”,direction=Relationship.INCOMING)

@EelationshipEntity表名这个类是一个关系实体,并用type指定了关系的模型,其中@StartNode指定起始节点的实体,@EndNode指定终止节点的实体,这说明了图中有向边的起点和终点的定义。

3.节点实体持久化

节点实体的持久化:

继承GraphRepository。

关系实体不需要 持久化,当保存节点实体的时候,节点实体的关系将会通知保存;

4.Neo4j测试

@EnableTransactionManagement启用了事务管理;

@EnableNeo4jRepository启用了Neo4j资源库并指定了我们定义的资源库接口的位置;

@Configuration直接来声明Neo4j的配置类,该类继承于Neo4jConfiguration

在重载的SessionFactory函数中设定了定义实体的位置,这将促使定义的实体被作为域对象导入,RemoteServer设定连接Neo4j服务器的URL、用户名和密码;

需要注意的是:Neo4j还没有日期格式的数据类型,所以在读取日期格式类型的数据的时候,使用注解@DateTimeFormat进行格式转换,而在保存@DateLong将它转换成Long类型的数据进行存储;

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值