关闭

共享近期项目的BaseDAO

1068人阅读 评论(0) 收藏 举报
多个项目总结下来,借鉴多位朋友的代码,此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类,可以方便完成所有分页和查询。
如网友看到此文,希望考虑一下一个地方,那就是用什么好的方式来获得指定条件的结果集总行数,目前我的方法是用单独用一个查询来做。相信有更好的办法,如果您有,望您告诉我哦!
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:122468次
    • 积分:1317
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:10篇
    • 译文:0篇
    • 评论:35条
    文章分类
    最新评论