Cody_Yu 通用的DAO查询,常见方法集合,基于Oracle&Hibernate&Spring,集合了多种常用方法,方便调用。

转载 2014年04月29日 22:09:05
import java.io.*;
002 import java.sql.SQLException;
003 import java.util.ArrayList;
004 import java.util.List;
005  
006 import org.hibernate.Hibernate;
007 import org.hibernate.HibernateException;
008 import org.hibernate.Query;
009 import org.hibernate.SQLQuery;
010 import org.hibernate.Session;
011 import org.hibernate.Transaction;
012 import org.hibernate.type.Type;
013 import org.springframework.orm.hibernate3.HibernateCallback;
014 import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
015  
016 public class GenericDao extends HibernateDaoSupport{
017     private ThreadLocal<Session> sessions = new ThreadLocal<Session>();
018     private ThreadLocal<Transaction> transactions = new ThreadLocal<Transaction>();
019     public synchronized Session getMySession(){
020         Session session = sessions.get();
021         if(session==null){
022             session = getSession();
023             transactions.set(session.beginTransaction());
024             sessions.set(session);
025         }else
026         if(!session.isOpen()){
027             session = getSession();
028             transactions.set(session.beginTransaction());
029             sessions.set(session);
030         }
031         return session;
032     }
033     public synchronized void commitMySession(){
034         Session session = sessions.get();
035         if(session!=null&&session.isOpen()){
036             transactions.get().commit();
037             session.close();
038         }
039         transactions.remove();
040         sessions.remove();
041     }
042     public synchronized void rollbackMySession(){
043         Session session = sessions.get();
044         if(session!=null&&session.isOpen()){
045             transactions.get().rollback();
046             session.close();
047         }
048         transactions.remove();
049         sessions.remove();
050     }
051     public <T> T get(Class<T> clazz, Serializable id){
052         return (T)getHibernateTemplate().get(clazz, id);
053     }
054     public <T> T load(Class<T> clazz, Serializable id){
055         return (T)getHibernateTemplate().load(clazz, id);
056     }
057     public <T> void save(T entity){
058 //        System.out.println("---->gdao.save("+entity.getClass().getName()+")----");
059         getHibernateTemplate().save(entity);
060     }
061     public <T> void update(T entity){
062         getHibernateTemplate().update(entity);
063     }
064     public <T> void delete(T entity){
065         getHibernateTemplate().delete(entity);
066     }
067     
068     public int execUpdateSQL(String sql, Serializable...values){
069         Session sess = getMySession();
070         SQLQuery query = sess.createSQLQuery(sql);
071         if(values!=null&&values.length>0){
072             for(int i=0; i<values.length; i++){
073                 query.setParameter(i, values[i]);
074             }
075         }
076         return query.executeUpdate();
077     }
078     public Long getFirstLong(String sql, final Serializable... values) throws Exception{
079         List<String> params = new ArrayList<String>(1);
080         List<Type> types = new ArrayList<Type>(1);
081         params.add("c"); types.add(Hibernate.INTEGER);
082         Object obj = findUnique(sql, params, types, values);
083         if(obj==null){
084             return -1L;
085         }
086         if(obj instanceof Object[]){
087             obj = ((Object[])obj)[0];
088         }
089         if(obj instanceof Number){
090             return ((Number)obj).longValue();
091         }
092         return -1L;
093     }
094 //    public Long getFirstLong(String sql,  List<String>params, List<Type>types) throws Exception{
095 //        Object[] obj = findUnique(sql, params, types);
096 //        if(obj==null||obj.length==0){
097 //            return -1L;
098 //        }
099 //        Object object = obj[0];
100 //        if(object instanceof Number){
101 //            return ((Number)object).longValue();
102 //        }
103 //        return -1L;
104 //    }
105     public List<?> find(String hql){
106         return getHibernateTemplate().find(hql);
107     }
108 //    public List<?> find(String hql, final Object...values){
109 //        logger.info(hql);
110 //        return getHibernateTemplate().find(hql, values);
111 //    }
112     
113     public <T> List<T> findByPage(Class<T> clazz, final int start, final int limit, final String where, final Serializable... values){
114         String hql = "from " + clazz.getName() + " as e";
115         if(where!=null&&where.length()>0){
116             hql += " where " + where;
117         }
118         final String fHql = hql;
119         return getHibernateTemplate().executeFind(new HibernateCallback(){
120  
121             public Object doInHibernate(Session session)
122                     throws HibernateException, SQLException {
123                 Query q = session.createQuery(fHql);
124                 if(values!=null&&values.length>0){
125                     for(int i=0; i<values.length; i++){
126                         q.setParameter(i, values[i]);
127                     }
128                 }
129                 q.setFirstResult(start).setMaxResults(limit);
130                 return q.list();
131             }
132             
133         });
134     }
135     public <T> List<T> find(Class<T> clazz, final String where, final Serializable... values){
136         String hql = "from " + clazz.getSimpleName()+" as e";
137         if(where!=null&&where.length()>0){
138             hql += " where " + where;
139         }
140         return getHibernateTemplate().find(hql, values);
141     }
142     public long getTotalCountByHql(Class<?> clazz, final String where, final Serializable... values) throws Exception {
143         String hql = "select count(*) from " + clazz.getSimpleName()+" as e";
144         if(where!=null&&where.length()>0){
145             hql += " where " + where;
146         }
147         List<Number> cs = getHibernateTemplate().find(hql, values);
148         if(cs!=null&&cs.size()>0){
149             Number n = cs.get(0);
150             return n.longValue();
151         }
152         return 0;
153     }
154     public long getTotalCount(Class<?> clazz, final String where, final Serializable... values) throws Exception {
155         String sql = "select count(1) as c from " + clazz.getSimpleName() + " e";
156         if(where!=null&&where.length()>0){
157             sql += " where " + where;
158         }
159         return getFirstLong(sql, values);
160     }
161     
162     public long getTotalCount(String sql, final Serializable... values) throws Exception {
163         return getFirstLong(sql, values).longValue();
164     }
165     public Object[] findUnique(final String sql,  List<String>params, List<Type>types, final Serializable...values) {
166         Session sess = getMySession();
167         logger.debug("------findUnique.getSession()! sess="+sess.hashCode());
168         SQLQuery query = sess.createSQLQuery(sql);
169         for(int j=0; j<params.size(); j++){
170             query.addScalar(params.get(j), types.get(j));
171         }
172         if(values!=null&&values.length>0){
173             for(int i=0; i<values.length; i++){
174                 query.setParameter(i, values[i]);
175             }
176         }
177         query.setMaxResults(1);
178         List<?> list = query.list();
179         if(list==null||list.size()==0){
180             return null;
181         }
182         Object obj = list.get(0);
183         if(obj==null){
184             return null;
185         }
186         logger.debug("obj.type="+obj.getClass().getName());
187         if(!obj.getClass().isArray()){//如果返回值不是数组,则要进行相关的处理
188             if(obj instanceof Number){
189                 if(obj instanceof Long){
190                     return new Long[]{(Long)(obj)};
191                 }
192                 if(obj instanceof Integer){
193                     return new Long[]{new Long((Integer)obj)};
194                 }
195                 return new Number[]{(Number)obj};
196             }
197             return new Object[]{obj};
198         }
199         return (Object[])obj;
200     }
201     public List<Object[]> find(final String sql, List<String>params, List<Type>types, final Serializable... values) {
202         Session sess = getMySession();
203         logger.debug("------find.getSession()! sess="+sess.hashCode());
204         SQLQuery query = sess.createSQLQuery(sql);
205         
206         for(int j=0; j<params.size(); j++){
207             query.addScalar(params.get(j), types.get(j));
208         }
209         if(values!=null&&values.length>0){
210             for(int i=0; i<values.length; i++){
211                 query.setParameter(i, values[i]);
212             }
213         }
214         return query.list();
215     }
216     public long getNextId(String sequence) throws Exception{
217         String sql = "select "+sequence+".nextval as nextid from dual";
218  
219         Session sess = getMySession();
220         logger.debug("------generateId.getSession()! sess="+sess.hashCode());
221         SQLQuery query = sess.createSQLQuery(sql);
222         query.addScalar("nextid", Hibernate.LONG);
223         List<?> list = query.list();
224         if(list==null||list.size()==0){
225             return -1L;
226         }
227         Object obj = list.get(0);
228         logger.debug("obj.type="+obj.getClass().getName());
229         if(obj instanceof Number){
230             return ((Number)obj).longValue();
231         }
232         return -1L;
233     }
234     public boolean exists(String sql, final Object...values) throws Exception{
235         Session sess = getMySession();
236         logger.debug("------exists.getSession()! sess="+sess.hashCode());
237         SQLQuery query = sess.createSQLQuery(sql);
238         for(int i=0; i<values.length; i++){
239             query.setParameter(i, values[i]);
240         }
241         List<?> list = query.list();
242         if(list==null||list.size()==0){
243             return false;
244         }
245         return true;
246     }
247  
248 }

基于Oracle&Hibernate&Spring,集合了多种常用方法,方便调用

import java.io.*; import java.sql.SQLException; import java.util.ArrayList; import java.uti...

通用的DAO查询,常见方法集合,没有使用Spring

001 import java.io.*; 002 import java.sql.SQLException; 003 import java.util.ArrayList; 004 import j...

通用的DAO查询,常见方法集合

import java.io.*; import java.sql.SQLException; import java.util.ArrayList; import java.util.List...

spring+hibernate架构中Dao访问数据库的几种方法

spring+hibernate架构中Dao访问数据库的几种方法 : 在spring+hibernate的架构中,访问数据库有几种方法,按spring依赖注入来区分有3种,在这之前先再来了解一下sp...
  • fxhchl
  • fxhchl
  • 2011年04月20日 17:26
  • 341

spring+hibernate架构中Dao访问数据库的几种方法

spring+hibernate架构中Dao访问数据库的几种方法 在spring+hibernate的架构中,访问数据库有几种方法,按spring依赖注入来区分有3种,在这之前先再来了解一下spri...

SSH整合(spingmvc,spring,hibernate)以及Dao层抽取方法

拯救地球已经很累了,我不想再说废话.pom文件,详见该分类下pom坐标springmvc

Spring+Hibernate整合框架下DAO的数据库访问方法

Spring对Hibernate的DAO实现提供了良好的支持,主要有如下两种方式的DAO实现方法: 第一种:基于Hibernate3.0实现DAO (一)直接使用Hibernate API(使用o...

JAVAWEB Dao模式之增删改和查询通用方法

三.Dao模式 这个是非常重要的模式。主要是运用分层,分为实体层,Dao层,Util层,DaoIml层和测试层。 实体层:主要封装了数据库一些字段。 Dao层主要是接口,定义各种方法,做什么。 Dao...

spring管理hibernate的SessionFactory-多种配置方法

第一种方式使用hiberante.cfg.xml:
  • YURUJUN
  • YURUJUN
  • 2014年05月07日 18:54
  • 523
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Cody_Yu 通用的DAO查询,常见方法集合,基于Oracle&Hibernate&Spring,集合了多种常用方法,方便调用。
举报原因:
原因补充:

(最多只允许输入30个字)