Spring事务--非注解--持久层|业务层
2011-04-15 15:32
381 查看
Dao模板类:
业务层接口:
业务层实现类:
package org.niit.springtrans.dao; import java.sql.SQLException; import org.hibernate.Criteria; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.criterion.MatchMode; import org.hibernate.criterion.Order; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.niit.springtrans.entities.pagination.*; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.springframework.stereotype.Repository; public class BaseDao extends HibernateDaoSupport{ public void update(Object entity){ getHibernateTemplate().update(entity); } /** * 预处理条件 * */ private void prepareCondition(Criteria qbc,PageInfo pi){ if (pi.getPconditionList()!=null && pi.getPconditionList().size()>0){ for (PCondition pcd : pi.getPconditionList()) { switch (pcd.getOpt()) { case PEQ: qbc.add(Restrictions.eq(pcd.getPropertyName(),pcd.getPropertyValue())); break; case PGT: qbc.add(Restrictions.gt(pcd.getPropertyName(),pcd.getPropertyValue())); break; case PNE: qbc.add(Restrictions.ne(pcd.getPropertyName(),pcd.getPropertyValue())); break; case PLT: qbc.add(Restrictions.lt(pcd.getPropertyName(),pcd.getPropertyValue())); break; case PLE: qbc.add(Restrictions.le(pcd.getPropertyName(),pcd.getPropertyValue())); break; case PLIKE: qbc.add(Restrictions.like(pcd.getPropertyName(),pcd.getPropertyValue()==null?"":pcd.getPropertyValue().toString(),MatchMode.ANYWHERE)); break; default: break; } } } } /** * 预处理排序 * */ private void PrepareOrderField(Criteria qbc,PageInfo pi){ if (qbc==null || pi==null || pi.getPorderLlist()==null || pi.getPorderLlist().size()==0){ return; } for (POrder orderfield : pi.getPorderLlist()) { switch (orderfield.getPdirect()) { case ASC: qbc.addOrder(Order.asc(orderfield.getPropertyName())); break; case DESC: qbc.addOrder(Order.desc(orderfield.getPropertyName())); break; default: break; } } } public void pager(final PageInfo pi){ getHibernateTemplate().execute( new HibernateCallback() { @Override public Object doInHibernate(Session session) throws HibernateException, SQLException { try { Criteria qbc = session.createCriteria(pi.getClazz()); qbc.setProjection(Projections.rowCount());//设置投影【查询总条数】 prepareCondition(qbc, pi);//处理条件 pi.setRecordCount(Integer.parseInt(qbc.uniqueResult().toString()));//得到总条数 pi.setPageCount( pi.getRecordCount()%pi.getPageSize()==0? pi.getRecordCount()/pi.getPageSize(): pi.getRecordCount()/pi.getPageSize()+1 );//计算总页数 qbc.setProjection(null);//清空投影设置 //开始分页 PrepareOrderField(qbc, pi);//处理排序 qbc.setFirstResult((pi.getPageIndex()-1)*pi.getPageSize());//设置第一条索引 qbc.setMaxResults(pi.getPageSize());//设置要显示的条数 pi.setResult(qbc.list()); } catch (Exception e) { e.printStackTrace(); } finally { session.close(); } return null; } } ); } }
package org.niit.springtrans.dao; import javax.annotation.Resource; import javax.persistence.Inheritance; import org.niit.springtrans.entities.Account; import org.springframework.stereotype.Repository; public class AccountDao extends BaseDao { public Account getAccount(long aid){ return (Account)getHibernateTemplate().get(Account.class,aid); } }
package org.niit.springtrans.dao; import java.sql.SQLException; import org.hibernate.HibernateException; import org.hibernate.Session; import org.niit.springtrans.entities.Card; import org.niit.springtrans.entities.Tradecredential; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.springframework.stereotype.Repository; public class CardDao extends BaseDao { public Card getCard(String cid){ return (Card)getHibernateTemplate().get(Card.class,cid); } }
package org.niit.springtrans.dao; import java.sql.SQLException; import org.hibernate.HibernateException; import org.hibernate.Session; import org.niit.springtrans.entities.Tradecredential; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.springframework.stereotype.Repository; public class TradecredentialDao extends BaseDao{ /** * 保存交易凭据 * */ public void add(final Tradecredential tc){ getHibernateTemplate().execute( new HibernateCallback() { @Override public Object doInHibernate(Session session) throws HibernateException, SQLException { session.save(tc); return null; } } ); } }
业务层接口:
package org.niit.springtrans.biz; import org.niit.springtrans.entities.Account; public interface IAccountBiz { public Account getAccount(long aid); }
package org.niit.springtrans.biz; import org.niit.springtrans.entities.Card; public interface ICardBiz { public Card getCard(String cid); }
package org.niit.springtrans.biz; import org.niit.springtrans.entities.Tradecredential; import org.niit.springtrans.entities.pagination.PageInfo; /**交易接口*/ public interface ITradeBiz { /**交易方法*/ public void trade(Tradecredential tc); public void getTradecredentiales(PageInfo pi); }
业务层实现类:
package org.niit.springtrans.biz.impl; import org.niit.springtrans.biz.IAccountBiz; import org.niit.springtrans.dao.AccountDao; import org.niit.springtrans.entities.Account; /**账户业务对象*/ public class AccountBiz implements IAccountBiz { private AccountDao accountDao; public void setAccountDao(AccountDao accountDao) { this.accountDao = accountDao; } @Override public Account getAccount(long aid) { // TODO Auto-generated method stub return accountDao.getAccount(aid); } }
package org.niit.springtrans.biz.impl; import org.niit.springtrans.biz.ICardBiz; import org.niit.springtrans.dao.CardDao; import org.niit.springtrans.entities.Card; public class CardBiz implements ICardBiz { private CardDao cardDao; public void setCardDao(CardDao cardDao) { this.cardDao = cardDao; } @Override public Card getCard(String cid) { // TODO Auto-generated method stub return cardDao.getCard(cid); } }
package org.niit.springtrans.biz.impl; import org.niit.springtrans.biz.ITradeBiz; import org.niit.springtrans.dao.CardDao; import org.niit.springtrans.dao.TradecredentialDao; import org.niit.springtrans.entities.Card; import org.niit.springtrans.entities.Tradecredential; import org.niit.springtrans.entities.pagination.PageInfo; import org.niit.springtrans.exception.TradeException; public class TradeBiz implements ITradeBiz { private TradecredentialDao tcDao; private CardDao cardDao; public void setCardDao(CardDao cardDao) { this.cardDao = cardDao; } public void setTcDao(TradecredentialDao tcDao) { this.tcDao = tcDao; } @Override public void getTradecredentiales(PageInfo pi) { // TODO Auto-generated method stub tcDao.pager(pi); } /**交易方法*/ @Override public void trade(Tradecredential tc) { //begin transaction //1.A账户上减去交易金额 Card ca = cardDao.getCard(tc.getCardByTacid().getCid());//得到一个持久化的Card对象 ca.setBalance(ca.getBalance()-tc.getTmoney()); cardDao.update(ca); //2.判断A账户余额[余额不得少于10元] if (ca.getBalance()<10){ throw new TradeException("余额不得低于10元"); } //3.B账户上加上交易金额 Card cb = cardDao.getCard(tc.getCardByTbcid().getCid());//得到一个持久化的Card对象 cb.setBalance(cb.getBalance()+tc.getTmoney()); cardDao.update(cb); //4.添加交易记录 tcDao.add(tc); //commit transaction or rollback transaction } }
相关文章推荐
- Spring 注解学习手札(五) 业务层事务处理
- spring注解实现业务层事务管理,当业务层自调用时,事务失效问题解决
- Spring的学习--SpringMVC的四个基本注解annotation(控制层,业务层,持久层)
- spring注解实现业务层事务管理,当业务层自调用时,事务失效问题解决
- 28Spring_的事务管理_银行转账业务加上事务控制_基于注解进行声明式事务管理
- Spring中事务与aop的先后顺序问题(注解形式)
- spring 注解 事务,声明事务共存的情况下,先后顺序
- 从源码分析 Spring 基于注解的事务
- Spring MVC @Transactional注解方式事务失效的解决办法
- Spring第八篇【XML、注解实现事务控制】
- spring事务、当业务中并没有异常抛出时执行一半的事务无法正常出发导致数据一致性遭到破坏、事务不起作用
- Spring事务--非注解--手动代理
- Spring事务-注解--实体类|数据访问类|业务类
- spring学习笔记10--Spring+jdbc组合开发(注解方式配置事务)
- Spring 使用注解方式进行事务管理
- Spring MVC @Transactional注解方式事务失效的解决办法
- spring事务注解
- spring事物配置,声明式事务管理和基于@Transactional注解的使用
- Spring 之注解事务 @Transactional
- spring事务配置,声明式事务管理和基于@Transactional注解的使用