spring data项目是spring解决数据访问问题的一系列解决方案,包含了大量关系型数据库以及非关系型数据库的访问解决方案。

一、spring data jpa

  1、简介

  jpa是一套规范,不提供实现,由不同的软件提供商自行实现各自的功能。这样做的好处就是使用者只需要按照规范中定义的操作方式来使用,不需要具体软件厂商的实现方式。

  在soring data jpa中,建立访问层非常简单,如下:

  

不过这种方式只能操作于单表以及一些最基本的crud。

  在使用spring data jpa之前,项目中必须配置了数据源datasource或者连接池之类的(druid连接池)。

  2、使用方法

  spring data jpa默认提供了findAll、save等方法,并且可以使用findByName的类似方式来操作数据库,不过总的来说,我个人觉得spring data jpa提供的这套方案有点鸡肋。首先写方法的时候会增加难度,其次企业级应用的业务逻辑也很复杂。

  a、findByName等等方式

  根据字段name到数据库中查询,这块可以自行百度

  b、@Query

  这种方式有点类似于mybatis提供的方案,sql由开发自己完成

  

  这种是使用参数索引的方式来查询,也可以基于参数名称查询,如下:

  

  也可以搭配其他注解用于更新,如下:

  

  注意,此@Transactional是org.springframework.transaction.annotation.Transactional,而不是javax.transaction.

二、事务

  1、简介

  所有数据访问技术都有事务处理机制,一般都是提供api来打开事务、提交事务以及回滚事务等操作。spring的事务机制是用统一的机制来处理不同数据访问技术的事务处理,提供了一个PlatformTransactionManager的接口。不同数据访问技术

则对应不同的实现类,如下:

  JDBC------------------------------->DataSourceTrasactionManager

  JPA---------------------------------->JpaTransactionManager

  Hibernate-------------------------->HibernateTransactionManager

  JDO--------------------------------->JdoTransactionManager

  分布式事务------------------------>JtaTransactionManager

  

  2、声明式事务

  声明式事务,就是使用注解来表明该方法上是需要事务支持的。在spring中提供了@EnableTransactionManagement来开启事务,我们之前都是使用xml配置事务,等同于xml配置方式的 <tx:annotation-driven />。

  3、注解事务行为

  参考文章:https://blog.csdn.net/mawming/article/details/52277431

  @Transaction不仅可以用于方法上,也可以使用在类上,使用在类上说明此类中的所有public方法都将开启事务,并且方法上的事务注解优先级高于类事务注解。

  4、spring data jpa事务支持

  spring data jpa对所有的默认方法都开启了事务支持,且查询类事务默认为readonly=true。

  5、springboot的事务支持

  在使用jdbc时,springboot默认提供了DataSourceTransactionManager,若选用的是spring data jpa时,默认提供JpaTransactionManager。并且springboot已经默认开启注解事务。

三、非关系型数据库nosql

  nosql是对于不使用关系作为数据管理的数据库系统的统称,nosql特点:不使用sql语言作为查询语言、数据存储也不是固定的表与字段。目前主要有以下几类:

           ---------文档存储型(MongoDB)

           | 

  nosql------------>---------图形关系存储型(Neo4j)  

           |

         ---------键值对存储(Redis)

  

  1、MongoDB

  springboot中集成mongodb参考博客:https://blog.csdn.net/stronglyh/article/details/81024588

  2、Redis

  springboot中集成redis参考博客:https://www.cnblogs.com/gdpuzxs/p/7222309.html

springboot深入学习(五)-----spring data、事务的更多相关文章

  1. spring深入学习(五)-----spring dao、事务管理

    访问数据库基本是所有java web项目必备的,不论是oracle.mysql,或者是nosql,肯定需要和数据库打交道.一开始学java的时候,肯定是以jdbc为基础,如下: private sta ...

  2. spring boot(五)Spring data jpa介绍

    在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 使用spr ...

  3. 【spring源码学习】spring的事务管理的源码解析

    [一]spring事务管理(1)spring的事务管理,是基于aop动态代理实现的.对目标对象生成代理对象,加入事务管理的核心拦截器==>org.springframework.transact ...

  4. spring data事务

    事务在spring data中的使用 1:事务一般在service层.因为一个service方法可能会多次调用不同的dao,为了保证事务的完整性,那么多次的dao都放到一个方法里面 2:读的时候可以不 ...

  5. SpringBoot 自动配置:Spring Data JPA

    前言 不知道从啥时候开始项目上就一直用MyBatis,其实我个人更新JPA些,因为JPA看起来OO的思想更强烈些,所以这才最近把JPA拿出来再看一看,使用起来也很简单,除了定义Entity实体外,声明 ...

  6. 【spring源码学习】spring的事务管理源码学习

    一.抽象概念 1.事务管理器 接口:org.springframework.transaction.PlatformTransactionManager 实现类:org.springframework ...

  7. SpringBoot入门 (五) 数据库访问之spring data jpa

    本文记录学习使用spring data jpa访问数据库 一 什么是Spring Data JPA JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java ...

  8. Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别

    转: http://blog.csdn.net/it_man/article/details/5074371 Spring事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之 ...

  9. Spring Data JPA 初体验

    一,JPA相关的概念 JPA概述 全称是:JavaPersistence API.是SUN公司推出的一套基于ORM的规范. Hibernate框架中提供了JPA的实现. JPA通过JDK 5.0注解或 ...

随机推荐

  1. RxJS之AsyncSubject

    AsyncSubject 是另一个 Subject 变体,只有当 Observable 执行完成时(执行 complete()),它才会将执行的最后一个值发送给观察者. import { Compon ...

  2. PAT L2-013 红色警报(并查集求连通子图)

    战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不 ...

  3. f5通过vs访问其他站点的源、目的IP问题

    通过VIP访问其他站点,则事实上是从服务器访问到其他站点. 如,域名 a.xin.com解析到vip 10.16.100.47(member为10.16.45.71和10.16.45.72)访问192 ...

  4. python中if not x: 和 if x is not None: 和 if not x is None的使用和区别

    代码中经常会有变量是否为None的判断,有三种主要的写法: 第一种是`if x is None`: 第二种是 `if not x:`: 第三种是`if not x is None`(这句这样理解更清晰 ...

  5. [leetcode]678. Valid Parenthesis String验证有效括号字符串

    Given a string containing only three types of characters: '(', ')' and '*', write a function to chec ...

  6. go流程控制与函数

    package main; import ( "fmt" ); func main() { isRun := true; //条件判断 if isRun { fmt.Printf( ...

  7. hangfire enqueued but not processing(hangfire 定时任务入队列但不执行)

    不生效的方法 //RecurringJob.AddOrUpdate<FamilyAppService>((s) => s.UpdateFamilyLevel(), input.Cro ...

  8. PAT 1024 科学计数法 (20)(精简版代码+思路+推荐测试样例)

    1024 科学计数法 (20)(20 分) 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+, ...

  9. andorid 全部对话框

    .xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...

  10. UVA 11235 (RMQ) 频繁出现的数值

    题目大意是给出一个非降序排列的数组,然后n个询问,每次询问一个区间内出现次数最多的数的次数. 首先要弄清楚题目的是一个非降序的数组,那么说明相等的数都会在一起,类似于11223334569这样的,那么 ...