最近研究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;
}
}
分享到:
相关推荐
在Spring框架中,`DaoSupport`是一个抽象类,为DAO实现提供了一些基础支持,比如初始化和关闭数据库资源。继承自`DaoSupport`的DAO类可以利用其提供的便利方法,如`getJdbcTemplate()`或`getHibernateTemplate()`,...
这里我们关注的是使用Java Persistence API (JPA)、Struts框架以及MariaDB数据库来实现一个简单的登录功能。这个组合提供了从用户界面到数据存储的完整解决方案。 首先,让我们深入了解每个组件: 1. **Java ...
本示例主要探讨如何通过继承`JpaRepository`接口来实现简单的条件查询。`JpaRepository`是Spring Data JPA提供的一种高级抽象,它允许我们以声明式的方式处理CRUD操作,以及执行基本的查询。 首先,我们需要理解`...
**JPA基础语法详解** Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的数据。它提供了一种对象/关系映射(ORM)机制,使得开发人员可以使用面向对象的方式来操作数据库,而无需直接编写...
本文将深入探讨如何使用JPA和Spring Boot结合,实现代码自动生成工具,提高开发效率。 首先,让我们了解JPA。JPA通过提供一套标准API,使得开发者无需关注底层SQL语句,而是通过定义实体类、注解以及Repository接口...
整合Spring 2.5与Struts2和JPA,我们可以在Spring的配置文件(如`applicationContext.xml`)中定义Bean,包括Action类、Service类和DAO类,然后使用Spring的依赖注入来管理这些组件。 在这个基础框架的配置中,我们...
### JPA基础 1. **JPA简介**: JPA是Java EE的一部分,它提供了一套规范,定义了如何将Java对象持久化到关系数据库中。通过JPA,开发者可以使用面向对象的方式来处理数据库操作,而不是直接编写SQL语句。 2. **实体...
它提供了Repository抽象,开发者只需定义接口,无需编写具体的DAO层代码,Spring Data JPA会自动生成实现。此外,它还支持动态查询、分页、排序等高级功能。 **4. 微服务架构** 微服务是一种软件开发方法,将单一的...
而**Hibernate**则是一个实现了JPA规范的开源ORM框架,它简化了数据库操作,使得开发者可以使用Java对象来操作数据库,而无需编写大量的SQL语句。 在**JPA + Hibernate**的例子中,通常会涉及以下几个核心概念: 1...
1. **Hibernate核心库**:这是Hibernate的基础,包含了处理对象关系映射的主要类和接口,如Session和SessionFactory。 2. **JPA Provider**:因为Hibernate也是JPA的提供商,所以可能包含`hibernate-entitymanager`...
Spring Data JPA与Struts2的整合,可以让我们在Struts2的Action类中方便地调用Spring Data JPA提供的数据服务,实现业务逻辑。这通常需要在Struts2的配置文件中配置Action类,并在Spring的上下文中配置Repository...
通过Spring Data JPA,我们可以直接通过接口定义来实现对数据库的CRUD操作,无需编写大量的DAO层代码。只需提供一个继承自JpaRepository的接口,即可自动实现基本的查询方法。此外,Spring Data JPA还支持自定义查询...
以上就是使用Hibernate JPA进行MySQL数据库持久化操作的基础知识。通过理解并熟练掌握这些概念和操作,你可以轻松构建出高效、灵活的数据访问层。这个压缩包提供的所有JAR文件将帮助你在项目中快速引入Hibernate JPA...
JPA通过提供API和元数据(如注解或XML配置)来定义如何将Java类映射到数据库表。 **Spring Data Commons** spring-data-commons-1.10.2.RELEASE.jar是Spring Data项目中的核心模块,提供了许多通用的功能,如...
这个"Spring集成JPA(Hibernate实现)"的例子,涵盖了从基础配置到实际使用的完整流程,对于理解Spring与JPA的集成非常有帮助。通过这个示例,开发者能够学习如何避免因版本不兼容而引发的问题,更好地掌握Spring与...
项目中的源码包含了整合这些技术的所有必要组件,包括配置文件、实体类、DAO(数据访问对象)接口、服务类和控制器。开发者可以通过这些源码学习如何将Spring、Jersey、JPA和Hibernate整合在一起,实现前后端交互,...
由于模板Dao的实现,使得这些具体实体的Dao层已经变的非常“薄”,有一些具体实体的Dao实现可能完全就是对模板Dao的简单代理,并且往往这样的实现类可能会出现在很多实体上。Spring-data-jpa的出现正可以让这样一个...
Spring Data JPA通过提供一套高级的Repository接口,使得开发者无需编写大量的DAO层代码即可实现对数据库的基本操作。例如,`CrudRepository`接口提供了增删查改的基本方法,而`JpaRepository`则扩展了更多功能,如...
起步依赖则允许我们通过简单地添加依赖项就能启动特定的功能,如数据源、JPA等。内嵌的Web服务器如Tomcat或Jetty,使得我们可以快速创建独立运行的Web应用。 Spring Data JPA是Spring Data项目的一部分,它提供了对...