SPRING-DATA-JPA Global DAO Configuration _SPRING-DATA-JPA

Source: Internet
Author: User
Tags assert stub stringbuffer

Configuration file: Spring-jpa.xml

<?xml version= "1.0" encoding= "UTF-8"?> <beans "xmlns=" xmlns: Xsi= "Http://www.w3.org/2001/XMLSchema-instance" xmlns:p= "http://www.springframework.org/schema/p" xmlns:c= "http ://www.springframework.org/schema/c "xmlns:util=" Http://www.springframework.org/schema/util "xmlns:aop=" http:// Www.springframework.org/schema/aop "xmlns:tx=" Http://www.springframework.org/schema/tx "xmlns:jpa=" http:// WWW.SPRINGFRAMEWORK.ORG/SCHEMA/DATA/JPA "xsi:schemalocation=" Http://www.springframework.org/schema/beans http:// Www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/util http:// Www.springframework.org/schema/util/spring-util-3.1.xsd http://www.springframework.org/schema/tx http:// Www.springframework.org/schema/tx/spring-tx-3.1.xsd HTTP://WWW.SPRINGFRAMEWORK.ORG/SCHEMA/DATA/JPA http:// Www.springframework.org/schema/data/jpa/spring-jpa.xsd HTTP://WWW.SPRINGFRAMEWORK.ORG/SCHEMA/AOP http:// Www.sprinGframework.org/schema/aop/spring-aop-3.1.xsd "> <!--BONECP tutorial See http://www.cnblogs.com/zhwl/archive/2013/07/ 23/3208550.html--> <!--JPA Entity Manager factory--> <bean id= "Entitymanagerfactory" class= . JPA. Localcontainerentitymanagerfactorybean "> <property name=" dataSource "ref=" ${springjpa.datasource} "/> < Property Name= "Persistenceprovider" ref= "Persistenceprovider"/> <property name= "Jpavendoradapter" Jpavendoradapter "/> <property name=" Jpadialect "ref=" Jpadialect "/> <property name=" PackagesToScan "value = "${springjpa.packagestoscan}"/> <property name= "jpaproperties" > <props> <prop key= "hibernate. Dialect ">org.hibernate.dialect.Oracle9Dialect</prop> <prop key=" Hibernate.connection.driver_class " >oracle.jdbc.OracleDriver</prop> <prop key= "hibernate.max_fetch_depth" >3</prop> <prop key=
"Hibernate.jdbc.fetch_size" >18</prop>				<prop key= "Hibernate.jdbc.batch_size" >10</prop> <prop key= "Hibernate.hbm2ddl.auto" &GT;${SPRINGJPA. jpaproperties.hibernate.hbm2ddl.auto}</prop> <prop key= "Hibernate.show_sql" >false</prop> &LT;PR Op key= "Hibernate.format_sql" >false</prop> <prop key= "Javax.persistence.validation.mode" >none</ Prop> <!--query caching--> <prop key= "Hibernate.cache.use_query_cache" >true</prop> <prop key = "Hibernate.cache.region.factory_class" >org.hibernate.cache.ehcache.EhCacheRegionFactory</prop> <!- -If all, the default all open level two cache, the entity on the @cacheable do not have to play--> <prop key= "Javax.persistence.sharedCache.mode" >enable_ selective</prop> <prop key= "Hibernate.generate_statistics" >true</prop> </props> </prop Erty> </bean> <!--for specifying the persistence implementation Vendor class--> <bean id= "Persistenceprovider" class= Atepersistence "/> <!--is used to set the specific attributes of the JPA implementation vendor--> <bean id= "Jpavendoradapter" class= "Org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" > < 
	The property name= "database" value= "${springjpa.jpavendoradapter.database}"/> </bean> <!--is used to specify some advanced features--> <bean id= "Jpadialect" class= "Org.springframework.orm.jpa.vendor.HibernateJpaDialect"/> <!--transaction manager--> & Lt;bean id= "TransactionManager" class= "Org.springframework.orm.jpa.JpaTransactionManager" > <property name= " Entitymanagerfactory "ref=" entitymanagerfactory/> </bean> <!--enable annotation transactions--> N-driven/> <!--Configure the spring Data JPA Scan directory--> <jpa:repositories base-package= "Com.wonders.**.dao" Entity-mana ger-factory-ref= "Entitymanagerfactory" transaction-manager-ref= "TransactionManager" repository-impl-postfix= " Impl "factory-class=" Com.wonders.frame.core.dao.DefaultRepositoryFactoryBean "> </jpa:repositories> </
 Beans>

Factory Bean:defaultrepositoryfactorybean

/**
 * * * * * *
package Com.wonders.frame.core.dao;
Import java.io.Serializable;
Import Javax.persistence.EntityManager;

Import org.springframework.data.jpa.repository.JpaRepository;
Import Org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean;
Import Org.springframework.data.repository.core.support.RepositoryFactorySupport;

/**
 *
 *
 *
/public class Defaultrepositoryfactorybean<t extends Jparepository<s, Id>, S, ID extends serializable>
		extends Jparepositoryfactorybean<t, S, id> {
	/**
     * Returns a {@link Repositoryfactorysupport}.
     * *
     @param entitymanager
     * @return
     /
	protected Repositoryfactorysupport Createrepositoryfactory (Entitymanager entitymanager) {return
 
    	new defaultrepositoryfactory (Entitymanager);
    }
}

Factory Category: Defaultrepositoryfactory

Package Com.wonders.frame.core.dao;

Import java.io.Serializable;

Import Javax.persistence.EntityManager;
Import Org.springframework.data.jpa.repository.JpaRepository;
Import org.springframework.data.jpa.repository.support.JpaEntityInformation;
Import Org.springframework.data.jpa.repository.support.JpaRepositoryFactory;
Import Org.springframework.data.querydsl.QueryDslPredicateExecutor;
Import Org.springframework.data.querydsl.QueryDslUtils;
Import Org.springframework.data.repository.core.RepositoryMetadata;

Import Org.springframework.util.Assert;

Import Com.wonders.frame.core.dao.impl.GenericRepositoryImpl; /** * * */public class Defaultrepositoryfactory extends Jparepositoryfactory {private final Entitymanager Entityma
    
	Nager;
		Public defaultrepositoryfactory (Entitymanager Entitymanager) {super (Entitymanager);
		Assert.notnull (Entitymanager);
		
	This.entitymanager = Entitymanager; @Override protected <t, ID extends serializable> jparepository<?,? &Gt Gettargetrepository (Repositorymetadata metadata, Entitymanager entitymanager) {//todo jpaentityinformation<?, Ser
		ializable> entityinformation = getentityinformation (Metadata.getdomainclass ()); return new Genericrepositoryimpl (Entityinformation, Entitymanager); Custom Implementation} @Override protected class<?> getrepositorybaseclass (Repositorymetadata Metada
    TA) {return genericrepositoryimpl.class; }
}

Custom Extension Interface: Genericrepository

Package Com.wonders.frame.core.dao;
Import java.io.Serializable;
Import Java.util.HashMap;
Import Java.util.LinkedHashMap;

Import java.util.List;

Import Javax.persistence.Query;
Import org.springframework.data.domain.Pageable;
Import Org.springframework.data.jpa.repository.JpaRepository;
Import Org.springframework.data.jpa.repository.JpaSpecificationExecutor;
Import Org.springframework.data.repository.CrudRepository;
Import Org.springframework.data.repository.NoRepositoryBean;

Import org.springframework.transaction.annotation.Transactional;



Import Com.wonders.frame.core.model.vo.SimplePage; /** * * @NoRepositoryBean is required for the interface {@link jparepository} provided by spring data JPA * @NoRepositoryBean public in Terface genericrepository<t, ID extends serializable> extends Jparepository<t, Id> jpaspecificationexecutor<t> {list<t> findall (hashmap<string,object> queryParams, LINKEDHASHMAP&L T


	String, string> by); Simplepage<t> FIndbypage (hashmap<string,object> queryparams, linkedhashmap<string, string> by, Integer PageSize,
	
	Integer pagenum); simplepage<t> findbypagewithsql (String sql, hashmap<string, object> queryparams, Integer pageSize, Integ

	Er pagenum); Simplepage<t> findbypagewithwherehql (String wherehql, hashmap<string, object> queryParams, Integer


	PageSize, Integer pagenum); Simplepage<t> findbypage (hashmap<string, object> queryparams, String by, Integer pageSize, integer pag

	ENum); /** * * Based on SQL statement query, the result is a collection of entities * * @param SQL * * * @param entityclass * * * @return * * * Public LIST&LT;T&G T
	
	Findallbysql (class<t> entityclass, String sql);
	
	public string Getuniqueresultbysql (string sql,hashmap<string,object> queryparams);
	
Public list<t> findbyattachids (string[] IDs);
@Transactional//public void Updatemodelnameandmodelid (String modelname, Integer modelid, string[] IDs);
 }


Custom extension Implementation class: Genericrepositoryimpl, where the other methods are global shared methods, that is, each user interface that inherits the custom extension interface can use these functions

Package Com.wonders.frame.core.dao.impl;
Import java.io.Serializable;
Import Java.util.HashMap;
Import Java.util.LinkedHashMap;

Import java.util.List;
Import Javax.persistence.EntityManager;

Import Javax.persistence.Query;
Import Org.apache.log4j.Logger;
Import org.springframework.data.jpa.repository.support.JpaEntityInformation;
Import Org.springframework.data.jpa.repository.support.JpaEntityInformationSupport;
Import Org.springframework.data.jpa.repository.support.SimpleJpaRepository;
Import Org.springframework.data.repository.NoRepositoryBean;
Import Org.springframework.data.repository.query.Param;

Import org.springframework.transaction.annotation.Transactional;
Import Com.wonders.frame.core.dao.GenericRepository;
Import Com.wonders.frame.core.model.vo.PageInfo;
Import Com.wonders.frame.core.model.vo.SimplePage;



Import Com.wonders.frame.core.utils.ReflectUtil;
 /** * {@link Genericrepository} Interface implementation class and expands on {@link simplejparepository}. * @param <T> Orm Object * @param <id&Gt Primary KEY ID */@NoRepositoryBean//Required public class Genericrepositoryimpl<t, ID extends serializable> extends simple Jparepository<t, Id> implements Genericrepository<t, id> {static Logger Logger = Logger.getlogger (genericre
    Positoryimpl.class);
    Private final Entitymanager em;
    Private final class<t> Entityclass;
    

	Private final String EntityName; /** * constructor * @param domainclass * @param em/public Genericrepositoryimpl (final JPAENTITYINFORMATION&L T
		T,?> entityinformation, Entitymanager Entitymanager) {super (entityinformation, Entitymanager);
		This.em = Entitymanager;
		This.entityclass=entityinformation.getjavatype ();
	This.entityname=entityinformation.getentityname (); }/** * constructor * @param domainclass * @param em/public Genericrepositoryimpl (class<t> DomainClass, Enti 
    Tymanager em) {This (Jpaentityinformationsupport.getmetadata (DomainClass, EM), EM); } @Override PubliC list<t> FindAll (hashmap<string,object> queryparams, linkedhashmap<string, String> by) {
		String wherehql=buildwherequery (Queryparams);
	
		String Orderhql=buildorderby (by); 
		String hql = "Select O from" +entityname+ "O where o.removed=0";

		Query query=createquery (Hql+wherehql+orderhql,queryparams);
		List<t> list= (list<t>) query.getresultlist ();    
	return list; @Override public simplepage<t> findbypage (hashmap<string,object> queryparams, LINKEDHASHMAP&L T String, string> by, Integer Pagesize,integer pagenum) {return findbypage Queryparams,buildorderby (orde

	Rby), pageSize, pagenum); @Override public simplepage<t> findbypage (hashmap<string,object> queryparams, String by, Int
		Eger Pagesize,integer pagenum) {String wherehql=buildwherequery (queryparams);
		
		String Orderhql=orderby; String hql= "SELECT COUNT (*) from" + EntitYname+ "O where o.removed=0";
		Query query=createquery (Hql+wherehql+orderhql,queryparams);
		PageInfo pageinfo=new PageInfo (((Long) Query.getsingleresult ()). Intvalue (), pageSize);
        

        Pageinfo.refresh (Pagenum);
        HQL = "Select O from" + entityname+ "O where o.removed=0";
        Query=createquery (Hql+wherehql+orderhql,queryparams);  

        Query.setfirstresult (Pageinfo.getstartrecord ()). Setmaxresults (Pageinfo.getpagesize ());
	return new Simplepage<t> (Pageinfo,query.getresultlist ()); Private Query createquery (String hql,hashmap<string,object> queryparams) {Query query = Em.createque
		Ry (HQL);
		Setqueryparams (query, queryparams);
    return query; @Override public simplepage<t> findbypagewithwherehql (String wherehql, hashmap<string,object> Queryparams, Integer Pagesize,integer pagenum) {String hql= "SELECT COUNT (*) from" + entityname+ "O where o.re  
		Moved=0 ";
		if (wherehql==null) {wherehql= "";

}		Query query = em.createquery (HQL+WHEREHQL);
		Setqueryparams (query, queryparams);
		PageInfo pageinfo=new PageInfo (((Long) Query.getsingleresult ()). Intvalue (), pageSize);
        

        Pageinfo.refresh (Pagenum);
        HQL = "Select O from" + entityname+ "O where o.removed=0";        
        query = Em.createquery (HQL+WHEREHQL);
        Setqueryparams (query, queryparams);  

        Query.setfirstresult (Pageinfo.getstartrecord ()). Setmaxresults (Pageinfo.getpagesize ());
	return new Simplepage<t> (Pageinfo,query.getresultlist ());  @Override public simplepage<t> findbypagewithsql (String sql, hashmap<string,object> queryparams, Integer  
		Pagesize,integer pagenum) {Query query = em.createnativequery ("SELECT count (*) from (" +sql+ ")");
		
		Setqueryparams (query, queryparams);
		PageInfo pageinfo=new PageInfo (((Long) Query.getsingleresult ()). Intvalue (), pageSize);
		
		Pageinfo.refresh (Pagenum);
		query = em.createnativequery (SQL); Setqueryparams (query, queryParams);  

		Query.setfirstresult (Pageinfo.getstartrecord ()). Setmaxresults (Pageinfo.getpagesize ());
	return new Simplepage<t> (Pageinfo,query.getresultlist ()); } private void Setqueryparams (query query, hashmap<string, object> queryparams) {if (Queryparams!=null &&amp ; Queryparams.size () >0) {for (String Key:queryParams.keySet ()) {Class Clazz=reflectutil.getfieldtype (THIS.ENTITYC
				Lass, Key.replaceall ("_s", ""). ReplaceAll ("_e", ""). ReplaceAll ("_in", "")); if (Clazz!=null && clazz.equals (string.class) &&!key.endswith ("_in")) {Query.setparameter (key, '% ' +q
				Ueryparams.get (Key). toString () + '% ');
				}else{Query.setparameter (Key, Queryparams.get (key)); '}} ' private String Buildorderby (linkedhashmap<string, string> by) {//TODO auto-generated Metho
		D stub stringbuffer orderbyql = new StringBuffer ("");
			if (Orderby!=null && orderby.size () >0) {Orderbyql.append ("Order by"); for (String Key:orderby.keySet ()) {orderbyql.append ("O.").
			Append (Key). Append (""). Append (Orderby.get (key)). Append (",");
		} Orderbyql.deletecharat (Orderbyql.length ()-1);
	return orderbyql.tostring (); Private String Buildwherequery (hashmap<string, object> queryparams) {//TODO auto-generated method stub St
		Ringbuffer wherequeryhql = new StringBuffer (""); if (Queryparams!=null && queryparams.size () >0) {for (String Key:queryParams.keySet ()) {//if (Key.equalsig Norecase ("id")) {//Wherequeryhql.append ("and"). Append ("O.").
Append (Key). Append ("In (:"). Append (Key). Append (")"); }else if (Key.endswith ("_s")) {Wherequeryhql.append ("and"). Append ("O.").
				Append (Key.replace ("_s", "")). Append (">=:"). Append (key); }else if (Key.endswith ("_e")) {Wherequeryhql.append ("and"). Append ("O.").
				Append (Key.replace ("_e", "")). Append ("<=:"). Append (key); }else if (Key.endswith ("_in")) {Wherequeryhql.append ("and"). Append ("O."). Append (Key.replace ("_in", "")). Append ("in:"). Append (key);
					}else{Class Clazz=reflectutil.getfieldtype (This.entityclass, key); if (Clazz!=null && clazz.equals (string.class)) {Wherequeryhql.append ("and"). Append ("O.").
					Append (Key). Append ("like:"). Append (key); }else{wherequeryhql.append ("and"). Append ("O.").
					Append (Key). Append ("=:"). Append (key);
	}}} return Wherequeryhql.tostring (); @Override public list<t> findallbysql (class<t> entityclass, String sql) {//Create native SQL query instance, specify
          The returned entity type query query = em.createnativequery (Sql,entityclass);
		Executes the query, returns the list of entities, list<t> entitylist = Query.getresultlist ();
	return entitylist; public string Getuniqueresultbysql (string sql,hashmap<string,object> queryparams) {Query query = Em.createnat
		Ivequery (SQL);
		For (String Key:queryParams.keySet ()) {Query.setparameter (key, Queryparams.get (key));
       } Executes the query, returning the list of entities, string result = (string) query.getsingleresult ();
	return result; }//Public list<t> findbyattachids (string[] IDs) {//String idsstring = "";//if (Ids==null | | ids.length<1) r
Eturn null; 				for (int i=0; i<ids.length; i++) {//try {//long.valueof (Ids[i]);//} catch (NumberFormatException e) {//
return null;
}//idsstring + + ids[i] + ",";
}//idsstring = Idsstring.substring (0,idsstring.length ()-1);
String hql = "from Attach t where t.removed= ' 0 ' and t.id in (" +idsstring+ ")";
Query query=createquery (HQL, NULL);
List<t> list= (list<t>) query.getresultlist ();    
return list;		////@Transactional//public void Updatemodelnameandmodelid (String modelname, Integer modelid, string[] IDs) {//
String idsstring = "";
if (Ids==null | | ids.length<1) return; 				for (int i=0; i<ids.length; i++) {//try {//long.valueof (Ids[i]);//} catch (NumberFormatException e) {// Return;
}//idsstring + + ids[i] + ",";
}//idsstring = Idsstring.substring (0,idsstring.length ()-1);
String hql = "Update Attach a set a.modelname =" +modelname+ ", A.modelid =" +modelid+ "where a.ID in (" +idsstring+ ")";
CreateQuery (HQL, null). Executeupdate (); //	}

}

Usage Example: Customizing interface Inheritance Extension interface

Package Com.wonders.frame.cpq.dao;

Import java.util.List;

Import Javax.persistence.QueryHint;
Import Org.springframework.data.domain.Page;
Import org.springframework.data.domain.Pageable;
Import org.springframework.data.jpa.repository.Modifying;
Import Org.springframework.data.jpa.repository.Query;
Import org.springframework.data.jpa.repository.QueryHints;
Import Org.springframework.data.repository.query.Param;

Import org.springframework.transaction.annotation.Transactional;
Import Com.wonders.frame.core.dao.GenericRepository;

Import Com.wonders.frame.cpq.model.bo.CpqMain; Public interface Cpqmaindao extends Genericrepository<cpqmain, integer>{public page<cpqmain> findall (
		
	Pageable pageable);
	@Query ("Select a from Cpqmain a where a.removed = 0 and a.id =?")
	
	Public Cpqmain FindByID (Integer ID); @Transactional @Modifying @Query ("Update Cpqmain a set a.removed = 1 where a.id =:id") Public Integer Removebyid (@Pa
	
	
    RAM ("id") Integer ID); @QueryHints ({@qUeryhint (name = "Org.hibernate.cacheable", value = "true")}) public list<cpqmain> findall ();
 }


Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.