`

spring数据源的注入、JdbcTemplate管理、编程式的事务管理DataSourceTransactionManager

 
阅读更多
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);


}
}

 

转自http://blog.csdn.net/dlgdlg_2008/article/details/7209639

分享到:
评论

相关推荐

    4.Spring中的JdbcTemplate,Spring中的的事务,

    Spring框架支持两种类型的事务管理:编程式事务管理和声明式事务管理。 - **编程式事务管理**:通过编码的方式来管理事务,适用于需要细粒度控制的情况。 - **声明式事务管理**:通过配置来管理事务,更易于使用且...

    注入JdbcTemplate启用事务管理.docx

    接下来,配置数据源和JdbcTemplate。在Spring的配置文件(如`applicationContext.xml`)中,可以这样设置: ```xml &lt;bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"&gt; ...

    day4-Spring JdbcTemplate & 声明式事务.md

    ### Spring JdbcTemplate与声明式事务知识点详解 #### JdbcTemplate基本使用概述 JdbcTemplate是Spring框架提供的用于简化JDBC API操作的对象。它通过提供一个高级抽象层来减少编码工作量,并帮助开发者避免处理...

    Spring boot +jdbctemplate

    通过自动配置、内嵌Web服务器、JdbcTemplate的简单操作、声明式事务管理、拦截器以及数据源的配置,开发者可以更专注于业务代码的编写,提高开发效率和代码质量。同时,Spring Boot的灵活性使得它可以适应各种复杂的...

    Spring获取数据源代码

    1. **Spring数据源类型** - **BasicDataSource**: Spring内置的`org.springframework.jdbc.datasource.BasicDataSource`是最常用的数据源实现,它基于Apache Commons DBCP库,提供连接池功能。 - **...

    Spring JDBCTemplate连接池jar包

    4. `spring-tx-5.0.0.RELEASE.jar`:提供了事务管理功能,可以配合JDBCTemplate进行事务的声明式或编程式管理。 5. `commons-logging-1.2.jar`:Apache Commons Logging库,是Spring的日志适配器,允许我们灵活地...

    spring mvc注解jdbctemplate

    当然,实际项目中可能需要使用更复杂的数据源配置,如DataSourceTransactionManager和PlatformTransactionManager来处理事务。 接下来,我们将在Spring MVC控制器类中使用JdbcTemplate。Spring MVC通过`@Autowired`...

    mybatis spring 多数据源

    MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,而Spring则是一个强大的企业级应用框架,提供了AOP(面向切面编程)和依赖注入等功能,使得多数据源的管理变得更为便捷。 在实际开发中,...

    spring2跨数据源访问

    Spring提供了PlatformTransactionManager接口,如DataSourceTransactionManager,用于管理不同数据源的事务。通常需要为每个数据源配置一个事务管理器,并确保在事务管理策略中正确地指定使用哪个数据源。 3. **...

    spring内置jdbctemplate使用demo

    4. **事务管理**:Spring 提供了声明式事务管理,可以将事务管理逻辑从业务代码中解耦。在配置文件中启用事务管理器,并指定需要进行事务控制的类或方法。 ```xml &lt;bean id="transactionManager" class="org....

    Spring集成的jdbc编码和事务管理

    总结起来,Spring通过JdbcTemplate简化了JDBC操作,提供了一套强大的事务管理机制,包括声明式和编程式事务管理,使得开发者可以专注于业务逻辑,而不是底层的数据库操作和事务控制。在实际项目中,结合Spring的IoC...

    spring配置JNDI数据源

    在Java企业级应用中,数据源...4. **事务管理**:如果使用了Spring的声明式事务管理,还需要确保事务配置正确指向这个数据源。例如,使用`&lt;tx:annotation-driven&gt;`标签时,需要指定`transactionManager`。 ```xml ...

    spring1.2 操作多个数据源

    在Spring 1.2框架中,操作多个数据源是...当涉及到事务管理时,确保使用`PlatformTransactionManager`的子类如`DataSourceTransactionManager`,并将其与动态数据源配合使用。你需要配置一个事务管理器,如: ```xml ...

    spring多数据源.rar

    2. **配置事务管理器**:对于每个数据源,我们需要配置相应的`PlatformTransactionManager`。Spring提供了`DataSourceTransactionManager`,我们可以根据数据源bean的名字来配置。 ```java @Bean(name = ...

    Spring基于XML方式配置事务

    例如,对于基于JDBC的事务管理,我们会使用`&lt;bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&gt;`,并将其与数据源关联。 2. **定义事务传播行为**: 事务...

    spring-jdbc-4.2.4.RELEASE.jar,spring-tx-4.2.4.RELEASE.jar,jdbcTemplate使用的jar包

    在Spring中,`PlatformTransactionManager`是所有事务管理器的接口,如`DataSourceTransactionManager`就是针对数据源的事务管理器。`@Transactional`注解用于标记需要进行事务管理的方法,其包含多个属性,如`...

    深入理解Spring声明式事务:源码分析与应用实践

    同时,我们需要配置一个`PlatformTransactionManager`,如`DataSourceTransactionManager`,它是Spring处理事务的核心组件,负责与数据源交互来管理事务的生命周期。 在类或方法上添加`@Transactional`注解,可以...

    springboot多数据源整合sqlserver

    我们可以选择`DataSourceTransactionManager`,为每个数据源创建一个事务管理器。然后,根据业务逻辑,决定使用哪个事务管理器进行事务操作。 5. **切换数据源**: 要在运行时动态切换数据源,我们可以创建一个`...

    springboot多数据源配置

    Spring Boot默认的`@Transactional`注解只能处理单个数据源的事务,对于跨数据源的事务,可能需要自定义事务管理策略。 6. **安全性考虑**:确保敏感的数据库连接信息,如用户名和密码,不要直接硬编码在配置文件中...

    spring+mybatis 多个数据源调用示例

    在上述代码中,`@Qualifier`用于指定要注入的数据源,而`@Transactional`注解的`value`属性则指定了使用的事务管理器。为了处理多个数据源的事务,我们需要为每个数据源创建一个`PlatformTransactionManager`的实例...

Global site tag (gtag.js) - Google Analytics