- 浏览: 198953 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
gdpglc:
2222222222222222222222222222222 ...
JAVA日期格式输出月份前面不想被自动补0 -
hesai_vip:
JPA SPRING 泛型DAO -
gdpglc:
public static String getTime_ ...
JAVA日期格式输出月份前面不想被自动补0 -
junzilan0929cn:
学习了.
EJB 3 初次学习小结 -
xiaowur:
写的很详细...
对我很有帮助
EJB 3 初次学习小结
package com.core.support.springSupportDao; import java.io.Serializable; import java.util.List; /** * 此泛型DAO来自easyjweb * 泛型DAO接口 */ public interface GenericDAO<T> { /** * 根据Id查找一个类型为T的对象。 * * @param id * 传入的ID的值 * @return 一个类型为T的对象 */ T get(Serializable id); /** * 持久化一个对象,该对象类型为T。 * * @param newInstance * 需要持久化的对象,使用JPA标注。 */ <T>T save(T newInstance); /** * 根据对象id删除一个对象,该对象类型为T * * @param id * 需要删除的对象的id。 */ void delete(Serializable id); /** * 更新一个对象,主要用于更新一个在persistenceContext之外的一个对象。 * * @param transientObject * 需要更新的对象,该对象不需要在persistenceContext中。 */ void update(T transientObject); /** * 根据对象的一个属性名和该属性名对应的值来查找一个对象。 * * @param propertyName * 属性名 * @param value * 属性名对应的值 * @return 一个对象,如果在该属性名和值的条件下找到多个对象,则抛出一个IllegalStateException异常 */ T getBy(String propertyName, Object value); /** * 根据一个查询条件及其参数,还有开始查找的位置和查找的个数来查找任意类型的对象。 * * @param queryName * 命名查询的名字 * @param params * 查询条件中的参数的值。使用Object数组,要求顺序和查询条件中的参数位置一致。 * @param begin * 开始查询的位置 * @param max * 需要查询的对象的个数 * @return 一个任意对象的List对象,如果没有查到任何数据,返回一个空的List对象。 */ List executeNamedQuery(final String queryName, final Object[] params, final int begin, final int max); /** * 根据一个查询条件及其参数,还有开始查找的位置和查找的个数来查找类型为T的对象。 * * @param query * 查询的条件,使用位置参数,对象名统一为obj,查询条件从where后开始。比如:obj.name = * ?1 and obj.properties = ?2 * @param params * 查询条件中的参数的值。使用Object数组,要求顺序和查询条件中的参数位置一致。 * @param begin * 开始查询的位置 * @param max * 需要查询的对象的个数 * @return 一个该类型对象的List对象,如果没有查到任何数据,返回一个空的List对象。 */ List<T> find(String query, Object[] params, int begin, int max); /** * 根据一个查询条件及其参数,还有开始查找的位置和查找的个数来查找任意类型的对象。 * * @param query * 完整的查询语句,使用位置参数。比如:select user from User * user where user.name = ?1 and * user.properties = ?2 * @param params * 查询条件中的参数的值。使用Object数组,要求顺序和查询条件中的参数位置一致。 * @param begin * 开始查询的位置 * @param max * 需要查询的对象的个数 * @return 一个任意对象的List对象,如果没有查到任何数据,返回一个空的List对象。 */ List query(String query, Object[] params, int begin, int max); /** * 根据jpql语句执行批量数据更新等操作 * * @param jpql * 需要执行jpql语句 * @param params * 语句中附带的参数 * @return */ int batchUpdate(String jpql, Object[] params); /** * 执行SQL语句查询 * * @param nnq * @return */ public List executeNativeNamedQuery(String nnq); List executeNativeQuery(final String nnq, final Object[] params, final int begin, final int max); /** * 执行SQL语句 * * @param nnq * @return */ public int executeNativeSQL(final String nnq); /** * flush() */ public void flush(); }
package com.core.support.springSupportDao; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceException; import javax.persistence.Query; import org.springframework.orm.jpa.JpaCallback; import org.springframework.orm.jpa.support.JpaDaoSupport; import com.core.openstarbbsexception.JPAMothodParameterException; import com.core.support.springSupportDao.GenericDAO; public class GenericDAOImpl<T> extends JpaDaoSupport implements GenericDAO<T> { private Class<T> clazz; public GenericDAOImpl(Class<T> clazz) { this.clazz = clazz; } /* * public void setClazz(Class<T> clazz) { this.clazz = clazz; } public * Class<T> getClazz() { return clazz; } */ public T get(Serializable id) { if (id == null) return null; return this.getJpaTemplate().find(clazz,id); } public List<T> find(final String queryStr, final Object[] params, final int begin, final int max) { // TODO Auto-generated method stub List<T> ret = (List<T>) this.getJpaTemplate().execute( new JpaCallback() { public Object doInJpa(EntityManager em) throws PersistenceException { // TODO Auto-generated method stub String clazzName = clazz.getName(); StringBuffer sb = new StringBuffer("select obj from "); sb.append(clazzName).append(" obj").append(" where ") .append(queryStr); Query query = em.createQuery(sb.toString()); int parameterIndex = 1; if (params != null && params.length > 0) { for (Object obj : params) { query.setParameter(parameterIndex++, obj); } } if (begin >= 0 && max > 0) { query.setFirstResult(begin); query.setMaxResults(max); } if (begin >= 0 && max > 0) { query.setFirstResult(begin); query.setMaxResults(max); } return query.getResultList(); } }); if (ret != null && ret.size() >= 0) { return ret; } else { return new ArrayList<T>(); } } public List query(final String queryStr, final Object[] params, final int begin, final int max) { // TODO Auto-generated method stub List ret = (List) this.getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(EntityManager em) throws PersistenceException { // TODO Auto-generated method stub Query query = em.createQuery(queryStr); int parameterIndex = 1; if (params != null && params.length > 0) { for (Object obj : params) { query.setParameter(parameterIndex++, obj); } } if (begin >= 0 && max > 0) { query.setFirstResult(begin); query.setMaxResults(max); } /* * if (begin >= 0 && max > 0) { query.setFirstResult(begin); * query.setMaxResults(max); } */ return query.getResultList(); } }); if (ret != null && ret.size() >= 0) { return ret; } else { return new ArrayList(); } } public void delete(Serializable id){ if (id == null) try { throw new JPAMothodParameterException(); } catch (JPAMothodParameterException e1) { e1.printStackTrace(); } T object = this.get(id); if (object != null) { try { this.getJpaTemplate().remove(object); } catch (Exception e) { e.printStackTrace(); } } } public <T> T save(T instance) { // TODO Auto-generated method stub this.getJpaTemplate().persist(instance); return instance; } public T getBy(final String propertyName, final Object value) { if (propertyName == null || "".equals(propertyName) || value == null) try { throw new JPAMothodParameterException(); } catch (JPAMothodParameterException e) { e.printStackTrace(); } // TODO Auto-generated method stub List<T> ret = (List<T>) this.getJpaTemplate().execute( new JpaCallback() { public Object doInJpa(EntityManager em) throws PersistenceException { // TODO Auto-generated method stub String clazzName = clazz.getName(); StringBuffer sb = new StringBuffer("select obj from "); sb.append(clazzName).append(" obj"); Query query = null; if (propertyName != null && value != null) { sb.append(" where obj.").append(propertyName) .append(" = :value"); query = em.createQuery(sb.toString()).setParameter( "value", value); } else { query = em.createQuery(sb.toString()); } return query.getResultList(); } }); if (ret != null && ret.size() == 1) { return ret.get(0); } else if (ret != null && ret.size() > 1) { throw new java.lang.IllegalStateException( "worning --more than one object find!!"); } else { return null; } } public List executeNamedQuery(final String queryName, final Object[] params, final int begin, final int max) { List ret = (List) this.getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(EntityManager em) throws PersistenceException { Query query = em.createNamedQuery(queryName); int parameterIndex = 1; if (params != null && params.length > 0) { for (Object obj : params) { query.setParameter(parameterIndex++, obj); } } if (begin >= 0 && max > 0) { query.setFirstResult(begin); query.setMaxResults(max); } return query.getResultList(); } }); if (ret != null && ret.size() >= 0) { return ret; } else { return new ArrayList(); } } public void update(T instance) { // TODO Auto-generated method stub this.getJpaTemplate().merge(instance); } public void setClazzType(Class clazz) { this.clazz = clazz; } public Class getClassType() { return this.clazz; } public List executeNativeNamedQuery(final String nnq) { Object ret = this.getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(EntityManager em) throws PersistenceException { Query query = em.createNativeQuery(nnq); return query.getResultList(); } }); return (List) ret; } public List executeNativeQuery(final String nnq, final Object[] params, final int begin, final int max) { List ret = (List) this.getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(EntityManager em) throws PersistenceException { Query query = em.createNativeQuery(nnq); int parameterIndex = 1; if (params != null && params.length > 0) { for (Object obj : params) { query.setParameter(parameterIndex++, obj); } } if (begin >= 0 && max > 0) { query.setFirstResult(begin); query.setMaxResults(max); } return query.getResultList(); } }); if (ret != null && ret.size() >= 0) { return ret; } else { return new ArrayList(); } } public int executeNativeSQL(final String nnq) { Object ret = this.getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(EntityManager em) throws PersistenceException { Query query = em.createNativeQuery(nnq); return query.executeUpdate(); } }); return (Integer) ret; } public int batchUpdate(final String jpql, final Object[] params) { Object ret = this.getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(EntityManager em) throws PersistenceException { Query query = em.createQuery(jpql); int parameterIndex = 1; if (params != null && params.length > 0) { for (Object obj : params) { query.setParameter(parameterIndex++, obj); } } return query.executeUpdate(); } }); return (Integer) ret; } public void flush() { this.getJpaTemplate().execute(new JpaCallback() { public Object doInJpa(EntityManager em) throws PersistenceException { em.getTransaction().commit(); return null; } }); } }
package com.core.openstarbbsexception; /** * OpenStarBBS自定义异常。 * @author treblesoftware * */ public class JPAMothodParameterException extends Exception { public JPAMothodParameterException(){ super("JPA ORM SUPPORT EXCEPTION:com.core.support.dao.GenericDAOImpl 方法参数为NULL。错误"?); } }
评论
3 楼
hesai_vip
2013-05-31
2 楼
treblesoftware
2010-04-16
sky3380 写道
楼主用过吗,Spring2.5的JPA是没法用泛型的
不好意思,版本忘记了,很久以前的事情了。不过我跑起来的。
1 楼
sky3380
2010-04-16
楼主用过吗,Spring2.5的JPA是没法用泛型的
发表评论
-
JPA 映射实体生命周期
2009-11-27 20:56 1637JPA 实体生命周期分为4种状态,其实跟HIBERNATE的 ... -
关于JBOSS数据源配置 <use-java-context>false</use-java-context>的问题
2009-11-27 16:16 5849其实这个问题可以归跟到只是一个JNDI查找时名字的问题。但是作 ... -
JBOSS 5 连接池配置
2009-11-27 08:37 2825JBOSS 5与其它版本的JBOSS 连接池配置还是有很大不同 ... -
JPA 泛型DAO 封装(源码来自EasyJWeb)
2009-11-27 08:00 5748对于在Web容器中使用Enti ... -
JPA EntityManager 详解
2009-11-27 07:56 15244持久化上下文(Persistence Contexts)的相关 ... -
EJB 3 初次学习小结
2009-11-26 20:27 2326从昨天到今天晚上,从 ... -
EJB3.0 注解列表
2009-11-26 09:14 1117会话BEAN与消息驱动BEAN。 1,会话BEAN。 有状 ...
相关推荐
本文将详细介绍泛型DAO模式在Java Web开发中的应用,包括泛型机制、JPA框架、Struts框架和Spring框架的使用。 一、泛型机制 Java 5.0版本引入了泛型机制,提供了一种解决方案,使用类型参数来代替Object类型的变量...
【标题】"Hibernate泛型Dao"是针对Java开发中的数据持久化框架Hibernate的一个高级应用,主要目的是为了提高代码的复用性和简洁性。在传统的Hibernate使用中,针对每个实体类,我们都需要创建一个对应的Dao(Data ...
在实际的Java Web应用中,我们可以结合Spring框架的Hibernate或JPA支持,进一步简化泛型DAO的实现,利用Spring的模板类如JdbcTemplate、HibernateTemplate等,自动处理SQL执行和结果映射。 总的来说,泛型DAO在Java...
泛型DAO(Data Access Object)是一种设计模式,用于抽象数据访问层的操作,提供通用的CRUD(Create, Read, Update, Delete)方法。通过泛型,DAO可以适用于多种类型的实体,降低了代码重复。例如,一个BaseDAO接口...
对数据库的操作无非就“增删改查”。就最为普遍的单表操作而言,除了表和字段不同外,语句都是类似的,开发人员需要写...Spring-data-jpa的出现正可以让这样一个已经很“薄”的数据访问层变成只是一层接口的编写方式。
目录 企业级应用的特点 JPA及JPA使用技巧 使用泛型DAO来简化DAO层的开发 IOC容器、AOP及Spring2 EasyJWeb如何实现快速开发 小结
综上所述,"spring3.1+hibernate4+jpa Dao"的集成是一个高效、灵活的企业级应用开发架构,它结合了Spring的IoC和AOP能力、Hibernate的ORM功能以及JPA的标准接口,通过泛型DAO实现和事务管理,为开发者提供了强大的...
总的来说,"SSHWithAnnotationDemo"项目展示了如何利用现代Java技术栈的高级特性,包括Struts2、Spring3和Hibernate的注解功能,DAO层的泛型设计以及通用的分页实现,来构建一个高效、可维护的Web应用。这样的实践...
- `DAO(1).rar`可能包含使用泛型的DAO设计模式示例,展示了如何创建泛型DAO以处理不同类型的数据对象。 综上所述,SSH框架结合泛型能够提升Java应用的开发效率和代码质量。通过学习和理解这些示例,开发者可以更好...
- **自定义方法**:通过在DAO接口中定义方法名遵循一定规则(如 `findByName(String name)`),Spring Data JPA 能够自动识别并生成相应的实现。 #### 五、总结 Spring Data JPA 通过提供一套简单而强大的API,极...
- 泛型DAO:利用Java的泛型特性,创建可复用的DAO,减少代码冗余。 5. **Spring与JPA的事务管理** - 无XML配置事务:使用`@EnableTransactionManagement`注解,配合`@Transactional`注解在方法级别定义事务。 - ...
SpringDataJpa通过泛型接口和注解,大大简化了数据库操作,开发者无需编写大量的DAO层代码,即可实现对数据库的CRUD操作。它支持多种ORM框架,如Hibernate和MyBatis,使得开发者可以根据项目需求灵活选择。 Mysql...
对于JPA,Spring Data通过泛型 Repository 接口提供了一种声明式的方法来执行CRUD(创建、读取、更新、删除)操作,减少了手动编写DAO(数据访问对象)和Repository层的代码。 **PostgreSQL** PostgreSQL是一种开源...
JPA 允许开发者使用注解来定义实体对象及其数据库行为,减少了手动编写 SQL 和 DAO 类的需求。在 Spring 中,JPA 与 Spring Data 结合,进一步简化了数据访问层的开发。 4. 使用 Spring 数据存储库 Spring Data ...
通过提供泛型接口Repository,开发者无需编写大量的DAO层代码,就能实现对数据库的基本操作,如增删查改。在JavaConfig中,我们需要定义一个配置类,使用`@EnableJpaRepositories`注解来启用JPA仓库,并通过`@Bean`...
通过这种方式,Spring Data JPA会自动为你生成接口的实现,你无需编写任何DAO层的实现类。只需注入Repository接口,就可以直接调用方法进行数据库操作。这种接口式的编程方式极大地提高了代码的可读性和可维护性。 ...
Spring MVC、Hibernate 和 Spring 是Java开发中非常流行的三大框架,它们分别用于Web应用的视图控制器、对象关系映射和依赖注入。这个压缩包提供的案例是这三个框架的整合使用,涵盖了基本的CRUD(创建、读取、更新...
通用道在 JPA/HIbernate/Spring 环境中使用泛型提供 DAO API,因此它可以与此类架构中的任何 Hibernate POJO 一起使用,而无需为每个域类创建专用的数据访问接口。 Maven 依赖项: <dependency> <groupId>org....