共享近期项目的BaseDAO

原创 2007年10月07日 14:51:00
多个项目总结下来,借鉴多位朋友的代码,此BaseDAO较为通用,不敢独享。在设计DAO时也可以将其做为一个CommonDAO,里面常的数据库操作方法均已实现,本人将会对其不断完善
//OrderBy orderby 是一个枚举,ASC & DESC
    public List getObjectByPage(final Class clazz, final Integer curPage,
            
final Integer pageSize, final Map where, final OrderBy orderby,
            
final String orderByFiedName) ...{
        
return getHibernateTemplate().executeFind(new HibernateCallback() ...{

            
public Object doInHibernate(Session session)
                    
throws HibernateException, SQLException ...{
                List list 
= new ArrayList();
                String strWhere 
= "from " + clazz.getName() + " as a";
                
if (where != null...{
                    
// 代条件
                    
//entrySet()  返回此映射中包含的映射关系的 set 视图。
                    Set<Map.Entry> set = where.entrySet();
                    strWhere 
+= " where ";
                    
for (Entry e : set) ...{
                        strWhere 
+= " a." + e.getKey() + " = ?" + " and ";
                    }

                    
//boolean endsWith(String suffix) 
                    
//  测试此字符串是否以指定的后缀结束 
                    if (strWhere.endsWith(" and ")) ...{
                        strWhere 
= strWhere.substring(0, strWhere
                                .lastIndexOf(
" and "));
                    }

                    
// 代排序
                    if (orderByFiedName != null && orderByFiedName.length() > 0...{
                        strWhere 
+= " order by a." + orderByFiedName + " "
                                
+ orderby;
                    }

                }
 else ...{
                    
// 不带条件
                    
// 带排序
                    if (orderByFiedName != null && orderByFiedName.length() > 0...{
                        strWhere 
+= " order by a." + orderByFiedName + " "
                                
+ orderby;
                    }

                }

                
try ...{
                    Query query 
= session.createQuery(strWhere);
                    
if (where != null...{// 给where参数负值
                        Set<Map.Entry> set = where.entrySet();
                        
int i = 0;
                        
for (Entry entry : set) ...{
                            
if (entry.getValue().getClass() == java.sql.Date.class...{
                                query.setParameter(i, entry.getValue(),
                                        Hibernate.DATE);
                            }
 else if (entry.getValue().getClass() == java.sql.Timestamp.class...{
                                query.setParameter(i, entry.getValue(),
                                        Hibernate.TIMESTAMP);
                            }
 else if (entry.getValue().getClass() == java.sql.Time.class...{
                                query.setParameter(i, entry.getValue(),
                                        Hibernate.TIME);
                            }
 else ...{
                                query.setParameter(i, entry.getValue());
                            }

                            i
++;
                        }

                    }

                    list 
= query.setFirstResult((curPage - 1* pageSize)
                            .setMaxResults(pageSize).list();
                    
return list;
                }
 catch (HibernateException e) ...{
                    e.printStackTrace();
                    
return null;
                }

            }


        }
);
    }

汗,附件上传不了。。。。
我目前对分页方法是对查询进行二次,第一次按条件查出结果集的总行数,已后则用Hibernate的分页策略来查了,这样做的方法好是好,通过我的Pager类,可以方便完成所有分页和查询。
如网友看到此文,希望考虑一下一个地方,那就是用什么好的方式来获得指定条件的结果集总行数,目前我的方法是用单独用一个查询来做。相信有更好的办法,如果您有,望您告诉我哦!

项目中三大框架整合的BaseDao接口及其实现

BaseDao.java package cn.itcast.core.dao; import java.io.Serializable; import java.util.List; publ...

项目当中的BaseDao基础了解及运用

一、**BaseDao一般设置为公共虚拟类(public abstract class)并且传递继承

项目1:ItcastOA(2):日志说明、BaseDao和BaseDaoImpl的设计

1、日志说明; E:\avi\spring2.5.6\spring-framework-2.5.6\lib\slf4j          slf4j-api-1.5.0.jar        ...

java项目常用 BaseDao BaseService

IBaseDao package com.glht.sim.dao; import java.util.List; public interface IBaseDao { ...
  • zb0567
  • zb0567
  • 2012年09月08日 21:05
  • 2448

利用泛型封装BaseDao(项目中直接调用即可)

利用泛型封装BaseDao(项目中直接调用即可) package com.cdsxt.base; import java.lang.reflect.Field; import java.l...

近期项目设计知识点总结:flex布局、canvas、引入外部字体、rem、匹配选择器等

一、伪类、伪元素 锚伪类 a:link a:visited a:hover a:active分别是链接未访问时,链接被访问过后,鼠标悬停在链接上,鼠标点击链接那一瞬间,需按顺序设置 二、js禁止移...

mock.js教程 2017-02-08 15:02:39| 分类: 浏览器调试|举报|字号 订阅 下载LOFTER我的照片书 | 由于近期项目需求改动比较大,对于数据的频繁

mock.js教程   2017-02-08 15:02:39|  分类: 浏览器调试|举报|字号 订阅      ...

关于近期带项目的一些心得

今年,很荣幸担当了公司广州白云污染源监控项目的项目经理;在项目管理的过程中,有得有失,有喜有忧,于是想把过程中的心得记录下来和大家一起分享:    1、工作一定要有计划,有计划一定要有考核,尤其是工...

关于近期完成的实习项目的总结

三周半的时间,做完了第一份实习工作的第一个项目,虽然没有用到太复杂的知识,但是从基础角度长进不少,现在项目收尾,分几篇博客来总结一下在这里面学到的知识。本文从整体来说。学习了fragment,这个项目...

近期开发项目中遇到的问题,并总结

1.jquery1.3以后的版本,如果要获取JSON值,json格式必须是标准格式的:如:{"key":"value","key2":"value2"} 2.mysql存储过程参数名称与列明不能相同...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:共享近期项目的BaseDAO
举报原因:
原因补充:

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