Spring事务-注解--实体类|数据访问类|业务类

    技术2022-05-20  37

     实体类的注解方式不是必须的

    package org.niit.springtrans.at.entities; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import static javax.persistence.GenerationType.IDENTITY; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; /** * Tradecredential entity. @author MyEclipse Persistence Tools */ @Entity @Table(name = "tradecredential", catalog = "crm") public class Tradecredential implements java.io.Serializable { // Fields private long tid; private Card cardByTbcid; private Card cardByTacid; private Date ttime; private float tmoney; // Constructors /** default constructor */ public Tradecredential() { } /** full constructor */ public Tradecredential(Card cardByTbcid, Card cardByTacid, Date ttime, float tmoney) { this.cardByTbcid = cardByTbcid; this.cardByTacid = cardByTacid; this.ttime = ttime; this.tmoney = tmoney; } // Property accessors @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "tid", unique = true, nullable = false) public long getTid() { return this.tid; } public void setTid(long tid) { this.tid = tid; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "tbcid") public Card getCardByTbcid() { return this.cardByTbcid; } public void setCardByTbcid(Card cardByTbcid) { this.cardByTbcid = cardByTbcid; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "tacid") public Card getCardByTacid() { return this.cardByTacid; } public void setCardByTacid(Card cardByTacid) { this.cardByTacid = cardByTacid; } @Column(name = "ttime", length = 19) public Date getTtime() { return this.ttime; } public void setTtime(Date ttime) { this.ttime = ttime; } @Column(name = "tmoney", precision = 12, scale = 0) public float getTmoney() { return this.tmoney; } public void setTmoney(float tmoney) { this.tmoney = tmoney; } }

    package org.niit.springtrans.at.entities; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import static javax.persistence.GenerationType.IDENTITY; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; /** * Account entity. @author MyEclipse Persistence Tools */ @Entity @Table(name = "account", catalog = "crm") public class Account implements java.io.Serializable { // Fields private long aid; private String aname; private String acontact; private String aaddress; private Set<Card> cards = new HashSet<Card>(0); // Constructors /** default constructor */ public Account() { } /** full constructor */ public Account(String aname, String acontact, String aaddress, Set<Card> cards) { this.aname = aname; this.acontact = acontact; this.aaddress = aaddress; this.cards = cards; } // Property accessors @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "aid", unique = true, nullable = false) public long getAid() { return this.aid; } public void setAid(long aid) { this.aid = aid; } @Column(name = "aname", length = 32) public String getAname() { return this.aname; } public void setAname(String aname) { this.aname = aname; } @Column(name = "acontact", length = 64) public String getAcontact() { return this.acontact; } public void setAcontact(String acontact) { this.acontact = acontact; } @Column(name = "aaddress", length = 128) public String getAaddress() { return this.aaddress; } public void setAaddress(String aaddress) { this.aaddress = aaddress; } @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "account") public Set<Card> getCards() { return this.cards; } public void setCards(Set<Card> cards) { this.cards = cards; } }

     

    package org.niit.springtrans.at.entities; import java.util.Date; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import static javax.persistence.GenerationType.IDENTITY; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; /** * Card entity. @author MyEclipse Persistence Tools */ @Entity @Table(name = "card", catalog = "crm") public class Card implements java.io.Serializable { // Fields private String cid; private Account account; public Card(String cid) { super(); this.cid = cid; } private Date applyTime; private float balance; private Set<Tradecredential> tradecredentialsForTbcid = new HashSet<Tradecredential>( 0); private Set<Tradecredential> tradecredentialsForTacid = new HashSet<Tradecredential>( 0); // Constructors /** default constructor */ public Card() { } /** full constructor */ public Card(Account account, Date applyTime, float balance, Set<Tradecredential> tradecredentialsForTbcid, Set<Tradecredential> tradecredentialsForTacid) { this.account = account; this.applyTime = applyTime; this.balance = balance; this.tradecredentialsForTbcid = tradecredentialsForTbcid; this.tradecredentialsForTacid = tradecredentialsForTacid; } // Property accessors @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "cid", unique = true, nullable = false, length = 64) public String getCid() { return this.cid; } public void setCid(String cid) { this.cid = cid; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "aid") public Account getAccount() { return this.account; } public void setAccount(Account account) { this.account = account; } @Column(name = "applyTime", length = 19) public Date getApplyTime() { return this.applyTime; } public void setApplyTime(Date applyTime) { this.applyTime = applyTime; } @Column(name = "balance", precision = 12, scale = 0) public float getBalance() { return this.balance; } public void setBalance(float balance) { this.balance = balance; } @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "cardByTbcid") public Set<Tradecredential> getTradecredentialsForTbcid() { return this.tradecredentialsForTbcid; } public void setTradecredentialsForTbcid( Set<Tradecredential> tradecredentialsForTbcid) { this.tradecredentialsForTbcid = tradecredentialsForTbcid; } @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "cardByTacid") public Set<Tradecredential> getTradecredentialsForTacid() { return this.tradecredentialsForTacid; } public void setTradecredentialsForTacid( Set<Tradecredential> tradecredentialsForTacid) { this.tradecredentialsForTacid = tradecredentialsForTacid; } }

     

    数据访问类Dao:

    package org.niit.springtrans.at.dao; import java.sql.SQLException; import javax.annotation.Resource; 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.HibernateTemplate; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.springframework.stereotype.Repository; public class BaseDao{ @Resource(name="hibernateTemplate") private HibernateTemplate hibernateTemplate; public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } public HibernateTemplate getHibernateTemplate() { return hibernateTemplate; } 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.at.dao; import javax.annotation.Resource; import javax.persistence.Inheritance; import org.niit.springtrans.at.entities.Account; import org.springframework.stereotype.Repository; @Repository("accountDao") public class AccountDao extends BaseDao { public Account getAccount(long aid){ return (Account)getHibernateTemplate().get(Account.class,aid); } }

     

    package org.niit.springtrans.at.dao; import java.sql.SQLException; import org.hibernate.HibernateException; import org.hibernate.Session; import org.niit.springtrans.at.entities.Card; import org.niit.springtrans.at.entities.Tradecredential; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.springframework.stereotype.Repository; @Repository("cardDao") public class CardDao extends BaseDao { public Card getCard(String cid){ return (Card)getHibernateTemplate().get(Card.class,cid); } }

     

    package org.niit.springtrans.at.dao; import java.sql.SQLException; import org.hibernate.HibernateException; import org.hibernate.Session; import org.niit.springtrans.at.entities.Tradecredential; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.springframework.stereotype.Repository; @Repository("tcDao") 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; } } ); } }

     

    业务类Biz[接口不变]:

    package org.niit.springtrans.biz.at.impl; import javax.annotation.Resource; import org.niit.springtrans.at.biz.IAccountBiz; import org.niit.springtrans.at.dao.AccountDao; import org.niit.springtrans.at.entities.Account; import org.springframework.stereotype.Service; /**账户业务对象*/ @Service("accountBiz") public class AccountBiz implements IAccountBiz { @Resource(name="accountDao") 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.at.impl; import javax.annotation.Resource; import org.niit.springtrans.at.biz.ICardBiz; import org.niit.springtrans.at.dao.CardDao; import org.niit.springtrans.at.entities.Card; import org.springframework.stereotype.Service; @Service("cardBiz") public class CardBiz implements ICardBiz { @Resource(name="cardDao") 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.at.impl; import javax.annotation.Resource; import org.niit.springtrans.at.biz.ITradeBiz; import org.niit.springtrans.at.dao.CardDao; import org.niit.springtrans.at.dao.TradecredentialDao; import org.niit.springtrans.at.entities.Card; import org.niit.springtrans.at.entities.Tradecredential; import org.niit.springtrans.entities.pagination.PageInfo; import org.niit.springtrans.exception.TradeException; import org.springframework.stereotype.Service; @Service("tradeBiz") public class TradeBiz implements ITradeBiz { @Resource(name="tcDao") private TradecredentialDao tcDao; @Resource(name="cardDao") 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)