Spring数据访问

Spring Data Commons

Repository

根接口

CRUDRepository

CRUN操作接口

PagingAndSortingRepository

分页和排序操作接口

Spring Data JPA

配置使用

开启Spring Data JPA支持

@EnableJpaRepositories("package")

package:扫描数据访问层接口

@Configuration
@EnableJpaRepositories("package") 
public class JpaConfiguration{
    @Bean
    public EntityManagerFactory entityManagerFactory(){
        ...
    }
    
    //配置数据源Bean:DataSource
    //配置事务管理器Bean:PlatformTransactionManager
}

定义数据访问层

定义继承JpaRepository的接口

使用@Query查询
  • 形参索引:?1,?2...,相应形参1,2
  • 形参注解::name,相应@Param("name") 形参
使用条件类查询

接口类实现JpaSpecificationExcutor接口,实现其toPredicate方法,使用其中的形参CriteriaBuilder构造查询条件。

自定义Repository的实现

  • 自定义Repository接口,使用@NoRepositoryBean注解。
  • 定义上述接口的实现类。
  • 自定义XxRepositoryFactoryBean继承JpaRepositoryFactoryBean,并用其注册上述实现类。

SpringBoot的支持

JDBC的自动配置

  • dataSource:spring.datasource.xxx
  • 自动开启了注解事务支持@EnableTransactionManagerment
  • 自动配置了jdbcTemplate

JPA的自动配置

  • 默认的jpa实现是Hibernate
  • spring.jpa.xxx配置

SpringBoot下使用Spring Data JPA

  • 添加spring-boot-stater-data-jpa
  • 定义dataSource,实体类和数据访问层
  • 注册数据访问层bean即可使用

声明式事务

Spring事务机制

提供一个PlatformTransactionManager接口,不同的数据访问技术不同实现。

  • JDBC → DataSourceTransactionManager
  • JPA → JpaTransactionManager
  • Hibernate → HibernateTransactionManager
  • JDO → JdoTransactionManager
  • 分布式事务 → JtaTransactionManager

定义事务管理器

@Bean
public PlatformTransactionManager transactionManager(){
    XxTransactionManager transactionManager = new XxTransactionManager();
    transactionManager.setDataSource(dataSource());
    return transactionManager;
}

声明式事务

开启声明式事务支持:@EnableTransactionManagement,则自动扫面@Transaction注解的方法和类。

@Transaction属性

propagation:指定事务的生命周期
  • REQUIRED:默认。调用方法A无则新建一个事务,A中调用方法B,方法B使用相同的事务,B发生异常,AB都将回滚。
  • REQUIRES_NEW:调用方法A或B,无论是否有事务都新建一个事务,方法B的异常不会导致A的回滚。
isolation:事务的隔离级别,决定事务的完整性,处理多事务对相同数据的处理机制
  • REPEATABLE_UNCOMMITTED:A事务修改了记录但未提交事务,B事务可以读取到修改后的值。可导致脏读,不可重复读以及幻读。
  • REPEATABLE_COMMITTED:A事务修改了记录且提交了事务之后,B事务才可以读取到提交后的值。阻止脏读,但可能导致不可重复读和幻读。
  • REPEATABLE_READ:REPEATABLE_COMMITTED+当A事务读取了一条记录,B事务将不允许修改这条记录。阻止了脏读和不可重复读,但可出现幻读。
  • SERIALIZABLE:事务按顺序执行,可避免以上缺陷,但开销较大。
  • DEFAULT:使用数据库自身的隔离级别。ORACLE、SQL Server=REPEATABLE_COMMITTED;MySQL=REPEATABLE_READ
timeout

事务过期时间,默认为数据库的事务过期时间。

readOnly

是否为只读事务,默认fasle。

rollbackFor

指定可以引起事务回滚的异常。默认Throwable子类。

noRollbackFor

指定不可以引起事务回滚的异常。默认Throwable子类。

数据缓存Cache

Spring缓存支持

注册相应CacheManager实现类的Bean

声明式缓存

开启支持:配置类增加@EnableCaching注解。

  • Cacheable:有则返回,无则将方法返回值设置到缓存。
  • CachePut:每一次都将方法返回值放入缓存。
  • CacheEvict:将一条或多条数据从缓存中删除。
  • Caching:用于组合多个注解在一个方法上。

属性

  • value:指定要使用的缓存名称。
  • key:指定存储到缓存的键。
  • key中可使用方法参数param变量值:#param。如果没有指定key,则方法参数作为key保存到缓存中。==多参数?对象参数使用toString()?==

SpingBoot的支持

默认自动配置了多个CacheManager实现类的支持。
默认使用SimpleCacheConfiguration,ConcurrentMapCacheManager。
配置缓存使用spring.cache.xxx。

spring.cache.type=ehcache、redis、guava...
spring.cache.cache-names= #程序启动时创建的名字
spring.cache.ehcache.config= #ehcache配置文件地址
spring.cache.guava.spec= # guava specs

非关系型数据库NoSQL

MongoDB

Spring的支持

  • 1.对象-文档的映射注解。
  • 2.数据操作类MongoTemplate,Server配置类MongoClient,DB配置类MongoDbFactory。
  • 3.配置类注解@EnableMongoRepositories

SpringBoot的支持

spring.data.mongodb.xxx

Redis

Spring的支持

  • 连接相关的ConnectionFactory,数据操作类RedisTemplate

SpringBoot的支持

  • 自动配置了JedisConnectionFactory,RedisTemplate和StringRedisTemplate。
  • spring.redis.xxx
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,282评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,665评论 19 139
  • spring官方文档:http://docs.spring.io/spring/docs/current/spri...
    牛马风情阅读 1,856评论 0 3
  • 1、Spring 对 DAO的支持 Spring支持目前大多数常用的数据持久化技术,Spring定义了一套面向DA...
    穿拖板鞋的加菲猫阅读 499评论 0 0
  • 什么是Spring Spring是一个开源的Java EE开发框架。Spring框架的核心功能可以应用在任何Jav...
    jemmm阅读 16,780评论 1 133

友情链接更多精彩内容