Spring Hibernate分页实现

来源:互联网 发布:js生命数组 编辑:程序博客网 时间:2024/05/07 10:07
导读:

  开发环境: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,把

  org.apache.struts.action.ActionServlet

  改成

  com.yourcompany.struts.MyActionServlet

  

  

  2).Hibernate的注意事项: 按照向导一顿生成,到最后一步要选覆盖原先类库("R"打头的那个按钮)

  (1).推荐在hibernate.cfg.xml文件下的

  

  中添加

  true

  (2).如果是Ms Sql Server数据库,如果没在连接字符串中指定数据库,那么要在

  

  中添加

  这里填写要访问的数据库

  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;

  }

  }

  -------------------------------------------------------------------

  这样就解决了分页查询问题!!!

  

  Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2089069



本文转自

http://blog.csdn.net/joliny/archive/2008/02/12/2089069.aspx
原创粉丝点击