通用的DAO查询,常见方法集合
来源:互联网 发布:mac版死或生 编辑:程序博客网 时间:2024/05/21 07:33
import java.io.*;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import org.hibernate.Hibernate;import org.hibernate.HibernateException;import org.hibernate.Query;import org.hibernate.SQLQuery;import org.hibernate.Session;import org.hibernate.Transaction;import org.hibernate.type.Type;import org.springframework.orm.hibernate3.HibernateCallback;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public class GenericDao extends HibernateDaoSupport{ private ThreadLocal<Session> sessions = new ThreadLocal<Session>(); private ThreadLocal<Transaction> transactions = new ThreadLocal<Transaction>(); public synchronized Session getMySession(){ Session session = sessions.get(); if(session==null){ session = getSession(); transactions.set(session.beginTransaction()); sessions.set(session); }else if(!session.isOpen()){ session = getSession(); transactions.set(session.beginTransaction()); sessions.set(session); } return session; } public synchronized void commitMySession(){ Session session = sessions.get(); if(session!=null&&session.isOpen()){ transactions.get().commit(); session.close(); } transactions.remove(); sessions.remove(); } public synchronized void rollbackMySession(){ Session session = sessions.get(); if(session!=null&&session.isOpen()){ transactions.get().rollback(); session.close(); } transactions.remove(); sessions.remove(); } public <T> T get(Class<T> clazz, Serializable id){ return (T)getHibernateTemplate().get(clazz, id); } public <T> T load(Class<T> clazz, Serializable id){ return (T)getHibernateTemplate().load(clazz, id); } public <T> void save(T entity){// System.out.println("---->gdao.save("+entity.getClass().getName()+")----"); getHibernateTemplate().save(entity); } public <T> void update(T entity){ getHibernateTemplate().update(entity); } public <T> void delete(T entity){ getHibernateTemplate().delete(entity); } public int execUpdateSQL(String sql, Serializable...values){ Session sess = getMySession(); SQLQuery query = sess.createSQLQuery(sql); if(values!=null&&values.length>0){ for(int i=0; i<values.length; i++){ query.setParameter(i, values[i]); } } return query.executeUpdate(); } public Long getFirstLong(String sql, final Serializable... values) throws Exception{ List<String> params = new ArrayList<String>(1); List<Type> types = new ArrayList<Type>(1); params.add("c"); types.add(Hibernate.INTEGER); Object obj = findUnique(sql, params, types, values); if(obj==null){ return -1L; } if(obj instanceof Object[]){ obj = ((Object[])obj)[0]; } if(obj instanceof Number){ return ((Number)obj).longValue(); } return -1L; }// public Long getFirstLong(String sql, List<String>params, List<Type>types) throws Exception{// Object[] obj = findUnique(sql, params, types);// if(obj==null||obj.length==0){// return -1L;// }// Object object = obj[0];// if(object instanceof Number){// return ((Number)object).longValue();// }// return -1L;// } public List<?> find(String hql){ return getHibernateTemplate().find(hql); }// public List<?> find(String hql, final Object...values){// logger.info(hql);// return getHibernateTemplate().find(hql, values);// } public <T> List<T> findByPage(Class<T> clazz, final int start, final int limit, final String where, final Serializable... values){ String hql = "from " + clazz.getName() + " as e"; if(where!=null&&where.length()>0){ hql += " where " + where; } final String fHql = hql; return getHibernateTemplate().executeFind(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.createQuery(fHql); if(values!=null&&values.length>0){ for(int i=0; i<values.length; i++){ q.setParameter(i, values[i]); } } q.setFirstResult(start).setMaxResults(limit); return q.list(); } }); } public <T> List<T> find(Class<T> clazz, final String where, final Serializable... values){ String hql = "from " + clazz.getSimpleName()+" as e"; if(where!=null&&where.length()>0){ hql += " where " + where; } return getHibernateTemplate().find(hql, values); } public long getTotalCountByHql(Class<?> clazz, final String where, final Serializable... values) throws Exception { String hql = "select count(*) from " + clazz.getSimpleName()+" as e"; if(where!=null&&where.length()>0){ hql += " where " + where; } List<Number> cs = getHibernateTemplate().find(hql, values); if(cs!=null&&cs.size()>0){ Number n = cs.get(0); return n.longValue(); } return 0; } public long getTotalCount(Class<?> clazz, final String where, final Serializable... values) throws Exception { String sql = "select count(1) as c from " + clazz.getSimpleName() + " e"; if(where!=null&&where.length()>0){ sql += " where " + where; } return getFirstLong(sql, values); } public long getTotalCount(String sql, final Serializable... values) throws Exception { return getFirstLong(sql, values).longValue(); } public Object[] findUnique(final String sql, List<String>params, List<Type>types, final Serializable...values) { Session sess = getMySession(); logger.debug("------findUnique.getSession()! sess="+sess.hashCode()); SQLQuery query = sess.createSQLQuery(sql); for(int j=0; j<params.size(); j++){ query.addScalar(params.get(j), types.get(j)); } if(values!=null&&values.length>0){ for(int i=0; i<values.length; i++){ query.setParameter(i, values[i]); } } query.setMaxResults(1); List<?> list = query.list(); if(list==null||list.size()==0){ return null; } Object obj = list.get(0); if(obj==null){ return null; } logger.debug("obj.type="+obj.getClass().getName()); if(!obj.getClass().isArray()){//如果返回值不是数组,则要进行相关的处理 if(obj instanceof Number){ if(obj instanceof Long){ return new Long[]{(Long)(obj)}; } if(obj instanceof Integer){ return new Long[]{new Long((Integer)obj)}; } return new Number[]{(Number)obj}; } return new Object[]{obj}; } return (Object[])obj; } public List<Object[]> find(final String sql, List<String>params, List<Type>types, final Serializable... values) { Session sess = getMySession(); logger.debug("------find.getSession()! sess="+sess.hashCode()); SQLQuery query = sess.createSQLQuery(sql); for(int j=0; j<params.size(); j++){ query.addScalar(params.get(j), types.get(j)); } if(values!=null&&values.length>0){ for(int i=0; i<values.length; i++){ query.setParameter(i, values[i]); } } return query.list(); } public long getNextId(String sequence) throws Exception{ String sql = "select "+sequence+".nextval as nextid from dual"; Session sess = getMySession(); logger.debug("------generateId.getSession()! sess="+sess.hashCode()); SQLQuery query = sess.createSQLQuery(sql); query.addScalar("nextid", Hibernate.LONG); List<?> list = query.list(); if(list==null||list.size()==0){ return -1L; } Object obj = list.get(0); logger.debug("obj.type="+obj.getClass().getName()); if(obj instanceof Number){ return ((Number)obj).longValue(); } return -1L; } public boolean exists(String sql, final Object...values) throws Exception{ Session sess = getMySession(); logger.debug("------exists.getSession()! sess="+sess.hashCode()); SQLQuery query = sess.createSQLQuery(sql); for(int i=0; i<values.length; i++){ query.setParameter(i, values[i]); } List<?> list = query.list(); if(list==null||list.size()==0){ return false; } return true; }}
- 通用的DAO查询,常见方法集合
- 通用的DAO查询,常见方法集合,没有使用Spring
- Cody_Yu 通用的DAO查询,常见方法集合
- Cody_Yu 通用的DAO查询,常见方法集合,基于Oracle&Hibernate&Spring,集合了多种常用方法,方便调用。
- 通用型Dao层简单化查询通用方法
- 一种通用的DAO访问方法
- JAVAWEB Dao模式之增删改和查询通用方法
- java dao通用方法
- iOS常见又通用的一些小方法集合(不定时更新,欢迎补充)
- JDBC查询的通用方法
- 通用的查询方法 API
- 通用的DAO雏形
- Hibernate的通用dao
- Hibernate的通用dao
- DAO组件通用设计方法
- 通用的增、删、改和查方法 DAO
- jdbc随手笔记-对于dao通用方法的抽取
- 编写通用的DAO类
- UITableView 详细讲解
- 对request.getSession(false)的理解
- static使用场合
- 生成器模式(Builder Pattern )
- 使用axis2创建webservice步骤以及客户端调用service服务代码
- 通用的DAO查询,常见方法集合
- android 上下文菜单Context Menu
- 使用Jmeter的BeanShell Sampler生成需要的参数
- 驱动程序环境搭配(VS2010 + WDK + VirtualDDK + VMware)
- session.invalidate作用
- Android在标准linux基础上对休眠唤醒的实现(二)
- Java循环的谜题
- 把一个vc编写的exe文件的界面外观修改
- 【妖气冲天】小苏有朋性感禁播MV,大尺度、大尺度!要Hold住、要Hold住!