Package com.wanda.cms.dao.repository;
Import Org.springframework.stereotype.Repository;
Import Javax.persistence.EntityManager;
Import Javax.persistence.PersistenceContext;
Import Javax.persistence.Query;
Import Java.math.BigInteger;
Import java.util.*;
/**
* Build Complex queries
* @author LCHB
*/
@Repository
public class nativequeryrepository{
@PersistenceContext
Private Entitymanager Entitymanager;
/**
* Based on SQL query
* @param sql
* @param resultclass
* @param <T>
* @return
*/
Public <T> list<t> findbysql (String sql,class resultclass) {
Query Nativequery=null;
if (Resultclass!=null &&!resultclass.equals (object.class)) {
nativequery = entitymanager.createnativequery (sql, ResultClass);
}else{
nativequery = entitymanager.createnativequery (sql);
}
List rows = Nativequery.getresultlist ();
List<t> resultlist=new arraylist<t> ();
for (Object obj:rows) {
T row= (t) obj;
Resultlist.add (row);
}
return resultlist;
}
/**
* Query According to parameters
* @param sql
* @param parameters
* @param resultclass
* @param <T>
* @return
*/
Public <T> list<t> findbysql (String sql,map<string,object> parameters,class resultclass) {
Query Nativequery=null;
if (Resultclass!=null &&!resultclass.equals (object.class)) {
nativequery = entitymanager.createnativequery (sql, ResultClass);
}else{
nativequery = entitymanager.createnativequery (sql);
}
iterator<map.entry<string,object>> entries = Parameters.entryset (). Iterator ();
while (Entries.hasnext ()) {
map.entry<string,object> Entry = Entries.next ();
Nativequery.setparameter (Entry.getkey (), Entry.getvalue ());
}
List rows = Nativequery.getresultlist ();
List<t> resultlist=new arraylist<t> ();
for (Object obj:rows) {
T row= (t) obj;
Resultlist.add (row);
}
return resultlist;
}
Public Integer findcountbysql (String sql,map<string,object> parameters) {
List<object> List=this.findbysql (Sql,parameters,object.class);
BigInteger total= (BigInteger) list.get (0);
return Total.intvalue ();
}
}
Spring Data JPA Native SQL query