`
bmladmin
  • 浏览: 30654 次
  • 性别: Icon_minigender_1
  • 来自: 四川成都
社区版块
存档分类
最新评论

JPA简单DAO基础类实现

    博客分类:
  • JPA
 
阅读更多

最近研究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;
 }


}

分享到:
评论

相关推荐

    JPA(hibernate) Dao 和 DaoSupport

    在Spring框架中,`DaoSupport`是一个抽象类,为DAO实现提供了一些基础支持,比如初始化和关闭数据库资源。继承自`DaoSupport`的DAO类可以利用其提供的便利方法,如`getJdbcTemplate()`或`getHibernateTemplate()`,...

    JPA+Struts+MariaDB实现简单登录功能

    这里我们关注的是使用Java Persistence API (JPA)、Struts框架以及MariaDB数据库来实现一个简单的登录功能。这个组合提供了从用户界面到数据存储的完整解决方案。 首先,让我们深入了解每个组件: 1. **Java ...

    SpringDataJpa开发--继承JpaRepository实现简单条件查询

    本示例主要探讨如何通过继承`JpaRepository`接口来实现简单的条件查询。`JpaRepository`是Spring Data JPA提供的一种高级抽象,它允许我们以声明式的方式处理CRUD操作,以及执行基本的查询。 首先,我们需要理解`...

    JPA基础语法资料--JPA_Basic

    **JPA基础语法详解** Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的数据。它提供了一种对象/关系映射(ORM)机制,使得开发人员可以使用面向对象的方式来操作数据库,而无需直接编写...

    jpa代码自动生成工具-springboot

    本文将深入探讨如何使用JPA和Spring Boot结合,实现代码自动生成工具,提高开发效率。 首先,让我们了解JPA。JPA通过提供一套标准API,使得开发者无需关注底层SQL语句,而是通过定义实体类、注解以及Repository接口...

    struts2+jpa+spring2.5配置基础框架

    整合Spring 2.5与Struts2和JPA,我们可以在Spring的配置文件(如`applicationContext.xml`)中定义Bean,包括Action类、Service类和DAO类,然后使用Spring的依赖注入来管理这些组件。 在这个基础框架的配置中,我们...

    04_JPA详解_第一个JPA实例与JPA主键生成策略.zip

    ### JPA基础 1. **JPA简介**: JPA是Java EE的一部分,它提供了一套规范,定义了如何将Java对象持久化到关系数据库中。通过JPA,开发者可以使用面向对象的方式来处理数据库操作,而不是直接编写SQL语句。 2. **实体...

    springboot微服务项目加jpa

    它提供了Repository抽象,开发者只需定义接口,无需编写具体的DAO层代码,Spring Data JPA会自动生成实现。此外,它还支持动态查询、分页、排序等高级功能。 **4. 微服务架构** 微服务是一种软件开发方法,将单一的...

    jpa + hibernate 例子

    而**Hibernate**则是一个实现了JPA规范的开源ORM框架,它简化了数据库操作,使得开发者可以使用Java对象来操作数据库,而无需编写大量的SQL语句。 在**JPA + Hibernate**的例子中,通常会涉及以下几个核心概念: 1...

    JPA所需Hibernate3的相关包及一个JPA的Demo

    1. **Hibernate核心库**:这是Hibernate的基础,包含了处理对象关系映射的主要类和接口,如Session和SessionFactory。 2. **JPA Provider**:因为Hibernate也是JPA的提供商,所以可能包含`hibernate-entitymanager`...

    springdatajpa 包括jar包

    Spring Data JPA与Struts2的整合,可以让我们在Struts2的Action类中方便地调用Spring Data JPA提供的数据服务,实现业务逻辑。这通常需要在Struts2的配置文件中配置Action类,并在Spring的上下文中配置Repository...

    手动创建 SpringMvc +SpringDataJpa+Hibernate+ freemarker mavenProject+ 环境切换 webDemo

    通过Spring Data JPA,我们可以直接通过接口定义来实现对数据库的CRUD操作,无需编写大量的DAO层代码。只需提供一个继承自JpaRepository的接口,即可自动实现基本的查询方法。此外,Spring Data JPA还支持自定义查询...

    Hibernate JPA jar包

    以上就是使用Hibernate JPA进行MySQL数据库持久化操作的基础知识。通过理解并熟练掌握这些概念和操作,你可以轻松构建出高效、灵活的数据访问层。这个压缩包提供的所有JAR文件将帮助你在项目中快速引入Hibernate JPA...

    JPA相关jar包

    JPA通过提供API和元数据(如注解或XML配置)来定义如何将Java类映射到数据库表。 **Spring Data Commons** spring-data-commons-1.10.2.RELEASE.jar是Spring Data项目中的核心模块,提供了许多通用的功能,如...

    Spring集成Jpa(Hibernate实现)

    这个"Spring集成JPA(Hibernate实现)"的例子,涵盖了从基础配置到实际使用的完整流程,对于理解Spring与JPA的集成非常有帮助。通过这个示例,开发者能够学习如何避免因版本不兼容而引发的问题,更好地掌握Spring与...

    Spring+Jersey+JPA+Hibernate+MySQL整合

    项目中的源码包含了整合这些技术的所有必要组件,包括配置文件、实体类、DAO(数据访问对象)接口、服务类和控制器。开发者可以通过这些源码学习如何将Spring、Jersey、JPA和Hibernate整合在一起,实现前后端交互,...

    SpringBoot使用Spring-data-jpa简化数据访问层

    由于模板Dao的实现,使得这些具体实体的Dao层已经变的非常“薄”,有一些具体实体的Dao实现可能完全就是对模板Dao的简单代理,并且往往这样的实现类可能会出现在很多实体上。Spring-data-jpa的出现正可以让这样一个...

    Spring Data JPA Examples 官方源码

    Spring Data JPA通过提供一套高级的Repository接口,使得开发者无需编写大量的DAO层代码即可实现对数据库的基本操作。例如,`CrudRepository`接口提供了增删查改的基本方法,而`JpaRepository`则扩展了更多功能,如...

    springBoot整合springData JPA

    起步依赖则允许我们通过简单地添加依赖项就能启动特定的功能,如数据源、JPA等。内嵌的Web服务器如Tomcat或Jetty,使得我们可以快速创建独立运行的Web应用。 Spring Data JPA是Spring Data项目的一部分,它提供了对...

Global site tag (gtag.js) - Google Analytics