Spring&Hibernate分页实现

开发环境:MyEclips 5.01GA
数据库:MySql 5.01
服务器:Tomcat 6(服务器版本关系不大)
关键解决的问题:1).模糊查询 2).数据提取的分页
----------------------------------------------------------------------------------------------------------------------------------
1.按顺序添加3种MyEclipse的支持
  --------------------------------------
|Struts-->Hibernate-->Spring|
  --------------------------------------
   1).Struts的注意事项: 最好重写ActionServlet,要不然Web运行期间会出现中文问题
        方法: 
          (1).在 com.yourcompany.struts 下建立个名为MyActionServlet的类,该类的写法如下
          -------------------------------------------------------------------
               package com.yourcompany.struts;
               import java.io.IOException;
               import javax.servlet.ServletException;
               import javax.servlet.http.HttpServletRequest;
               import javax.servlet.http.HttpServletResponse;
               import org.apache.struts.action.ActionServlet;
               public class MyActionServlet extends ActionServlet 
               {
                  protected void process(HttpServletRequest arg0, HttpServletResponse arg1) throws IOException, ServletException 
                  {
                     arg0.setCharacterEncoding("GB2312");
                     arg1.setCharacterEncoding("GB2312");
                     super.process(arg0, arg1);
                  }
               }
          -------------------------------------------------------------------
          (2).打开web.xml,把
                <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
               改成
                <servlet-class>com.yourcompany.struts.MyActionServlet</servlet-class>
 

 

2).Hibernate的注意事项: 按照向导一顿生成,到最后一步要选覆盖原先类库("R"打头的那个按钮)
          (1).推荐在hibernate.cfg.xml文件下的
                <session-factory>
                中添加
                <property name="show_sql">true</property>
          (2).如果是Ms Sql Server数据库,如果没在连接字符串中指定数据库,那么要在
                <session-factory>
                中添加
                <property name="connection.databaseName">这里填写要访问的数据库</property>

3).Spring的注意事项:
          (1).添加Spring支持的时候要选4项,前3行+最后1行
          (2).在提示SessionFactory Id 什么的那个地方,填写SessionFactory
          (3).然后Hibernate Reverse Engineering(就是各种生成),注意
                 Hibernate mapping file
                 Java Data Object
                 Java Data Access Object
                这3都要选上 而且Java Data Access Object要选Spring DAO
          (4).生成一些文件,要修改:
                 打开表名.hbm.xml这个文件,找到catalog="数据库名"这个东东,删除!!! 记住!千万要删除! 不然报错!!!
          (5)接下来是关键了
               修改表名DAO.java
               1.找到public List findByProperty(String propertyName, Object value)函数
                  把
                   String queryString = "from 表名 as model where model."+ propertyName + "= ?";
                  改成
                   String queryString = "from 表名 as model where model." + propertyName + " like ?";
                  特别注意!!! like前有个 "空格" !!!!!!
               这样就解决了模糊查询的问题了!!!
          (6)新建2个方法,分别为
          -------------------------------------------------------------------
                public List findByProperty(String propertyName, Object value,int firstRow,int maxRow) 
                {
                   log.debug("finding Theuser instance with property and firstRow and maxRow: " + propertyName + ", value: " + value);
                   try 
                   {
                      String queryString = "from 表名 as model where model." + propertyName + " like ?";
                      FenYeHibernateCallback callback = new FenYeHibernateCallback(queryString,firstRow,maxRow);
                      return  getHibernateTemplate().executeFind(callback);
                   }
                   catch (RuntimeException re){log.error("find by property name failed", re);throw re;}
                }
                public List findByProperty(int firstRow,int maxRow) 
                {
                   log.debug("finding Theuser instance with All");
                   try 
                   {
                      String queryString = "from 表名 as model";
                      FenYeHibernateCallback callback = new FenYeHibernateCallback(queryString,firstRow,maxRow);
                      return  getHibernateTemplate().executeFind(callback);
                   } 
                   catch (RuntimeException re){log.error("find All has Error", re);throw re;}
                }
          -------------------------------------------------------------------
                  然后在com.yourcampany.modle中新建一个类
          -------------------------------------------------------------------
                import java.sql.SQLException;
                import java.util.List;
                import org.hibernate.HibernateException;
                import org.hibernate.Query;
                import org.hibernate.Session;
                import org.springframework.orm.hibernate3.HibernateCallback;
                public class FenYeHibernateCallback implements HibernateCallback 
                {
                      private String hql_Str = null;
                      private int first_Row;
                      private int max_Rows;
                   public FenYeHibernateCallback(String hqlStr,int firstRow,int maxRows) 
                   {
                      this.hql_Str = hqlStr;
                      this.first_Row = firstRow;
                      this.max_Rows = maxRows;
                   }
                   public Object doInHibernate(Session s) throws HibernateException,SQLException 
                   {
                       Query query  =  s.createQuery(this.hql_Str); 
                       query.setFirstResult(this.first_Row); 
                       query.setMaxResults(this.max_Rows); 
                       List list  =  query.list(); 
                       return  list; 
                   }
                }
          -------------------------------------------------------------------
                  这样就解决了分页查询问题!!!

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值