1 package cn.zk.pic.service.dao;
2
3 import java.io.Serializable;
4 import java.util.List;
5 import java.util.Map;
6 /**
7 *
8 * @author zh
9 *
10 * @param <T>
11 */
12 public interface IbaseDao<T extends Serializable> {
13
14 void save(T t);
15 void update(T t);
16 void save(String hql,Object[] params);
17 void delete(T t);
18 void deleteById(String hql, Object[] params);
19 int update(String hql,Object[] params);
20 T get(final Serializable id);
21 T load(final Serializable id);
22 public List<T> listNotIn(String hql, Object[] params);
23 public List<T> getByHqlNotIn(String hql, Object[] params);
24 List<T> listAll();
25 List<T> listFenYe(int firstResult, int maxResults);
26 List<T> listFenYeNotIn(int firstResult, int maxResults,
27 String hql, Object[] params);
28 long getCount();
29 long getCount(String hql,Object[] params);
30 List<T> listByHql(String hql,Object[] params);
31 T getByHql(String hql,Object[] params);
32 List<T> listFenYeAddparams(int firstResult, int maxResults,String hql,Object[] params);
33 List<T> queryPage(Map map,int firstResult, int maxResults,String hql) ;
34 long getCount(String hql, Map map);
35 }
1 package cn.zk.pic.service.dao;
2
3 import java.io.Serializable;
4 import java.lang.reflect.ParameterizedType;
5 import java.lang.reflect.Type;
6 import java.util.Iterator;
7 import java.util.List;
8 import java.util.Map;
9
10 import javax.annotation.Resource;
11
12 import org.hibernate.Query;
13 import org.hibernate.SessionFactory;
14 import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
15 /**
16 * BaseDaoImpl不能在类型未确定前直接实例化
17 * @author zh
18 * @param <T>
19 */
20 public class BaseDaoImpl<T extends Serializable> extends HibernateDaoSupport implements IbaseDao<T> {
21
22 @Resource(name="sessionFactory")
23 public void setSupperSessionFactory(SessionFactory sessionFactory){
24 super.setSessionFactory(sessionFactory);
25 }
26
27
28 @SuppressWarnings("rawtypes")
29 private Class Tclass;
30 @SuppressWarnings("rawtypes")
31 public BaseDaoImpl(){
32 Type type = this.getClass().getGenericSuperclass();
33 if (type.toString().indexOf("BaseDao") != -1) {
34 ParameterizedType type1 = (ParameterizedType) type;
35 Type[] types = type1.getActualTypeArguments();
36 setTclass((Class) types[0]);
37 }else{
38 type = ((Class)type).getGenericSuperclass();
39 ParameterizedType type1 = (ParameterizedType) type;
40 Type[] types = type1.getActualTypeArguments();
41 setTclass((Class) types[0]);
42 }
43 }
44
45 /**
46 * 保存对象
47 *
48 * @param Object
49 */
50
51 public void save(T t) {
52 //this.getHibernateTemplate().save(t)
53 getSession().save(t);
54
55 }
56
57 /**
58 * 更新对象内容
59 *
60 * @param Object
61 */
62 public void update(T t) {
63 //this.getHibernateTemplate().update(t);
64 getSession().update(t);
65 }
66
67 /**
68 * 删除对象
69 * @param t
70 */
71 public void delete(T t){
72 //this.getHibernateTemplate().delete(t);
73 getSession().delete(t);
74 }
75
76 public void deleteById(String hql, Object[] params){
77 Query query = this.getSession().createQuery(hql);
78 for (int i = 0; i < params.length; i++) {
79 query.setParameter(i, params[i]);
80 }
81 query.executeUpdate();
82 }
83
84 /**
85 * ͨ通过ID 得到对象
86 * @param Serializable
87 */
88 @SuppressWarnings("unchecked")
89 public T get(Serializable id) {
90 //return (T) this.getHibernateTemplate().get(getTclass(), id);
91 return (T)getSession().get(getTclass(), id);
92 }
93
94
95
96 /**
97 * 取得所有对象
98 *
99 */
100 @SuppressWarnings("unchecked")
101 public List<T> listAll() {
102 String hql = "from "+getTclass().getSimpleName();
103 return this.getSession().createQuery(hql).list();
104 }
105
106
107
108 /**
109 * hql解决方案
110 *
111 * @param String hql
112 *
113 * @param Object[] params
114 * 参数列表 顺序不能颠倒
115 */
116
117 @SuppressWarnings("unchecked")
118 public List<T> listByHql(String hql, Object[] params) {
119 Query query = this.getSession().createQuery(hql);
120 if(null == params || params.length == 0){
121 return query.list();
122 }else{
123 for (int i = 0; i < params.length; i++) {
124 query.setParameter(i, params[i]);
125 }
126 }
127 return query.list();
128 }
129
130 /**
131 * 同类分页
132 *
133 * @param int firstResult
134 * 从第几条开始
135 * @param int maxResults
136 * 要取几条
137 */
138 @SuppressWarnings({ "unchecked" })
139 public List<T> listFenYe(int firstResult, int maxResults) {
140 String hql = "from "+getTclass().getSimpleName();
141 Query query = this.getSession().createQuery(hql).setMaxResults(maxResults).setFirstResult(firstResult);
142 return query.list();
143 }
144
145 /**
146 * 取得行数
147 */
148
149 public long getCount() {
150 String hql = "select count(*) from "+getTclass().getSimpleName();
151 return (Long) this.getSession().createQuery(hql).uniqueResult();
152 }
153 /**
154 * 懒加载load
155 */
156 @SuppressWarnings("unchecked")
157 public T load(Serializable id) {
158 //return (T) this.getHibernateTemplate().load(this.getClass(), id);
159 return (T) getSession().load(this.getClass(), id);
160 }
161
162 @SuppressWarnings("rawtypes")
163 public Class getTclass() {
164 return Tclass;
165 }
166 @SuppressWarnings("rawtypes")
167 public void setTclass(Class tclass) {
168 Tclass = tclass;
169 }
170
171 @SuppressWarnings("unchecked")
172 public T getByHql(String hql, Object[] params) {
173 Query query = this.getSession().createQuery(hql);
174 for (int i = 0; i < params.length; i++) {
175 query.setParameter(i, params[i]);
176 }
177 return (T) query.uniqueResult();
178 }
179
180 @SuppressWarnings("unchecked")
181 public List<T> getByHqlNotIn(String hql, Object[] params) {
182 System.out.println("Tclass:"+Tclass);
183 Query query = this.getSession().createSQLQuery(hql).addEntity(Tclass);
184 List<T> list = null ;
185 for (int i = 0; i < params.length; i++) {
186 query.setParameter(i, params[i]);
187 }
188 list = query.list();
189 return list;
190 }
191
192 @SuppressWarnings("unchecked")
193 public List<T> listFenYeAddparams(int firstResult, int maxResults,
194 String hql, Object[] params) {
195 Query query = this.getSession().createQuery(hql);
196 List<T> list = null ;
197 if(null == params || params.length == 0){
198 list = query.setMaxResults(maxResults).setFirstResult(firstResult).list();
199 }
200 if(null != params || params.length != 0){
201 for (int i = 0; i < params.length; i++) {
202 System.out.println("params:"+params[i]);
203 query.setParameter(i, params[i]);
204 }
205 list = query.setMaxResults(maxResults).setFirstResult(firstResult).list();
206 }
207 return list;
208 }
209
210 @SuppressWarnings("unchecked")
211 public List<T> listFenYeNotIn(int firstResult, int maxResults,
212 String hql, Object[] params) {
213 Query query = this.getSession().createSQLQuery(hql).addEntity(Tclass);
214 List<T> list = null ;
215 if(null == params || params.length == 0){
216 list = query.setMaxResults(maxResults).setFirstResult(firstResult).list();
217 }
218 if(null != params || params.length != 0){
219 for (int i = 0; i < params.length; i++) {
220 System.out.println("params:"+params[i]);
221 query.setParameter(i, params[i]);
222 }
223 list = query.setMaxResults(maxResults).setFirstResult(firstResult).list();
224 }
225 return list;
226 }
227
228 @SuppressWarnings("unchecked")
229 public List<T> listNotIn(String hql, Object[] params) {
230 Query query = this.getSession().createSQLQuery(hql).addEntity(Tclass);
231 List<T> list = null ;
232 if(null != params || params.length != 0){
233 for (int i = 0; i < params.length; i++) {
234 System.out.println("params:"+params[i]);
235 query.setParameter(i, params[i]);
236 }
237 }
238 list = query.list();
239 return list;
240 }
241
242
243
244 public long getCount(String hql, Object[] params) {
245 Query query = this.getSession().createQuery(hql);
246 if(null != params || params.length != 0){
247 for (int i = 0; i < params.length; i++) {
248 query.setParameter(i, params[i]);
249 }
250 }
251 return (Long) query.uniqueResult();
252 }
253 @SuppressWarnings("unchecked")
254 public List<T> queryPage(Map map,int firstResult, int maxResults,
255 String hql) {
256 StringBuffer buffer = new StringBuffer(hql);
257 StringBuffer wherestring = new StringBuffer();
258 Iterator paramnames = map.keySet().iterator();
259 while(paramnames .hasNext())
260 {
261 String paramname = (String) paramnames.next();
262 String value = null;
263 value = String.valueOf(map.get(paramname));
264 if(value!=null)
265 {
266 value = value.trim();
267 if(value.equals(""))
268 {
269 continue;
270 }
271 }
272 if(wherestring.length()==0)
273 {
274 wherestring.append(" where ");
275 }else{
276 wherestring.append(" and ");
277 }
278 wherestring.append(paramname).append("=").append(value);
279 buffer.append(wherestring);
280 }
281 Query query = this.getSession().createQuery(buffer.toString());
282 System.out.println(buffer.toString());
283 List<T> list = query.setMaxResults(maxResults).setFirstResult(firstResult).list();
284 return list;
285 }
286 public long getCount(String hql, Map map) {
287 StringBuffer buffer = new StringBuffer(hql);
288 StringBuffer wherestring = new StringBuffer();
289 Iterator paramnames = map.keySet().iterator();
290 while(paramnames .hasNext())
291 {
292 String paramname = (String) paramnames.next();
293 String value = null;
294 //value = (String) map.get(paramname);
295 value = String.valueOf(map.get(paramname));
296 if(value!=null)
297 {
298 value = value.trim();
299 if(value.equals(""))
300 {
301 continue;
302 }
303 }
304 if(wherestring.length()==0)
305 {
306 wherestring.append(" where ");
307 }else{
308 wherestring.append(" and ");
309 }
310 wherestring.append(paramname).append("=").append(value);
311 buffer.append(wherestring);
312 }
313 System.out.println(buffer.toString());
314 Query query = this.getSession().createQuery(buffer.toString());
315 return (Long) query.uniqueResult();
316 }
317
318 public int update(String hql, Object[] params) {
319 Query query = this.getSession().createQuery(hql);
320 if(params == null){
321 return query.executeUpdate();
322 }
323 for (int i = 0; i < params.length; i++) {
324 query.setParameter(i, params[i]);
325 }
326 return query.executeUpdate();
327 }
328
329 public void save(String hql, Object[] params) {
330 Query query = this.getSession().createQuery(hql);
331 for (int i = 0; i < params.length; i++) {
332 query.setParameter(i, params[i]);
333 }
334 query.executeUpdate();
335 }
336
337 }