jpa分页功能2

package com.netsdar.common.jpa;

import java.util.List;
import java.util.Map;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.springframework.dao.DataAccessException;
import org.springframework.transaction.annotation.Transactional;

import com.netsdar.common.Page;
import com.netsdar.common.Result;
import com.netsdar.utils.PageUtil;

public class BaseJpaDao<T> {
	
//	@PersistenceUnit(unitName="jpa")
//	protected EntityManagerFactory emf;
//	
//	@Resource(name="entityManagerFactory")
//	protected void setFactory(
//			EntityManagerFactory entityManagerFactory) {
//		// TODO Auto-generated method stub
//		super.setEntityManagerFactory(entityManagerFactory);
//	}
	
	protected EntityManager em;

    @PersistenceContext
    public void setEntityManager(EntityManager em) {
    	this.em = em;
    }


	
	
	public void saveOracle(T t){
		try {
			 em.getTransaction().begin();
			 em.persist(t);
			 em.getTransaction().commit();
		} catch (DataAccessException e) {
			em.getTransaction().rollback();
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public void updateOracle(T t){
		try {
			 em.getTransaction().begin();
			 em.merge(t);
			 em.getTransaction().commit();
		} catch (DataAccessException e) {
			em.getTransaction().rollback();
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	@Transactional
	public void save(T t){
		em.persist(t);
	}
	@Transactional
	public void update(T t){
		em.merge(t);
	}
	
	public T getByPk(Class<T> clazz,Object id){
		return em.find(clazz, id);
	}
	
	public long getTotalCount(String queryString , Object...values){
		String temp = "select count(*) "+queryString.substring(queryString.indexOf("from"));
		Query query = em.createQuery(temp);
		for(int pos = 0,length = values.length ; pos < length ; pos++){
			query.setParameter(pos+1,values[pos]);
		}
		return (Long) query.getSingleResult();
	}
	
	@SuppressWarnings("unchecked")
	public List<T> find(Page page , String queryString , Object...values){
		List<T> list = null;
		
		if(page == null){
			list = this.find(0,queryString, values);
		}else{
			if(page.getTotalCount()<=0){
				page = PageUtil.createPage(page, getTotalCount(queryString, values));
			}
			Query query = em.createQuery(queryString);
			for(int pos = 0,length = values.length ; pos < length ; pos++){
				query.setParameter(pos+1,values[pos]);
			}
			query.setFirstResult(page.getBeginIndex());
			query.setMaxResults(page.getEveryPage());
			list = query.getResultList();
		}
		return list;
	}
	
	@SuppressWarnings("unchecked")
	public List<T> find(int size , String queryString , Object...values){
		List<T> list = null;
		
		Query query = em.createQuery(queryString);
		
		for(int pos = 0,length = values.length ; pos < length ; pos++){
			query.setParameter(pos+1,values[pos]);
		}
		if(size!=0){
			query.setMaxResults(size);
		}
		list = query.getResultList();
		return list;
	}
	
	@SuppressWarnings("unchecked")
	public Result<T> findForResult(Page page , String queryString , Object...values){
		List<T> list = null;
		
		if(page == null){
			list = this.find(0,queryString, values);
		}else{
			if(page.getTotalCount()<=0){
				page = PageUtil.createPage(page, getTotalCount(queryString, values));
			}
			Query query = em.createQuery(queryString);
			for(int pos = 0,length = values.length ; pos < length ; pos++){
				query.setParameter(pos+1,values[pos]);
			}
			query.setFirstResult(page.getBeginIndex());
			query.setMaxResults(page.getEveryPage());
			list = query.getResultList();
		}
		return new Result<T>(page, list);
	}
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public List<Map> query(Page page , String queryString , Object...values){
		List<Map> list = null;
		
		if(page == null){
			list = this.query(0,queryString, values);
		}else{
			if(page.getTotalCount()<=0){
				page = PageUtil.createPage(page, getTotalCount(queryString, values));
			}
			Query query = em.createQuery(queryString);
			for(int pos = 0,length = values.length ; pos < length ; pos++){
				query.setParameter(pos+1,values[pos]);
			}
			query.setFirstResult(page.getBeginIndex());
			query.setMaxResults(page.getEveryPage());
			list = query.getResultList();
		}
		return list;
	}
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public Result<Map> queryForResult(Page page , String queryString , Object...values){
		List<Map> list = null;
		
		if(page == null){
			list = this.query(0,queryString, values);
		}else{
			if(page.getTotalCount()<=0){
				page = PageUtil.createPage(page, getTotalCount(queryString, values));
			}
			Query query = em.createQuery(queryString);
			for(int pos = 0,length = values.length ; pos < length ; pos++){
				query.setParameter(pos+1,values[pos]);
			}
			query.setFirstResult(page.getBeginIndex());
			query.setMaxResults(page.getEveryPage());
			list = query.getResultList();
		}
		return  new Result<Map>(page, list);
	}
	
		
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public List<Map> query(int size , String queryString , Object...values){
		List<Map> list = null;
		Query query = em.createQuery(queryString);
		for(int pos = 0,length = values.length ; pos < length ; pos++){
			query.setParameter(pos+1,values[pos]);
		}
		if(size!=0){
			query.setMaxResults(size);
		}
		list = query.getResultList();
		return list;
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值