一个dao模型,带事务和异常处理,请指正!
简介:
一个纯jdbc的dao模型,参考网上多篇相关技术文章,重点包括:
1.事务处理;
2.模板设计;
3.异常处理;
其中事务和异常方面一直也是争议比较大的地方,希望大家多指正,提出宝贵的意见。
首先是dao的结构描述:
首先是一些基础类,包括:
dbutil: 数据库操作基础类(获取数据库连接、获取事务管理器等)
transactionTemplate: 事务处理模板类
transactionManager: 事务管理器
transactionCallback: 事务处理回调方法(返回结果)
transactionCallbackWithoutResult: 事务处理回调方法(不返回结果)
详细类容请参考源码:
?
DBUtil:
?
?
?
Dao接口:
?
package com.bts.service;import java.util.List;import com.bts.bean.Task;import com.bts.dao.TaskDao;import com.bts.dao.impl.TaskDaoImpl;import com.bts.db.TransactionCallback;import com.bts.db.TransactionCallbackWithoutResult;import com.bts.db.TransactionTemplate;import com.bts.exception.dao.DaoException;/** * @author huangfox * */public class TaskService {public TaskDao dao = null;public TaskService() {super();this.dao = new TaskDaoImpl();}/** * 通过applicationNumber获取Task。 * * @param args * @return * @throws DaoException */public Task getTaskByApplicationNumber(final Task args) {return TransactionTemplate.execute(new TransactionCallback<Task>() {@Overridepublic Task doInTransaction() throws DaoException {return dao.select(args);}});}/** * 获取所有符合条件的Task。 * * @param args * @return * @throws DaoException */public List<Task> getTasks(final Task args) {return TransactionTemplate.execute(new TransactionCallback<List<Task>>() {@Overridepublic List<Task> doInTransaction() throws DaoException {return dao.query(args);}});}/** * 获取所有符合条件的Task的总量。 * * @param args * @return * @throws DaoException */public int getTasksCount(final Task args) {return TransactionTemplate.execute(new TransactionCallback<Integer>() {@Overridepublic Integer doInTransaction() throws DaoException {return dao.getCount(args);}});}/** * 添加一个任务。 * * @param one * @throws DaoException */public void addTask(final Task one) {TransactionTemplate.execute(new TransactionCallbackWithoutResult() {@Overridepublic void doInTransaction() throws DaoException {dao.insert(one);}});}/** * 添加多个任务。 * * @param tasks */public void addTaskMutil(final List<Task> tasks) {TransactionTemplate.execute(new TransactionCallbackWithoutResult() {@Overridepublic void doInTransaction() throws DaoException {dao.insert(tasks);}});}/** * 根据申请号(ApplicationNumber)修改一个task。 * * @param one * @throws DaoException */public void modifyTask(final Task one) {TransactionTemplate.execute(new TransactionCallbackWithoutResult() {@Overridepublic void doInTransaction() throws DaoException {dao.update(one);}});}/** * 根据申请号(ApplicationNumber)删除一个Task。 * * @param one * @throws DaoException */public void deleteTaskByAppNum(final Task one) {TransactionTemplate.execute(new TransactionCallbackWithoutResult() {@Overridepublic void doInTransaction() throws DaoException {dao.delete(one);}});}}??
?
---------------------------------
如果哪位超级有耐心的看到了着,请你参与讨论这个dao模型中的不足,或者说说你项目中dao是怎么运用的!
重点可以关注:
事务处理
异常处理
设计模式
其他 ? :P ?
?
?
?
?
?
?
?
?
1 楼 wklucky 2012-05-19 你好,能提供以下完整的源码吗?谢谢
wklucky@qq.com