共享近期项目的BaseDAO

多个项目总结下来,借鉴多位朋友的代码,此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)