本人博客: https://blog.onfree.cn (●ˇ?ˇ●)

11分鐘了解Spring JDBC和事務管理

不斷的努力,不斷的去接近夢想,越挫越勇,吃盡酸甜苦辣,能夠抵御寒冬,也能夠擁抱春天,這樣的才叫生活。

1. Spring JDBC 配置

1.1 對應的包類:

  • org.springframework.jdbc.core.JdbcTemplate 提供訪問數據庫基本屬性和操作

  • org.springframework.jdbc.datasource.DriverManagerDataSource 獲取數據庫連接

  • org.springframework.jdbc.support.SQLExceptionTranslator 處理SQL Exception 完成轉譯

      <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      	<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
      	<property name="url" value="jdbc:mysql://localhost:3306/classes"/>
      	<property name="username" value="root"/>
      	<property name="password" value="123456" />
      </bean>	
      <bean id="jdbctemplate" class="org.springframework.jdbc.core.JdbcTemplate">
      	<property name="dataSource" ref="datasource"></property>
      </bean>
    

1.2 JdbcTemplate 常用方法

1.2.1數據庫創建創建刪除修改等:
    execute()  
1.2.2數據的增刪改 :
  • int update(String sql) 執行Sql語句 返回受影響的行數;

  • int update(PrepareedStatementCreator psc) 執行 PrepareedStatementCreator 返回語句 返回行數;

  • int update(String sql,PrepareedStatementCreator psc) 執行 PrepareedStatementCreator 設置的Sql 語句 返回行數;

  • int update(String sql,Object…args) 使用Object…設置Sql語句中的參數,參數不能為NULL 返回行數;

      public int upadte(Userdao userdao) {
      		String sql="update user set username=?,password=? where id=?";
      		Object[] object=new Object[]{
      				userdao.getUsername(),
      				userdao.getPassword(),
      				userdao.getId()
      		};
      		int i=this.jdbcTemplate.update(sql, object);
      		return i;
      	}
    
1.2.3 數據表的查詢
  • List query(String sql,RowMapper rowmapper) 執行Sql語句 通過RowMapper返回一個List集合;
  • List query(String sql,PrepareedStatementCreator psc,RowMapper rowmapper) 執行sql語句創建PrepareedStatement對象,通過RowMapper返回一個List對象;
  • List query(String sql,Object[] args,RowMapper rowmapper) 使用Object[] 的值設置Sql語句參數,采用RowMapper回調方法返回LIST 數據;
  • queryForObject(String sql,RowMapper rowmapper,Object…args) 將args 參數綁定Sql語句中,通過RowMapper返回一個Object類型的單行記錄;
  • queryForList(String sql,Object[] args,class elementType) 返回多行數據的結果,但必須是返回列表,elementType 參數返回的是List 元素類型;

2.Spring 事務管理

2.1 Spring 所需要包類:

spring-tx-4.3.6.RELEASE.jar

2.2 事務管理器:

  • DataSourceTransactionManager :

位于org.springframework.jdbc.datasource包中,數據源事務管理器,提供對單個javax.sql.DataSource事務管理,用于Spring JDBC抽象框架、iBATIS或MyBatis框架的事務管理;

  • JdoTransactionManager :

位于org.springframework.orm.jdo包中,提供對單個javax.jdo.PersistenceManagerFactory事務管理,用于集成JDO框架時的事務管理;

  • JpaTransactionManager :

位于org.springframework.orm.jpa包中,提供對單個javax.persistence.EntityManagerFactory事務支持,用于集成JPA實現框架時的事務管理;

  • HibernateTransactionManager :

位于org.springframework.orm.hibernate3包中,提供對單個org.hibernate.SessionFactory事務支持,用于集成Hibernate框架時的事務管理;該事務管理器只支持Hibernate3+版本,且Spring3.0+版本只支持Hibernate 3.2+版本;

  • JtaTransactionManager :

位于org.springframework.transaction.jta包中,提供對分布式事務管理的支持,并將事務管理委托給Java EE應用服務器事務管理器;

  • OC4JjtaTransactionManager :

位于org.springframework.transaction.jta包中,Spring提供的對OC4J10.1.3+應用服務器事務管理器的適配器,此適配器用于對應用服務器提供的高級事務的支持;

  • WebSphereUowTransactionManager :

位于org.springframework.transaction.jta包中,Spring提供的對WebSphere 6.0+應用服務器事務管理器的適配器,此適配器用于對應用服務器提供的高級事務的支持;

  • WebLogicJtaTransactionManager :

位于org.springframework.transaction.jta包中,Spring提供的對WebLogic 8.1+應用服務器事務管理器的適配器,此適配器用于對應用服務器提供的高級事務的支持。

2.3 事務定義:

聲明式事務通過 -傳播行為,隔離級別,只讀提示,事務超時及回滾規則-來進行定義。

2.3.1事務傳播行為:

image

2.4 基于XML 聲明事務

    <!--配置事務管理器 依賴數據源  -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    		<property name="dataSource" ref="datasource"></property>
    </bean>
    <!-- 配置事務通知 -->
    <tx:advice id="txadvice" transaction-manager="transactionManager">
    	<tx:attributes>
    		<tx:method name="*" propagation="REQUIRED" 
    isolation="DEFAULT" read-only="false" timeout="-1" />
    	</tx:attributes>
    </tx:advice>
    <!-- 配置AOP -->
    <aop:config>
    	<aop:pointcut id="pointcut1" expression="execution(* com.dao.*.*(..))" />
    	<aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>
    </aop:config>

2.5 基于Annotation 聲明事務

    <!--配置事務管理器 依賴數據源  -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    		<property name="dataSource" ref="datasource"></property>
    </bean>
    <!-- 配置事務通知 -->
    <tx:annotation-driven transaction-manager="transactionManager" />

在使用的bean類或方法前 添加 @Transactional

本博客原文:https://blog.onfree.cn/posts/461ef513.html
轉載請申明原作者Athink,謝謝!