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

001	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	}



                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值