Spring——JDBC模板对象、事务管理
JDBC模板对象
首先导入需要的jar包
JDBC模板对象
//创建数据源DataSource
ComboPooledDataSource pd = new ComboPooledDataSource();
pd.setDriverClass("com.mysql.jdbc.Driver");
pd.setJdbcUrl("jdbc:mysql://localhost:3306/wang");
pd.setUser("root");
pd.setPassword("marvel");
//创建JDBC模板对象
JdbcTemplate jt = new JdbcTemplate();
//设置数据源
jt.setDataSource(pd);
User user = jt.queryForObject("select * from user", new RowMapper<User>() {
@Override
public User mapRow(ResultSet resultSet, int i) throws SQLException {
String id = resultSet.getString("id");
String name = resultSet.getString("username");
String phone = resultSet.getString("phone");
User u = new User(Integer.parseInt(id),name,phone);
return u;
}
});
System.out.println(user);
Spring中的JDBC模板对象
目录结构
Dao层实现类
注意: 在继承JdbcDaoSupport父类时,由于需要在配置文件中手动配置Dao,所以要取消注解,不然会在Spring容器中实例化两个Dao,形成冲突
public class UserDaoImpl extends JdbcDaoSupport implements UserDao{
@Override
public void insert(User user) {
getJdbcTemplate().update("insert into user values (?,?,?)",user.getId(),user.getUsername(),user.getPhone());
}
@Override
public void delete(int id) {
getJdbcTemplate().update("delete from user where id = ?",id);
}
@Override
public void update(User user) {
getJdbcTemplate().update("update user set phone = ? where where id = ?",user.getPhone(),user.getId());
}
@Override
public void select(int id) {
User user = getJdbcTemplate().queryForObject("select * from user where id = ?", new RowMapper<User>() {
@Override
public User mapRow(ResultSet resultSet, int i) throws SQLException {
String id = resultSet.getString("id");
String name = resultSet.getString("username");
String phone = resultSet.getString("phone");
User u = new User(Integer.parseInt(id), name, phone);
return u;
}
},id);
System.out.println(user);
}
}
xml配置数据源
配置注解扫描
<!--Spring扫描指定com包,进行注解解析-->
<context:component-scan base-package="com"></context:component-scan>
配置db.properties
<context:property-placeholder location="db.properties"></context:property-placeholder>
配置数据源
<!--配置数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.name}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
实例化Dao
<bean id="UserDao" class="com.dao.UserDaoImpl">
<property name="dataSource" ref="dataSource"></property>
</bean>
事务管理
以模板编码方式进行事务管理
1、配置核心事务管理器
<!--配置核心事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
2、配置事务管理模板对象
<!--配置事务管理模板对象-->
<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager" ref="transactionManager"></property>
</bean>
3、配置UserService(目标对象)
注入事务模板对象和dao对象
<bean id="userService" class="com.Service.UserServiceImpl">
<property name="dao" ref="UserDao"></property>
<property name="transactionTemplate" ref="transactionTemplate"></property>
</bean>
在方法需要事务管理的方法中开启事务
xml配置事务管理(AOP思想)
配置事务的命名空间
xmlns:tx="http://www.springframework.org/schema/tx"
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
1、配置核心事务管理器
<!--配置核心事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
2、配置事务通知
isolation | 事务的隔离级别 |
read-only | 事务是否只读 |
propagation | 事务的传播行为 |
<!--配置事务通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!--
isolation:事务的隔离级别
read-only:事务是否只读
propagation:事务的传播行为
-->
<tx:method name="insert*" isolation="REPEATABLE_READ" read-only="false" propagation="REQUIRED"/>
<tx:method name="delete*" isolation="REPEATABLE_READ" read-only="false" propagation="REQUIRED"/>
<tx:method name="update*" isolation="REPEATABLE_READ" read-only="false" propagation="REQUIRED"/>
<tx:method name="select *" isolation="REPEATABLE_READ" read-only="true" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
3、将通知织入目标对象
<!--将通知织入目标对象-->
<aop:config>
<aop:pointcut id="pc" expression="execution(* com.Service.*ServiceImpl.*(..))"/>
<!--配置切面-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pc"></aop:advisor>
</aop:config>
注解配置事务管理
1、开始事务注解扫描
<!--开启事务注解扫描-->
<tx:annotation-driven/>
2、配置核心事务管理器
<!--配置核心事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>