Spring声明式事务管理(基于xml的方式)
来源:互联网 发布:阿里pc客户端 百度云 编辑:程序博客网 时间:2024/05/29 19:47
一、UserDao类,提供save,update,delete,query方法
<span style="font-size:18px;">package com.seven.spring.p_jdbc;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import javax.annotation.Resource;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;import org.springframework.stereotype.Repository;@Repository("userDao")public class UserDao {@Resourceprivate JdbcTemplate jdbcTemplate;/** * 保存用户 * @param user */ public void save(final User user){// jdbcTemplate.execute(new ConnectionCallback() {////public Object doInConnection(Connection con) throws SQLException,//DataAccessException {//String sql="insert into t_user(uname,age) values (?,?)";//PreparedStatement ps = con.prepareStatement(sql);//ps.setString(1, user.getUname());//ps.setInt(2, user.getAge());//ps.execute();//return null;//}//}); //代码简化 String sql="insert into t_user(uname,age) values (?,?)"; jdbcTemplate.update(sql,new Object[]{user.getUname(),user.getAge()}); } /** * 删除用户 * @param id */ public void delete(Integer id){ String sql = "delete from t_user where id=?"; jdbcTemplate.update(sql, new Object[]{id}); } /** * 用户更新 * @param user */ public void update(User user){ String sql = "update t_user set uname=?,age=? where id=?"; jdbcTemplate.update(sql, new Object[]{user.getUname(),user.getAge(),user.getId()}); } /** * 通过id查找一个用户 * @param id * @return */ public User findById(final Integer id){ String sql ="select uname,age from t_user where id=?"; return (User) jdbcTemplate.queryForObject(sql, new Object[]{id}, new RowMapper() {@Overridepublic Object mapRow(ResultSet rs, int arg1) throws SQLException {String name = rs.getString(1);int age = rs.getInt(2);return new User(id,name,age);}}); } /** * 查询所有 * @return */public List<User> findAll(){ String sql = "select id,uname,age from t_user"; return jdbcTemplate.query(sql, new RowMapper() {public Object mapRow(ResultSet rs, int arg1) throws SQLException {int id = rs.getInt(1);String name = rs.getString(2); int age = rs.getInt(3);return new User(id, name, age);}}); } /** * 查询所有(支持分页) * @param fristRes * @param MaxRes * @return */ public QueryResult findAll(int fristRes,int MaxRes){ int count = jdbcTemplate.queryForInt("select count(*) from t_user"); List list = jdbcTemplate.query("select * from t_user limit ?,?", new Object[]{fristRes,MaxRes},new RowMapper() {@Overridepublic Object mapRow(ResultSet res, int arg1) throws SQLException {int id = res.getInt(1);String name = res.getString(2);int age = res.getInt(3);return new User(id, name, age);}}); return new QueryResult(count, list); } /** * 查询总数据 * @return */ public int getCount(){ String sql = "select count(*) from t_user"; return jdbcTemplate.queryForInt(sql); }}</span>二、applicationContext.xml
<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <!-- 通过注解的方式配置bean,指定扫描的包 --> <context:component-scan base-package="com.seven.spring.p_jdbc"></context:component-scan> <!-- 加载jdbc.properties配置文件 --> <context:property-placeholder location="classpath:com/seven/spring/p_jdbc/jdbc.properties"/> <!-- 1、配置数据库连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 基本的连接信息 --> <property name="driverClass" value="${driverClass}"></property> <property name="jdbcUrl" value="${jdbcUrl}"></property> <property name="user" value="${username}"></property> <property name="password" value="${password}"></property> <!-- 一些管理的配置 --> <!-- 初始化时获取3个连接 ,取值应该在minPoolSize和maxPoolSize之间。默认是3--> <property name="initialPoolSize" value="3"></property> <!-- 连接池中最小的连接数 ,默认是3--> <property name="minPoolSize" value="3"></property> <!-- 连接池中最大的连接数,默认为15 --> <property name="maxPoolSize" value="5"></property> <!-- 当数据库连接池中的连接耗尽的时候c3p0一次同时获取的连接数,默认值为3 --> <property name="acquireIncrement" value="3"></property> <!-- 最大空闲时间, 1800秒内未使用则连接被丢弃,若值为0则永不丢弃,默认值为0--> <property name="maxIdleTime" value="1800"></property> </bean> <!-- 配置jdbcTemplate --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 声明式事务管理 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 这里需要引入 一个datasource --> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 声明通知 --> <tx:advice id="MyTransactionManager" transaction-manager="transactionManager"> <tx:attributes> <!-- 对于以save,update或者delete开头的方法,使用正常的事务,其他方法都使用只读事务 read-only表示是否是只读,默认为false --> <tx:method name="save*"/> <tx:method name="update*"/> <tx:method name="delete*"/> <tx:method name="*" read-only="true"/> </tx:attributes> </tx:advice> <!-- 声明切面 --> <aop:config> <aop:advisor advice-ref="MyTransactionManager" pointcut="execution(* com.seven.spring.p_jdbc.*Dao.*(..))"/> </aop:config></beans></span>
UserTest测试类
<span style="font-size:18px;">package com.seven.spring.p_jdbc;import static org.junit.Assert.*;import java.util.List;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class UserDaoTest {//加载全局的配置文件private ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml",getClass());//从配置文件中获取userDao的beanprivate UserDao userDao = (UserDao) ac.getBean("userDao"); /** * 测试保存一个数据 */@Testpublic void testSave_1() {User user= new User();user.setUname("小胖子22");user.setAge(20);userDao.save(user);}@Testpublic void testSave_25() {for(int i=1;i<=25;i++){User user= new User();user.setUname("test"+i);user.setAge(20);userDao.save(user);}} /** * 测试删除 */@Testpublic void testDelete() {userDao.delete(1);} /** * 测试更新 */@Testpublic void testUpdate() {User user= new User();user.setId(2);user.setUname("小胖子222");user.setAge(20);userDao.update(user);} /** * 测试通过id查询 */@Testpublic void testFindById() {User user = userDao.findById(2);System.out.println(user);} /** * 测试查询所有 */@Testpublic void testFindAll() {List<User> users = userDao.findAll();for(User user:users){System.out.println(user);}} /** * 测试分页 */@Testpublic void testFindAllIntInt() {//QueryResult queryResult=userDao.findAll(0, 10);//第一页QueryResult queryResult=userDao.findAll(10, 10);//第二页//QueryResult queryResult=userDao.findAll(20, 10);//第三页System.out.println("总记录为:"+queryResult.getCount());for(User user:(List<User>)queryResult.getList()){System.out.println(user);}} /** * 测试查询总数 */@Testpublic void testGetCount() {System.out.println(userDao.getCount());}}</span>这样就对UserDao中,对于以save,update或者delete开头的方法,使用正常的事务,其他方法都使用只读事务 。(read-only表示是否是只读,默认为false)
1 0
- Spring声明式事务管理(基于xml的方式)
- spring声明式事务管理(基于AspectJ的xml方式)
- Spring 声明式事务管理----基于AspectJ的XML方式
- Spring声明式事务管理(基于XML方式实现)
- Spring 声明式事务管理----基于注解方式
- spring 声明式事务管理xml方式实现
- Spring声明式事务管理(基于注解的方式)
- 基于@Transactional注解方式的spring声明式事务管理
- spring声明式事务管理(基于TransactionProxyFactoryBean的方式)
- Spring 声明式事务管理----基于TransactionProxyFactoryBean的方式
- spring声明式事务管理:基于注解的方式
- 深入解读Spring Framework事务管理(第三弹:基于AspectJ的XML声明式事务管理)
- Spring基于声明式的事务管理
- 使用Spring的XML声明式事务管理
- spring 声明式事务管理的配置方式
- Spring声明式事务管理的多种方式
- Spring事务管理(声明式的XML方式和注解方式)
- Spring声明式事务管理(基于注解方式实现)
- 面试时必须准备的100 个关键问题!
- SOL学习笔记(3)之索引、唯一及主键约束
- iOS应用程序短信分享和邮件分享
- Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Not unique table/alias: 'e'
- python中%r和%s的区别
- Spring声明式事务管理(基于xml的方式)
- 对于scanf的新理解
- Android相机应用
- 《IOS视频录制,本地视频播放,剪切,合并》系列(1)本地视频播放
- hdoj--3183--A Magic Lamp(贪心)
- Scala List 操作 list中最大数的下标 Vector转List
- IOS Android 手机助手原理以及源码(安装卸载IOS 应用)
- 论文查重
- 通过代码自定义Cell