共享近期项目的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类,可以方便完成所有分页和查询。
如网友看到此文,希望考虑一下一个地方,那就是用什么好的方式来获得指定条件的结果集总行数,目前我的方法是用单独用一个查询来做。相信有更好的办法,如果您有,望您告诉我哦!

近期项目的总结

近期在项目中使用ElementUi和Vue遇到的问题          1.业务要求:点击查询按钮把查询时间范围作为条件发送请求,在发送axios中过后在返回的then中去把数据放入echarts的柱...
  • lyz571029230
  • lyz571029230
  • 2017年09月14日 16:51
  • 63

近期项目的一些心得

1.关于不同部门协作     (1)要配合对方的工作,大家建立好合作的基础。     (2)尽量将一些其他部门能够主导的工作交给对应部门,通过产品进度来推进。                  比如...
  • hzhiyang84
  • hzhiyang84
  • 2017年03月04日 05:27
  • 188

web项目抽取BaseDao

使用的Hibernate框架连接数据库 第一步:创建BaseDao接口和BaseDaoImpl实现类 BadeDao接口package cn.ex.dao; import java.util.Li...
  • Sun_940903
  • Sun_940903
  • 2017年12月20日 15:18
  • 61

java web项目DAO层通用接口BaseDao与实现类BaseDaoImpl

在Spring+hibernate的web项目中,处理数据层通常会使用Spring框架提供的HibernateTemplate类提供的方法。通常的用法是每一个实体类对应的去写DAO层的接口和实现类。每...
  • jianmo777
  • jianmo777
  • 2015年12月17日 14:43
  • 5853

近期的一个项目的错误总结

好久没有记录自己在做些啥了,经验嘛,当然要分享了,也可以把它从自己的大脑里面拿出来节省空间。言归正传!  1:关于access操作或事件已被禁用模式阻止,这个会导致数据库操作失败解决:在安全选项里面 ...
  • it114
  • it114
  • 2010年03月26日 21:31
  • 897

session共享的目的

session共享是为了解决负载均衡的时候session文件不能共享的问题 可以通过五种方法实现 1.服务器文件同步(不建议使用,这样会造成文件重复,资源浪费) 2.session存数据库(不建...
  • lovely_1014
  • lovely_1014
  • 2016年12月31日 09:18
  • 474

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

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

关于近期项目的思考 - 2.数据

背景:画面上用户不输入值,传入到数据库保存时有些为NULL,有些为''(空)   方案:对于必须输入项进行必填项Check,不是必须项如果用户未输入值,数据库中传入NULL而不是''(空)。 如果用户...
  • socoldinxian
  • socoldinxian
  • 2014年03月25日 11:12
  • 412

近期美国项目的一点感受

一个美国 .NET 项目的测试特点       1.  尽可能的增加测试覆盖率,  本项目要求 public 函数测试覆盖率达到80%以上 , 基本可以保证程序质量.        2.  每次 ch...
  • BuilderC
  • BuilderC
  • 2009年06月23日 20:13
  • 410

【杂谈】记近期项目的三次重构

对于程序员的我以及大家来说,代码重构似乎是非常常见的事情,也是大家乐于去做的事情。因为无论是重构自己的设计或代码,还是重构其他人的设计或代码,都能有一种重构后的成就感,会清楚的感觉到重构后代码的干净度...
  • haust_wang
  • haust_wang
  • 2016年01月13日 16:42
  • 351
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:共享近期项目的BaseDAO
举报原因:
原因补充:

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