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
网友评论