Spring事务--非注解--持久层|业务层

    技术2022-05-20  45

    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 } }

     

     


    最新回复(0)