Package Com.jade.basung.bss.module.common;import Com.jade.framework.base.criterion.criteria;import Com.jade.framework.base.util.paginglist;import com.jade.basung.bss.baseexception;/** * DAO Layer public interface * * @date 15/8/28 PM 5 : * @version 1.0 */public Interface Ibasedao<m extends java.io.Serializable, PK extends java.io.serializable>{ /** * Add Method-Generic * @param model Generic Object model * @throws Baseexception */void Add (M model) throws Baseexception ; /** * Update Method-generic * @param model Generic Object model * @throws baseexception */void Update (M model) throws Baseexcept Ion /** * Delete specified object-generic * @param model Generic Object model * @throws baseexception */void Delete (M model) throws Baseexce ption; /** * Find specified object based on ID * @param model Generic object models * @param ID specified ID * @return Generic Object */M get (class<m> mod EL, PK ID); /** * Find eligible information according to criteria * @param clazz class name * @param Criteria Object * @return */PAGINGLIST&L T M> ListalL (class<m> clazz, criteria);}
Package Com.jade.basung.bss.module.common;import Com.jade.framework.base.criterion.criteria;import Com.jade.framework.base.util.paginglist;import com.jade.basung.bss.baseexception;/** * Data Management Layer Universal Interface * * @version 1.0 * @ Date 15/8/28 pm 5:24 */public Interface Ibasemanager<m extends java.io.Serializable, PK extends java.io.serializable& Gt {/** * Add Method-Generic * @param model Generic Object model * @throws Baseexception */void Add (M model) throws Baseexce ption; /** * Update Method-generic * @param model Generic Object model * @throws baseexception */void Update (M model) throws Baseexcept Ion /** * Delete specified object-generic * @param IDs to delete an object's ID, multiple * @throws baseexception */void Delete (Class<m> clazz Pk... IDS) throws Baseexception; /** * Find specified object based on ID * @param model Generic object models * @param ID specified ID * @return Generic Object */M get (class<m> mod EL, PK ID); /** * Search for eligible information according to criteria * @param clazz class name * @param Criteria Object * @return*/paginglist<m> Listall (class<m> clazz, criteria);}
Package Com.jade.basung.bss.module.common.impl;import Java.util.date;import Javax.inject.named;import Javax.persistence.entitymanager;import Javax.persistence.persistencecontext;import Javax.persistence.Query; Import Javax.persistence.temporaltype;import Com.jade.framework.base.criterion.criteria;import Com.jade.framework.base.criterion.sql.sqlutils;import Com.jade.framework.base.util.paginglist;import Com.jade.basung.bss.baseexception;import com.jade.basung.bss.module.common.ibasedao;/** * DAO Layer Common Interface implementation * * @date 15/8/ 28 pm 5:46 * @version 1.0 * * @Named ("Bss_basedao") public class Basedao<m extends Java.io.Serializable, PK extends java.io . Serializable> implements ibasedao<m,pk>{@PersistenceContext (unitname = "Default") Private Entitymanager E Ntitymanager; public void Add (M model) throws Baseexception {entitymanager.persist (model); public void Update (M model) throws Baseexception {Entitymanager.merge (model); } public void Delete (M modEL) throws Baseexception {Entitymanager.remove (model); Public M get (class<m> model,pk ID) {return entitymanager.find (model, ID); } public paginglist<m> Listall (class<m> clazz, criteria) {String sql = "Select" +clazz. Getsimplename (). toLowerCase () + "from" +clazz.getsimplename () + "" +clazz.getsimplename (). toLowerCase () + ""; return sqlutils.sqlquery (SQL, Entitymanager, criteria); }/** * Execute insert,update,delete Batch statement failed to implement all-pending */protected int exectebulk (final String hql, final Object: . paramlist) {Query query = entitymanager.createquery (HQL); Setparameters (query, paramlist); Object result = Query.executeupdate (); return result = = null? 0: ((Integer) result). Intvalue (); } protected int Exectenativebulk (final String natviesql, final Object ... paramlist) {Query query = Entitymanage R.createnativequery (Natviesql); Setparameters (query, paramlist); Object result = Query.executeupdate (); return result = = null? 0: ((Integer) result). Intvalue (); } protected void Setparameters (query query, object[] paramlist) {if (paramlist! = null) {for (int i = 0; i < paramlist.length; i++) {if (Paramlist[i] instanceof Date) {Query.setparameter (I, (Date) paramlist[i], Temp Oraltype.timestamp); } else {query.setparameter (i, paramlist[i]); } } } }}
Package Com.jade.basung.bss.module.common.impl;import Javax.ejb.transactionattribute;import javax.inject.Named; Import Com.jade.framework.base.criterion.criteria;import Com.jade.framework.base.util.paginglist;import Com.jade.basung.bss.baseexception;import Com.jade.basung.bss.module.common.ibasedao;import Com.jade.basung.bss.module.common.ibasemanager;import org.springframework.transaction.annotation.Transactional /** * Universal Data Management Interface Implementation * * @date 15/8/28 PM 7:29 * @version 1.0 */@Named ("Bss_basemanager") public abstract class Basemanagerimpl <m extends Java.io.Serializable, PK extends java.io.serializable> implements ibasemanager<m,pk>{public IBa Sedao<m, pk> Basedao; public abstract void Setbasedao (Ibasedao<m, pk> Basedao); @TransactionAttribute @Transactional (rollbackfor = exception.class) public void Add (M model) throws Baseexception {Basedao.add (model); } @TransactionAttribute @Transactional (rollbackfor = exception.class) public void update (M model) throws Baseexception {basedao.update (model); } @TransactionAttribute @Transactional (rollbackfor = exception.class) public void Delete (class<m> clazz, P K ... IDs) throws Baseexception {for (PK id:ids) {M model = Basedao.get (clazz, id); if (model = null) {Basedao.delete (model); }}} public M get (class<m> clazz,pk ID) {return basedao.get (clazz, id); } public paginglist<m> Listall (class<m> clazz, criteria) {return Basedao.listall (Clazz, criteria); }}
Encapsulates a common DAO service and then the corresponding DAO service business logic to inherit the common interface first
Here are the specific usage scenarios
Package Com.jade.basung.opration.collect;import com.jade.basung.bss.module.common.ibasedao;/** * Favorites Data Provider * * @date 15 /11/23 am 11:51 * @version 1.0 */public Interface Collectdao extends Ibasedao<collect, long>{}
Package Com.jade.basung.opration.collect.impl;import Javax.inject.named;import Javax.persistence.EntityManager; Import Javax.persistence.persistencecontext;import Com.jade.basung.bss.module.common.impl.basedao;import Com.jade.basung.opration.collect.collect;import com.jade.basung.opration.collect.collectdao;/** * Collection data access Interface implementation * * @ Date 15/11/23 pm 3:11 * @version 1.0 * * @Named ("Ld_collectdao") public class Jpacollectdao extends Basedao<collect, long& Gt Implements collectdao{ @PersistenceContext (unitname= "default") private Entitymanager Entitymanager;}
Package Com.jade.basung.opration.collect;import Com.jade.basung.bss.baseexception;import Com.jade.basung.bss.module.common.ibasemanager;import com.jade.basung.opration.oprationexception;/** * Collection Admin Access interface * * @date 15/11/23 Morning 11:51 * @version 1.0 */public Interface Collectmanager extends Ibasemanager<collect, long>{ PU Blic void Addcollect (Collect Collect) throws Oprationexception, baseexception; public void Delcollect (Long ... IDs) throws Oprationexception, Baseexception;}
Package Com.jade.basung.opration.collect.impl;import Javax.ejb.transactionattribute;import Javax.inject.Inject; Import Javax.inject.named;import Com.jade.basung.bss.baseexception;import Com.jade.basung.bss.module.common.ibasedao;import Com.jade.basung.bss.module.common.impl.basemanagerimpl;import Com.jade.basung.commodities.goods.goodsdao;import Com.jade.basung.opration.oprationexception;import Com.jade.basung.opration.collect.collect;import Com.jade.basung.opration.collect.collectdao;import Com.jade.basung.opration.collect.collectmanager;import Com.jade.basung.opration.collect.enum.collecttype;import Com.jade.basung.opration.comment.comment;import Com.jade.basung.opration.news.newsdao;import org.springframework.transaction.annotation.transactional;/** * Collection Admin Access interface Implementation * * @date 15/11/23 PM 3:09 * @version 1.0 */@Nam Ed ("Ld_collectmanager") public class Collectmanagerimpl extends Basemanagerimpl<collect, long> implements collectmanager{private Collectdao Collectdao; Private GOODSDAO Goodsdao; Private Newsdao Newsdao; @Override @Inject public void Setbasedao (@Named ("Ld_collectdao") Ibasedao<collect, long> Basedao) {This . Basedao = Basedao; This.collectdao = (Collectdao) Basedao; } @Inject public void Setgoodsdao (@Named ("Ld_goodsdao") Goodsdao Goodsdao) {This.goodsdao = Goodsdao; } @Inject public void Setnewsdao (@Named ("Ld_newsdao") Newsdao Newsdao) {This.newsdao = Newsdao; } @TransactionAttribute @Transactional (rollbackfor = exception.class) public void Addcollect (Collect Collect) th Rows Baseexception, oprationexception {collectdao.add (collect);//Add favorites if (Collecttype.goods = = Collect. GetType ()) {Goodsdao.collectscount (Collect.getrelid (), 1); } else if (collecttype.news = = Collect.gettype ()) {Newsdao.collectscount (Collect.getrelid (), 1); }} @TransactionAttribute @Transactional (rollbackfor = exception.class) Public VOID Delcollect (Long ... IDs) throws Oprationexception, Baseexception {for (long Id:ids) {Collect Co Llect = Collectdao.get (collect.class, id); if (null = = collect) {throw new Oprationexception ("Err.jade.operation.collect.collect_no_exist"); } if (Collecttype.goods = = Collect.gettype ()) {Goodsdao.collectscount (Collect.getrelid (),- 1); } else if (collecttype.news = = Collect.gettype ()) {Newsdao.collectscount (Collect.getrelid (),-1); } collectdao.delete (collect); } }}
Spring Dependency Injection Inherits parent class interface subclass overriding parent class abstract method parent class reference to Child class object (interface parent class A=new subclass implementation B) then spring JPA @TransactionAttribute transaction rollback simple Bottom wrapper complete
My pro-Test is available (ps:--do not copy my code without brains, program coders should have their own ideas, not duplicate code production tools)
Java spring simply encapsulates its own DAO service implementation