基于Spring+Ibatis的安全线程实现
作者: 佚名, 出处:CSDN, 责任编辑: 张帅,
2008-07-04 13:22
过去做过一些基于spring、hibernate整合应用的实例,本人感觉spring与hibernate最好的结合就是泛型Dao的实现,代码量节省了一半,而且业务逻辑一目了然。
现在大家也许看到这里觉得就差不多了。该Dao方法差不多全了,可以进行操作了。其实不然,下面我载自官方的一段:
Spring提供两种方式的编程式事务管理,分别是:使用TransactionTemplate和直接使用PlatformTransactionManager。
TransactionTempale采用和其他Spring模板,如JdbcTempalte和HibernateTemplate一样的方法。它使用回调方法,把应用程序从处理取得和释放资源中解脱出来。如同其他模板,TransactionTemplate是线程安全的
所以我们下面我们要再封装一层以实现线程是安全的。这就是我们在spirng_other.xml里面的那段配置实现
| baseService.java package com.base; import org.springframework.transaction.support.TransactionTemplate; /** * 工厂的基础类. * @author 刘玉华 * @time 2007-12-14 */ public class BaseService extends TransactionTemplate{ private static final long serialVersionUID = 1L; } serviceFactory.java package com.base; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.user.dao.UserDao; /** * 数据操作工厂,所有的数据操作都从该工厂中获得。 * @author 刘玉华 * @time 2007-12-14 */ public class ServiceFactory { private static BeanFactory factory = null; static { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( new String[] {"spring_base.xml"}); factory = (BeanFactory) context; } /** * 获得用户服务类 * @return 用户服务 */ public static UserDao getUserService(){ return (UserDao) factory.getBean("userService"); } } |
我们所需要做的就是继承Baseservice.java 以实现tx管理
| UserService.java package com.user; import java.util.List; public interface UserService { public User getUser(final String name); public void updateUser(final User user); public List selectUser(); public void insertUser(final User user); } |
UserServiceImpl.java 用户服务实现类
| package com.user; import java.util.List; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.TransactionCallback; import com.base.BaseService; import com.user.dao.UserDao; public class UserServiceImpl extends BaseService implements UserDao { private UserDao userDao; public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } public List selectUser() { Object obj = execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status) { return userDao.selectUser(); } }); return (List)obj; } public User getUser(final String name){ Object obj = execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status) { // TODO Auto-generated method stub return userDao.getUser(name); } }); return (User) obj; } public void insertUser(final User user) { Object obj = execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status) { userDao.insertUser(user); return null; } }); } public void updateUser(final User user) { Object obj = execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus arg0) { userDao.updateUser(user); return null; } }); } } |
这样我们就把相关操作实现事务控制了。
数据表建立:
| create table t_user( "id" int null, "name" varchar(50) null, "sex" int null ) |
这样我们在以后调用方式为:
测试类
| package com.user.junit; import java.util.List; import com.base.ServiceFactory; import com.user.User; import com.user.dao.UserDao; import common.Logger; public class UserTest { private static Logger log = Logger.getLogger(UserTest.class); public static void main(String args[]){ UserDao service = ServiceFactory.getUserService(); User user=null; int i = 4; switch (i) { case 0: user.setId(1); user.setName("444"); user.setSex(2); service.updateUser(user); System.out.println(user.getName()+" "+user.getSex()); break; case 1: try { user = service.getUser("2"); } catch (Exception e) { log.debug("出错了"+e.getMessage()); } System.out.println(user.getId()); case 3: List<User> ls = service.selectUser(); for (int j = 0; j < ls.size(); j++) { System.out.println(ls.get(j).getId()+"===="+ls.get(j).getName()); } case 4: List<User> ls1 = service.selectUser(); for (int j = 0; j < ls1.size(); j++) { user = ls1.get(j); System.out.println(user.getId()+user.getName()+user.getSex()+user.getAddress()); } for (int j = 0; j < 100; j++) { user.setId(user.getId()+1); service.insertUser(user); } default: break; } } } |
- 本文关键词:
- Web开发

