spring数据源的注入、JdbcTemplate管理、编程式的事务管理DataSourceTransactionManager
2010-06-14 22:00
对于不同的数据库连接来源需求,spring提供了javax.sql.DataSource注入,更换数据来源只要在Bean定义中修改配置,而不用修 改任何一行代码。
应不同的系统,可能使用不同的数据来源,例如:jdbc、连接池、或是JNDI等等,资料变更是底层的行为,不应影响到上层的业务逻辑。 例子: <beans> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/demo</value> </property> <property name="username"> <value>caterpillar</value> </property> <property name="password"> <value>123456</value> </property> </bean> <bean id="userDao" class="onlyfun.caterpillar.UserDao"> <property name="dataSource"> <ref bean="datasource"/> </property> </bean> </beans> 其中"driverClassName"、"url"、"username"、"password"四個屬性分別用來設定JDBC驅動程式類別、資料庫 URL協定、使用者名稱、密碼,而DriverManagerDataSource继承了javax.sql.DataSource. 注意: (1)、该例子使用的是简单的jdbc连接,如果应用到工程,必须使用连接池,这时只要更换class属性为 class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" (2)、如果采用的是JNDI连接,可以这么设定: <bean id="dataSource" class="org.springframework.indi.JndiObjectFactoryBean"> <property name="jndiName"> <value>jdbc/demo</value> </property> </bean> Spring学习笔记JDBC模版管理 对于Spring应用,Spring 提供了一个更好的数据持久化的框架,Spring让持久层的类UserDao继承 org.springframework.jdbc.core.JdbcTemplate这个封装了jdbc操作的类,要建立JdbcTemplate的 实例,必须要有一个DataSource物件作为建构时的物件. JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); 例子(1):-----取得模版 package onlyfun.caterpillar; import javax.sql.DataSource; import org.springframework.jdbc.core.JdbcTemplate; public class UserDAO implements IUserDAO { private JdbcTemplate jdbcTemplate; public void setDataSource(DataSource dataSource) { jdbcTemplate = new JdbcTemplate(dataSource); } return null; } } 例子(2):-----update操作(同样的操作适用于update、insert、delete) JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); jdbcTemplate .update( "UPDATE user SET age = ? WHERE id = ?", new PreparedStatementSetter() { public void setValues(PreparedStatementSetter ps) throws SQLException { ps.setInt(1, 18); ps.setString(2, "erica"); } } ); 第一个用于创建PreparedStatement的SQL。第二个参数是为PreparedStatement设定参数的 PreparedStatementSetter 注意:我们还可以通过JdbcTemplate.call方法调用存储过程. 编程式的事务管理:我们可以使用 org.springframework.jdbc.datasource.DataSourceTransactionManager(platformTransactionManager 的一个实现)作为我们的事务管理员,我们在Bean定义中配置,并将DataSource注入给它。 配置文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/TestDB</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value></value> </property> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource"> <ref bean="dataSource"/> </property> </bean> <bean id="userDAO" class="onlyfun.caterpillar.UserDAO"> <property name="dataSource"> <ref bean="dataSource"/> </property> <property name="transactionManager"> <ref bean="transactionManager"/> </property> </bean> </beans> DAO操作类: package onlyfun.caterpillar; import javax.sql.DataSource; import org.springframework.jdbc.core.*; import org.springframework.transaction.*; import org.springframework.transaction.support.*; import org.springframework.dao.*; public class UserDAO { private DataSource dataSource; private PlatformTransactionManager transactionManager; public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } public void setTransactionManager(PlatformTransactionManager transactionManager) { this.transactionManager = transactionManager; } public void insertUser(User user) { DefaultTransactionDefinition def = new DefaultTransactionDefinition(); TransactionStatus status = transactionManager.getTransaction(def); try { JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); jdbcTemplate.update("INSERT INTO USER VALUES('Spring008', 'caterpillar', 'M', 29)"); jdbcTemplate.update("INSERT INTO USER VALUES('Spring009', 'momor', 'F', 26)"); jdbcTemplate.update("INSERT INTO USER VALUES('Spring010, 'beckyday', 'F', 35)"); } catch (DataAccessException ex) { transactionManager.rollback(status); // 也可以執行status.setRollbackOnly(); throw ex; } transactionManager.commit(status); } } |
相关推荐
2、配置数据源,注入JdbcTemplate,启用事务管理,注入DataSourceTransactionManager 3、传播机制 @see Propagation#REQUIRED 支持当前事务,如果没有则新建一个事务, 例:a方法调用b方法,如果a方法有事务,则b加入...
配制Spring事务和JdbcTemplate使用 配制Spring事务和JdbcTemplate使用
https://blog.csdn.net/u012081441/article/details/80746538
Spring中的JdbcTemplate,Spring中的的事务.。。。。。。。
Spring JdbcTemplate&声明式事务.md
工程实现的是Spring+SpringMVC+JDBCTemplate简单用户管理功能,界面十分粗糙,只是演示功能。
day4-Spring JdbcTemplate & 声明式事务.md
spring-jdbcTemplate实例工程
SpringBoot操作多数据源(JPA+JdbcTemplate)使用HikariCP数据源进行示例。
使用Spring的JdbcTemplate实现分页功能
Spring Security 3.1 +Spring +Servlet+JdbcTemplate 自己找的资料,并开发成功
最近项目中的工作流需要查询多个数据源的数据,数据源可能是不同种类的:如sql server,oracl等等,一开始是用的配置实现,后来发现在项目运行中,可能需要动态的添加更多不同类型的数据源,所以最终的逻辑是将数据源...
JdbcTemplate是spring-jdbc提供的数据库核心操作类,那对JdbcTemplate进行事务控制呢?
Spring4--3.jdbcTemplate事务
①导入spring-jdbc和spring-tx坐标 ②创建数据库表和实体 ③创建JdbcTemplate对象 ④执行数据库操作
使用spring+springmvc+jdbcTemplate 数据库使用orcal、redis 完成一个webdemo
springjdbc演示,spring持久层知识,包括注入数据源,jdbcTemplate操作数据库,jdbcTemplate以对象方式操作数据库
NULL 博文链接:https://gary-bu.iteye.com/blog/2024022
使用Spring的JdbcTemplate调用Oracle的存储过程
spring持久层,建立持久数据库,spring-jdbc(jdbctemplate)所需jar包 spring持久层,建立持久数据库,spring-jdbc(jdbctemplate)所需jar包