1.事务

  a.事务的关键属性(ACID)

    ①原子性(atomicity):事务的原子性确保动作要么全部完成,要么完全不起作用

    ②一致性(consistency):一旦所有事务动作完成,事务就被提交。也就是说要么都成功,要么都不成功

    ③隔离性(isolation):多个事物同时处理一个数据的时候,每个事物都应该与其他事务隔离开来,防止数据损坏

    ④持久性(durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响。应该被持久化到数据库中

  b.事务的传播行为

    ①REQUERED——PROPAGATION_REQUIRED

      支持当前事务,如果没有事物则新建事物----最常用

    ②SUPPORTS

      支持当前事务,如果没有事物,则以非事物的模式进行

    ③MANDATORY

      支持当前事务,如果当前没有事物,则抛出异常

    ④REQUIRES-NEW

      新建一个事物,如果当前存在事物,则将当前事务挂起

    ⑤NOT-SUPPORTED

      以非事物的方式进行,如果当前有事物则将事物挂起

    ⑥NEVER

      以非事物的方式进行,如果有事物则挂起

    ⑦NESTED

      如果当前存在事物,则嵌套在事物内进行,如果当前没有事物,则和1的方式一样

  c.事务的隔离特性

    ①ISOLATION_DEFAULT:使用数据库默认的隔离级别

    ②ISOLATION_READ_UNCOMMITTED:允许读取改变了的还未提交的数据,可能导致脏读、不可重复读和幻读。 是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。

    ③ISOLATION_READ_COMMITTED:允许并发事务提交之后读取,可以避免脏读,可能导致重复读和幻读。 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据

    ④ISOLATION_REPEATABLE_READ:对相同字段的多次读取结果一致,可导致幻读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。

    ⑤ISOLATION_SERIALIZABLE:完全服从ACID的原则,确保不发生脏读、不可重复读和幻读。 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。

  d.事务针对的三大问题

    ①脏读:就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。

    ②不可重复读:是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据---并且修改。那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的

    ③幻读:是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。 同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象 发生了幻觉一样

2.Spring Data JPA

  a.定义:通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

  b.配置:

  1. <!-- 配置自动扫描的包 -->
  2. <context:component-scan base-package="com.wode">
  3. </context:component-scan>
  4.  
  5. <!-- 配置数据源 -->
  6. <context:property-placeholder location="classpath:db.properties"/>
  7. <bean id="dataSource"
  8. class="com.mchange.v2.c3p0.ComboPooledDataSource">
  9. <property name="user" value="${jdbc.user}"></property>
  10. <property name="password" value="${jdbc.password}"></property>
  11. <property name="driverClass" value="${jdbc.driverClass}"></property>
  12. <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
  13. </bean>
  14.  
  15. <!-- 配置 JPA 的 EntityManagerFactory -->
  16. <bean id="entityManagerFactory"
  17. class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  18. <property name="dataSource" ref="dataSource"></property><!-- 添加数据源 -->
  19. <property name="jpaVendorAdapter">
  20. <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>
  21. </property>
  22. <property name="packagesToScan" value="com.wode.entity"></property>
  23. <!-- hibernate 配置 -->
  24. <property name="jpaProperties">
  25. <props>
  26. <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
  27. <prop key="hibernate.hbm2ddl.auto">none</prop>
  28. <prop key="hibernate.show_sql">true</prop>
  29. <prop key="hibernate.format_sql">true</prop>
  30. <!-- 方言 hibernate 并不知道自己要使用哪种数据库 -->
  31. <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
  32. <!--
  33. <prop key="hibernate.cache.use_second_level_cache">true</prop>
  34. <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
  35. <prop key="hibernate.cache.use_query_cache">true</prop>
  36. -->
  37. </props>
  38. </property>
  39. <!-- <property name="sharedCacheMode" value="ENABLE_SELECTIVE"></property>-->
  40. </bean>
  41.  
  42. <!-- 配置事务 纯事物 jpa事物 -->
  43. <bean id="transactionManager"
  44. class="org.springframework.orm.jpa.JpaTransactionManager">
  45. <property name="entityManagerFactory" ref="entityManagerFactory"></property>
  46. </bean>
  47.  
  48. <!-- 配置支持基于注解的事务 -->
  49. <tx:annotation-driven transaction-manager="transactionManager"/>
  50.  
  51. <!-- 配置 SpringData -->
  52. <jpa:repositories base-package="com.wode.dao"
  53. entity-manager-factory-ref="entityManagerFactory"></jpa:repositories>

  c.书写Bean

  1. @Entity
  2. @Table(name="users",catalog="dbcp")
  3. public class User implements Serializable{
  4.  
  5. @Id
  6. @GeneratedValue(strategy=GenerationType.IDENTITY)
  7. // @Column(name="user_id")
  8. private Integer userId;
  9. private String userName;
  10. private String userPwd;
  11.  
  12. public Integer getUserId() {
  13. return userId;
  14. }
  15. public void setUserId(Integer userId) {
  16. this.userId = userId;
  17. }
  18. public String getUserName() {
  19. return userName;
  20. }
  21. public void setUserName(String userName) {
  22. this.userName = userName;
  23. }
  24. public String getUserPwd() {
  25. return userPwd;
  26. }
  27. public void setUserPwd(String userPwd) {
  28. this.userPwd = userPwd;
  29. }
  30.  
  31. }

  d.书写Dao接口

  1. public interface UserDao extends JpaRepository<User, Integer>{
  2.  
  3. }

  e.service层使用

  1. userDao.save(user); //增
  2.  
  3. userDao.delete(userId); //删
  4.  
  5. List<User> users = userDao.findAll(); //查询所有
  6.  
  7. User user = userDao.findOne(userId); //根据Id查询

  f.JPA命名规则

  g.自定义JPA

  1. @Query(value="select user_money from users where user_id=:id",nativeQuery=true)
  2. public double findUserMoneyByUserId(@Param("id") int id);
  3.  
  4. @Modifying
  5. @Query(value="update users set user_money=:money where user_id=:id",nativeQuery=true)
  6. public void transMoney(@Param("money") double money,@Param("id") int id);

JavaEE 之 Spring Data JPA的更多相关文章

  1. JavaEE 之 Spring Data JPA(二)

    1.JPQL a.定义:Java持久化查询语言(JPQL)是一种可移植的查询语言,旨在以面向对象表达式语言的表达式,将SQL语法和简单查询语义绑定在一起·使用这种语言编写的查询是可移植的,可以被编译成 ...

  2. 快速搭建springmvc+spring data jpa工程

    一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblo ...

  3. 了解 Spring Data JPA

    前言 自 JPA 伴随 Java EE 5 发布以来,受到了各大厂商及开源社区的追捧,各种商用的和开源的 JPA 框架如雨后春笋般出现,为开发者提供了丰富的选择.它一改之前 EJB 2.x 中实体 B ...

  4. Spring Data JPA初使用(转载)

    我们都知道Spring是一个非常优秀的JavaEE整合框架,它尽可能的减少我们开发的工作量和难度. 在持久层的业务逻辑方面,Spring开源组织又给我们带来了同样优秀的Spring Data JPA. ...

  5. Spring Data Jpa 详解

    前言: JPA全称Java Persistence API,即Java持久化API,它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据,结合其他ORM的使用,能达到简化开发 ...

  6. Spring Data Jpa 详解 (配置篇)

    前言: JPA全称Java Persistence API,即Java持久化API,它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据,结合其他ORM的使用,能达到简化开发 ...

  7. Spring Data JPA初使用

    我们都知道Spring是一个非常优秀的JavaEE整合框架,它尽可能的减少我们开发的工作量和难度. 在持久层的业务逻辑方面,Spring开源组织又给我们带来了同样优秀的Spring Data JPA. ...

  8. Spring Data JPA 入门Demo

    什么是JPA呢? 其实JPA可以说是一种规范,是java5.0之后提出来的用于持久化的一套规范:它不是任何一种ORM框架,在我看来,是现有ORM框架在这个规范下去实现持久层. 它的出现是为了简化现有的 ...

  9. 干货|一文读懂 Spring Data Jpa!

    有很多读者留言希望松哥能好好聊聊 Spring Data Jpa!其实这个话题松哥以前零零散散的介绍过,在我的书里也有介绍过,但是在公众号中还没和大伙聊过,因此本文就和大家来仔细聊聊 Spring D ...

随机推荐

  1. C#标准体重判断

  2. IOS 颜色的宏定义

    #define RGB(r, g, b, a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]   self.vie ...

  3. AD9361寄存器配置顺序,循环模式,自收自发

    :] cmd_data; :] index; begin case(index) 'h000,8'h00};//set spi -- 'h3df,8'h01};//set init -- 'h037, ...

  4. Json数据交互格式介绍和比较

    1.什么是数据交互格式? 就是客户端和服务端进行信息传输的格式(xml和json),双方约定用什么格式进行传输,然后解析得到自己想要的值 xml扩展标记语言,属于重量级(第一占宽带.第二解析难) js ...

  5. tail -f -n 0 /var/log/messages

    <pre><font color="#CC0000"><b>root@kali</b></font>:<font ...

  6. extjs5(项目中文件的加载过程)

    现在来看看js类加载过程.如下图所示: 1、首先:浏览器中输入 localhost:1841 ,调用 index.html; <!DOCTYPE HTML> <html> &l ...

  7. 步步為營-97-MyMVC3

    說明: 解決另外一個不合理之處:通過控制器完成處理 1:在mvc文件夾下面添加一個工廠類文件DefaultControllerFactory 1.2進一步升級為抽象工廠 2 下一步如何規範Contro ...

  8. Mac OS X10.8.3-bash基本命令失效后的修复

    -bash基本命令都失败了. 比如: -bash: ls :command not found   顿时心都凉了. 想要找到.bash_profile文件也不是那么容易的.     step1. 在t ...

  9. Linux SSH & SCP命令

    SSH SSH为建立在应用层和传输层基础上的安全协议 sshd服务使用SSH协议进行远程控制,或在计算机之间传送文件.而实现此功能的telnet(远程桌面) 是不安全的,使用明文传送密码 ssh ss ...

  10. 利用redis统计信息对CPU使用率进行收集

    http://dy.163.com/v2/article/detail/DQT2ROO10511RVML.html