最近研究jpa,写了个简单的DAO基础类,对简单的CRUD进行操作
package com.dyqsoft.base.dao.imp;
import java.lang.reflect.Constructor;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.apache.log4j.Logger;
import com.dyqsoft.base.dao.BaseDAO;
import com.dyqsoft.core.util.Utils;
import com.dyqsoft.entity.vo.PageResult;
public class JPABaseDAOImpl<T> implements BaseDAO<T> {
@PersistenceContext
protected EntityManager em;
private Class<T> entityClass;
private Logger log = null;
public JPABaseDAOImpl() {
try {
Type type = getClass().getGenericSuperclass();
Type[] types = ((ParameterizedType) type).getActualTypeArguments();
entityClass = (Class<T>) types[0];
log = Logger.getLogger(entityClass.getName());
} catch (Exception ex) {
}
}
public T get(Object id) {
return em.find(entityClass, id);
}
public List<T> queryAllForList() {
List<T> tlist = null;
Query q = em.createQuery("select entity from " + entityClass.getName()+" entity");
log.info("<<<-----queryAllForList for sql List---------------->>>");
List list = q.getResultList();
if (list != null && list.size() > 0) {
tlist = list;
log.info("<<<-----queryAllForList for list size:" + tlist.size()+ "---------------->>>");
}
return tlist;
}
public List<T> queryObjectForListByNamedQuery(String nameQuery,
List<Object> param) {
List<T> tlist = null;
Query q = em.createNamedQuery(nameQuery);
log.info("<<<-----queryObjectForListByNamedQuery for sql List---------------->>>");
setParameter(q, param);
List list = q.getResultList();
if (list != null && list.size() > 0) {
tlist = list;
log.info("<<<-----queryObjectForListByNamedQuery for list size:"+ tlist.size() + "---------------->>>");
}
return tlist;
}
public List<T> queryObjectForListByNativedQuery(String nativeQuery,
List<Object> param) {
List<T> tlist = null;
Query q = em.createNativeQuery(nativeQuery);
log.info("<<<-----queryObjectForListByNativedQuery for sql List---------------->>>");
setParameter(q, param);
List list = q.getResultList();
if (list != null && list.size() > 0) {
try {
tlist = castEntity(list);
log.info("<<<-----queryObjectForListByNativedQuery for list size:"
+ tlist.size() + "---------------->>>");
} catch (Exception e) {
e.printStackTrace();
}
}
return tlist;
}
@SuppressWarnings("unchecked")
public List<HashMap<String, Object>> queryObjectForMapByNamedQuery(
String nameQuery, List<Object> param, String[] mapParam) {
List<HashMap<String, Object>> maplist = null;
Query q = em.createNamedQuery(nameQuery);
log
.info("<<<-----queryObjectForMapByNamedQuery for sql List<HashMap<String, Object>>---------------->>>");
setParameter(q, param);
List list = q.getResultList();
if (list != null && list.size() > 0) {
maplist = Utils.setHashMap(list, mapParam, mapParam.length);
log.info("<<<-----queryObjectForMapByNamedQuery for List<HashMap<String, Object>> size:"+ maplist.size() + "---------------->>>");
}
return maplist;
}
public List<HashMap<String, Object>> queryObjectForMapByNativedQuery(
String nativeQuery, List<Object> param, String[] mapParam) {
List<HashMap<String, Object>> maplist=null;
Query q=em.createNativeQuery(nativeQuery);
setParameter(q, param);
List list=q.getResultList();
if(list!=null && list.size()>0){
maplist=Utils.setHashMap(list, mapParam, mapParam.length);
}
return maplist;
}
public void save(T t) {
em.persist(t);
}
public void saveorUpdateorDeleteForSql(String sql, List<Object> param) {
Query q=em.createNativeQuery(sql);
setParameter(q, param);
q.executeUpdate();
}
public void update(T t) {
em.merge(t);
}
private void setParameter(Query q, List<Object> parameter) {
if (parameter != null && parameter.size() > 0) {
int index = 1;
for (Object _obj : parameter) {
q.setParameter(index, _obj);
index++;
}
}
}
@SuppressWarnings("unchecked")
private List<T> castEntity(List<Object[]> list) throws Exception {
List<T> returnList = new ArrayList<T>();
Object[] co = list.get(0);
Class[] c2 = new Class[co.length];
// 确定构造方法
for (int i = 0; i < co.length; i++) {
c2[i] = co[i].getClass();
}
for (Object[] o : list) {
Constructor<T> constructor = entityClass.getConstructor(c2);
returnList.add(constructor.newInstance(o));
}
return returnList;
}
public void delete(T t) {
}
/**
*
*/
public List<T> queryObjectForLIstByIdefinedOfJpaSql(
HashMap<String, Object> param, String queryType) {
StringBuffer sql = new StringBuffer();
List<T> tlist = null;
log
.info("<<<-----queryObjectForLIstByIdefinedOfJpaSql for sql List---------------->>>");
sql.append("select entity from ").append(entityClass.getName()).append(
" entity ");
if (param != null && param.size() > 0) {
sql.append(" where 1=1 ");
Object[] _paramKeys = param.keySet().toArray();
StringBuffer where = new StringBuffer();
for (Object _key : _paramKeys) {
Object paramValue = param.get(_key);
where.append(" and entity.").append(_key).append(queryType)
.append(paramValue).append(" and ");
}
if (where.length() > 0) {
where = where.delete(where.length() - 4, where.length());
sql.append(where);
}
log.info("<<<-----queryObjectForLIstByIdefinedOfJpaSql for "+ sql.toString() + " List---------------->>>");
}
Query q = em.createQuery(sql.toString());
List list = q.getResultList();
if (list != null && list.size() > 0) {
tlist = list;
}
return tlist;
}
/**
* 用户自定义sql查询
*
* @param param
* @param mapKeys
* @param queryType
* @param tablename
* @return
*/
public List<HashMap<String, Object>> queryObjectForLIstByIdefinedOfNativeSql(
HashMap<String, Object> param, String[] mapKeys, String queryType,
String tableName) {
List<HashMap<String, Object>> maplist = null;
StringBuffer sql = new StringBuffer();
sql.append(" select ");
StringBuffer columns = new StringBuffer();
for (String _column : mapKeys) {
columns.append(" alias.").append(_column).append(",");
}
columns = columns.delete(columns.length() - 1, columns.length());
sql.append(columns.toString());
sql.append(" from ").append(tableName).append(" alias ");
if (param != null && param.size() > 0) {
sql.append(" where 1=1 ");
StringBuffer where = new StringBuffer();
Object[] _keys = param.keySet().toArray();
for (Object _key : _keys) {
where.append(" and alias.").append(_key).append(queryType)
.append(param.get(_key)).append(" and ");
}
where = where.delete(where.length() - 4, where.length());
sql.append(where);
}
log.info("<<<<----------------:"+sql.toString());
Query q = em.createNativeQuery(sql.toString());
List list = q.getResultList();
if (list != null && list.size() > 0) {
maplist = Utils.setHashMap(list, mapKeys, mapKeys.length);
}
return maplist;
}
public List<T> queryObjectForListByJql(String jql,List<Object> param) {
List<T> tlist=null;
Query q=em.createQuery(jql);
setParameter(q, param);
List list=q.getResultList();
if(list!=null && list.size()>0){
tlist=list;
}
return tlist;
}
public Class<T> getEntityClass() {
return entityClass;
}
public void setEntityClass(Class<T> entityClass) {
this.entityClass = entityClass;
}
public PageResult<T> queryObjectForPageResult(String sql,
int cuuentPage, int showResult) {
PageResult<T> page=null;
int totalResult=queryObjectForPageResultCount(sql);
if(totalResult!=0){
page=new PageResult<T>();
page.setCuuentPage(cuuentPage);
page.setShowResult(showResult);
page.setTotalResult(totalResult);
Query q=em.createQuery(sql);
q.setFirstResult(cuuentPage*showResult);
q.setMaxResults(showResult);
List<T> resultList=q.getResultList();
if(resultList!=null && resultList.size()>0){
page.setResultList(resultList);
}
}
return page;
}
public int queryObjectForPageResultCount(String sql) {
StringBuffer count=new StringBuffer();
int count_par=0;
String countSql=sql;
countSql=countSql.substring(countSql.indexOf("FROM"),countSql.length());
count.append("SELECT COUNT(entity)").append(countSql);
Query q=em.createQuery(count.toString());
Object _count=q.getSingleResult();
if(_count!=null){
count_par=Integer.parseInt(_count.toString());
}
return count_par;
}
public PageResult<HashMap<String, Object>> queryObjectForPageResultByNative(
String jql,String[]marKyes, int cuuentPage, int showResult) {
int count=queryObjectForPageResultByNativeCount(jql);
PageResult<HashMap<String, Object>> page=null;
if(count!=0){
page=new PageResult<HashMap<String, Object>>();
Query q=em.createNativeQuery(jql);
q.setFirstResult(cuuentPage*showResult);
page.setCuuentPage(cuuentPage);
page.setShowResult(showResult);
page.setTotalResult(count);
q.setMaxResults(showResult);
List list=q.getResultList();
if(list!=null && list.size()>0){
List<HashMap<String,Object>>maplist=Utils.setHashMap(list, marKyes, marKyes.length);
page.setResultList(maplist);
}
}
return page;
}
public int queryObjectForPageResultByNativeCount(String jql) {
StringBuffer count=new StringBuffer();
int count_par=0;
String countSql=jql.toUpperCase();
countSql=countSql.substring(countSql.indexOf("FROM"),countSql.length());
count.append("SELECT COUNT(1)").append(countSql);
Query q=em.createNativeQuery(countSql);
Object _count=q.getSingleResult();
if(_count!=null){
count_par=Integer.parseInt(_count.toString());
}
return count_par;
}
}
分享到:
相关推荐
由于模板Dao的实现,使得这些具体实体的Dao层已经变的非常“薄”,有一些具体实体的Dao实现可能完全就是对模板Dao的简单代理,并且往往这样的实现类可能会出现在很多实体上。Spring-data-jpa的出现正可以让这样一个...
本书则主要介绍以ejb 3+jpa为基础的java ee应用。ejb 3、jpa规范都属于sun公司所制订的java ee规范,因此把基于ejb 3+jpa的应用称为经典java ee架构,目前这种架构在java开发领域也有极大的市场占有率。 本书介绍...
依次是javabean,配置类,contrler层,dao层,实体类,异常定义,异常处理,拦截类,service层,工具类 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200604160124781.png?x-oss-process=image/watermark,...
1.3 基础技术简单简介 1.4 核心框架初步认识 1.5 小结 第2章 myedipse开发工具对各种框架的支持 2.1 使用jsp的两种模式 2.2 struts框架的实现 2.3 hibernate框架的实现 2.4 jpa框架的实现 ...
Spring Boot2.x 基础 视频01讲 环境配置02讲 Spring Boot配置文件03讲 Spring Boot控制器第04讲 JPA Dao JpaRepository第05讲 jpa 复杂操作第06讲 表单验证第07讲 事务管理第08讲 aop切面 知识第09讲 定时器第10讲 ...
linjiashop-core 基础模块,包括工具类,dao,service,bean等内容 linjiashop-generator 代码生成模块,根据实体生成dao,service,后台管理的controller和页面,配合IDEA 代码生成插件webflash-generator使用效果更好...
12.6.3. 基于原生的JPA实现DAO 12.6.4. 异常转化 12.6.5. 事务管理 12.6.6. JpaDialect III. Web 13. Web框架 13.1. 介绍 13.1.1. 与其他web框架的集成 13.1.2. Spring Web MVC框架的特点 13.2. ...
12.6.3. 基于原生的JPA实现DAO 12.6.4. 异常转化 12.7. 事务管理 12.8. JpaDialect III. The Web 13. Web MVC framework Web框架 13.1. 概述 13.1.1. 与其他MVC实现框架的集成 13.1.2. Spring Web MVC框架的...
12.6.3. 基于原生的JPA实现DAO 12.6.4. 异常转化 12.6.5. 事务管理 12.6.6. JpaDialect III. Web 13. Web框架 13.1. 介绍 13.1.1. 与其他web框架的集成 13.1.2. Spring Web MVC框架的特点 13.2. ...
spring-orm.jar:整合第三方的orm实现,如hibernate,ibatis,jdo以及spring 的jpa实现 spring-oxm.jar:Spring对于object/xml映射的支持,可以让JAVA与XML之间来回切换 spring-messaging.jar: spring-test.jar:对...
12.6.3. 基于原生的JPA实现DAO 12.6.4. 异常转化 12.6.5. 事务管理 12.6.6. JpaDialect III. Web 13. Web框架 13.1. 介绍 13.1.1. 与其他web框架的集成 13.1.2. Spring Web MVC框架的特点 13.2. DispatcherServlet ...
12.6.3. 基于原生的JPA实现DAO 12.6.4. 异常转化 12.7. 事务管理 12.8. JpaDialect III. The Web 13. Web MVC framework Web框架 13.1. 概述 13.1.1. 与其他MVC实现框架的集成 13.1.2. Spring Web MVC框架的...
16.2.3 实现实体DAO 16.2.4 利用数据访问对象 16.3 命令模式简介 16.3.1 基础接口 16.3.2 执行命令对象 16.3.3 命令模式的变形 16.4 利用EJB 3.0设计应用程序 16.4.1 利用有状态的...
5.3.3使用spring对jdbc的dao支持类 5.4在spring里集成hibernate 5.4.1选择hibernate的版本 5.4.2使用hibernate模板 5.4.3建立基于hibernate的dao 5.4.4使用hibernate3上下文会话 5.5spring和java持久api ...
5.3.3 使用Spring对JDBC的DAO支持类 5.4 在Spring里集成Hibernate 5.4.1 选择Hibernate的版本 5.4.2 使用Hibernate模板 5.4.3 建立基于Hibernate的DAO 5.4.4 使用Hibernate 3上下文会话 5.5 Spring和Java...
5.3.3 使用Spring对JDBC的DAO支持类 5.4 在Spring里集成Hibernate 5.4.1 选择Hibernate的版本 5.4.2 使用Hibernate模板 5.4.3 建立基于Hibernate的DAO 5.4.4 使用Hibernate 3上下文会话 5.5 Spring和Java...
boot和ExtJs的权限管理和基础架构com.adoph.frameworkalgorithm 算法sort.SortUtils.java 简单排序工具类+++++++++++++++++++++++++++++++++++++++++++core 框架核心core.cache 缓存封装lock 锁...
在典型的面向对象开发方式中,可能要将日志记录语句放在所有方法和 Java 类中才能实现日志功能。在 AOP 方式中,可以反过来将日志服务模块化,并以声明的方式将它们应用到需要日志的组件上。当然,优势就是 Java 类...
linjiashop-core 基础模块,包括工具类,dao,service,bean等内容 linjiashop-generator 代码生成模块,根据实体生成dao,service,后台管理的controller和页面,配合IDEA 代码生成插件webflash-generator使用效果...
:rainbow:特性| 产品特点易于上手:会简单的Spring Boot基础知识即可使用简单:仅需了解@Erupt与@EruptField两个注解即可上手开发代码简洁:前端零代码,扩展模板,控制器,服务,dao都不需要,仅需一个类文件即可...