`

GenericDao class

    博客分类:
  • JAVA
 
阅读更多
public class PersistenceManagerHibernate extends HibernateDaoSupport implements PersistenceManager {

	protected Logger logger = Logger.getLogger(PersistenceManager.class.getName());
	
	public PersistenceManagerHibernate() {
		super();
	}


	@SuppressWarnings("unchecked")
	public <T> List<T> findAll(Class<T> entityClass) throws DataAccessException {

		//getHibernateTemplate().setCacheQueries(true);
		List<T> results = getHibernateTemplate().loadAll(entityClass);
		
		Set<T> set = new HashSet<T>(results);
		results = new ArrayList<T>(set);
		return results;
	}

	
	@SuppressWarnings("unchecked")
	public <T> T findById(Class<T> entityClass, Long id) throws DataAccessException {
	
		//getHibernateTemplate().setCacheQueries(true);
		T o = (T) getHibernateTemplate().get(entityClass, id);
		if(o == null){
			logger.warn("uh oh, document with id '" + id + "' not found...");
			throw new ObjectRetrievalFailureException(entityClass, id);
		}
		else {
			return o;
		}
	}
	
	public <T> void saveOrUpdate(T entity) throws DataAccessException {
		getHibernateTemplate().saveOrUpdate(entity);
	}


	@SuppressWarnings("unchecked")
	public <T> T merge(T entity) throws DataAccessException {
		return (T) getHibernateTemplate().merge(entity);
	}


	public <T> void remove(T entity) throws DataAccessException {
		getHibernateTemplate().delete(entity);
	}

	public <T> void removeAll(Class<T> entityClass) throws DataAccessException {
		getHibernateTemplate().deleteAll(this.findAll(entityClass));
	}

	@SuppressWarnings("unchecked")
	public <T> List<T> findByNamedQueryAndNamedParam(Class<T> entityClass,
			String queryName, String[] paramNames, Object[] values) throws DataAccessException {

		List<T> results = (List<T>) getHibernateTemplate().findByNamedQueryAndNamedParam(queryName, paramNames, values);
		return results;
	}

	public <T> List<T> findByNamedQueryAndNamedParam(Class<T> entityClass,
			String queryName, Map<String, ?> params) throws DataAccessException {

		String[] paramNames = new String[params.size()];
		Object[] values = new Object[params.size()];
		
		List<String> keys = new ArrayList<String>(params.keySet());
		for(int i=0; i<keys.size(); i++){
			String k = keys.get(i);
			paramNames[i] = k;
			values[i] = params.get(k);
		}
		
		return this.findByNamedQueryAndNamedParam(entityClass, queryName, paramNames, values);
	}

	@SuppressWarnings("unchecked")
	public <T> List<T> findByNamedParam(Class<T> entityClass, String query,
			String[] paramNames, Object[] values) throws DataAccessException {
		
		List<T> results = (List<T>) getHibernateTemplate().findByNamedParam(query, paramNames, values);
		return results;
		
	}

	@SuppressWarnings("unchecked")
	public <T> List<T> findByNamedParam(Class<T> entityClass, String query,
			Map<String, ?> params) throws DataAccessException {
		
		String[] paramNames = new String[params.size()];
		Object[] values = new Object[params.size()];
		
		List<String> keys = new ArrayList<String>(params.keySet());
		for(int i=0; i<keys.size(); i++){
			String k = keys.get(i);
			paramNames[i] = k;
			values[i] = params.get(k);
		}
		
		List<T> results = (List<T>) getHibernateTemplate().findByNamedParam(query, paramNames, values);
		return results;
		
	}
}

 

分享到:
评论

相关推荐

    Hibernate泛型DAO(结合spring模板支持)

    public abstract class HibernateGenericDao&lt;T&gt; implements GenericDao&lt;T&gt; { private SessionFactory sessionFactory; public HibernateGenericDao(SessionFactory sessionFactory) { this.sessionFactory = ...

    DBUtils模拟用泛型实现

    public class GenericDaoImpl&lt;T&gt; implements GenericDao&lt;T&gt; { // ... @Override public List&lt;T&gt; query(String sql, Object... params) { List&lt;T&gt; list = new ArrayList(); Connection conn = null; ...

    大家看看我设计的泛型DAO(使用Spring的Anotation和Hibernate)

    7. `loadById(Class&lt;T&gt; entityClass, Serializable id)`:根据ID加载实体。 接着,`GenericDao.java`是泛型DAO接口,它定义了对所有类型实体进行操作的方法。这些方法利用了Java的泛型特性,使得DAO可以处理任何...

    泛型通用DAO,可以很简化DAO层的代码

    public class UserDao implements GenericDao&lt;User&gt; { // 实现接口中的方法,但无需重新声明类型 @Override public void save(User user) { ... } @Override public User get(Class&lt;User&gt; clazz, int id) { ......

    一个很好的通用泛型dao(含源码)

    当然还要获得域对象的Class实例,这就要在构造方法中传入Class实例。用spring提供的HibernateTemplate注入到GenericHibernateDao中,这样在各个实现类就可以直接调用HibernateTemplate来实现额外的查询操作了。 ...

    基于泛型与反射的万能数据库操作代码

    public class GenericDaoImpl&lt;T&gt; implements GenericDao&lt;T&gt; { private Class&lt;T&gt; entityType; public GenericDaoImpl(Class&lt;T&gt; entityType) { this.entityType = entityType; } // 实现接口中的各个方法,...

    lambico:提取数据

    class)public interface PersonDao extends GenericDao&lt; Person&gt; {} 您不需要编写任何其他内容,您的DAO将在运行时使用您可以期望的所有方法进行检测:读取,创建,删除,存储,findAll等。 如果您需要特定的查询...

    jsp-servlet-jdbc-master

    java servlet ‍:glasses: 对象...参数:包含用于执行查询的数据数组,特别是每个 ? 对应于阵列中的试验部分。 select * form news where news.A = ?... AbstractDAO: public class AbstractDAO&lt;T&gt; im

    Android 使用ORMLite打造万能泛型Dao简化数据持久化层

    public class UserDao extends OrmLiteBaseDao, String&gt; implements GenericDao, String&gt; { public UserDao(ConnectionSource connectionSource) throws SQLException { super(connectionSource, User.class); } ...

    hibernate不是泛型的通用DAo1

    public class UserDao extends GenericDao&lt;User&gt; {} ``` 但这种做法可能让某些开发者觉得过于复杂,特别是如果只需要简单操作而不需要高度定制化的时候。 在这种情况下,"hibernate不是泛型的通用DAo1"可能提供了一...

    基于hibernate的泛型Dao框架

    `bin`目录通常是编译后生成的Java字节码文件(.class)所在的目录,包含了项目的编译结果。 `src`目录则是源代码目录,通常包含Java源文件,比如项目的各个组件(如泛型Dao的接口和实现类)的代码。 `lib`目录存放...

    泛型dao

    public class UserDaoImpl implements GenericDAO, Long&gt; { @Override public User save(User user) { // 实现保存用户的逻辑 } @Override public User findById(Long id) { // 实现根据ID查找用户的逻辑 }...

    spring hibernate 泛型DAO

    public interface GenericDao, ID extends Serializable&gt; { T save(T entity); void delete(ID id); T findById(ID id); List&lt;T&gt; findAll(); } ``` 在Hibernate中,我们可以使用HibernateTemplate或...

    编写通用Dao

    public class JdbcGenericDao&lt;T&gt; extends AbstractJdbcDaoSupport implements GenericDao&lt;T&gt; { @Override public void save(T entity) { getJdbcTemplate().update("INSERT INTO ...", getParameters(entity)); ...

    虚拟数据层 Struts2、Hibernate、Spring整合的泛型DAO Version 2010.9.27

    super(Person.class); } 告诉对哪个类操作,如不需要自定义扩展方法就作有一个构造方法。 泛型Service:GenericService.java 与泛型dao没有区别 Service :PersonService.java 直接继承。 泛型serviceimpl与...

    一个简单的Hibernate泛型Dao的实现 ---- 20160624

    public abstract class HibernateGenericDaoImpl, ID extends Serializable&gt; implements GenericDao, ID&gt; { // 实现GenericDao接口中的方法 } ``` 最后,关于标签"源码"和"工具",这表明这篇博客可能详细讲解了...

    泛型dao 泛型dao 泛型dao

    super(Person.class); } 告诉对哪个类操作,如不需要自定义扩展方法就作有一个构造方法。 泛型Service:GenericService.java 与泛型dao没有区别 Service :PersonService.java 直接继承。 泛型serviceimpl与...

    Struts2+hibernate+spring整合泛型DAO

    然后,我们可以为每种实体类创建一个继承自`GenericDao`的实现类,如`UserDaoImpl`,并在Spring配置文件中声明并注入到Service层。这样,Service层就可以通过调用`UserDaoImpl`的方法,完成对用户表的操作,而无需...

    Java JDBC简单入门之枚举(Enum)、泛型、反射、JDBC整合

    public class GenericDAO&lt;T&gt; { public T findById(int id) { // 实现查询逻辑 } } ``` 这里的`T`是一个类型参数,具体是什么类型由使用时传入的实际类型决定,如`GenericDAO&lt;User&gt;`,这样就可以避免了类型转换的...

    基于泛型的通用Dao接口和hibernate的实现

    public class GenericHibernateDaoImpl&lt;T&gt; implements GenericDao&lt;T&gt; { private Class&lt;T&gt; clazz; @SuppressWarnings("unchecked") public GenericHibernateDaoImpl() { // 通过反射获取 T 的类型信息实例 this...

Global site tag (gtag.js) - Google Analytics