本人博客: 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事務傳播行為:
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,謝謝!
浙公網安備 33010602011771號