美文网首页
Spring数据访问

Spring数据访问

作者: JAVA觅音阁 | 来源:发表于2017-11-21 09:21 被阅读36次

    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

    相关文章

      网友评论

          本文标题:Spring数据访问

          本文链接:https://www.haomeiwen.com/subject/rhsivxtx.html