您的位置:首页 > 编程语言 > Java开发

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
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: