实现了hibernate的简单的分页了。其实很简单(一)

本文介绍了一个基于Struts、Spring和Hibernate技术栈的分页功能实现过程,包括数据库表映射、DAO接口及其实现、以及服务层接口和实现等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天终于实现了hibernate实现分页了。。把oksonic的SSH的例子做了增加,实现了查询的分页。

同时现在也把srtuts + spring + hibernate  结合的实现方法重新复习了一下,总结如下:

1  首先肯定是要把对应的数据库的表进行映射的,把影射类和表的映射XML文件放到包bo中:

    包含文件AbstractUser.java        User.java        User.hbm.xml

    表的映射配置文件如下:

<hibernate-mapping>
    <class name="com.oa.data.bo.User" table="userlist">
        <id name="id" type="integer">
            <column name="id" />
            <generator class="native"></generator>
        </id>
        <property name="userName" type="string">
            <column name="userName" length="100" not-null="true" />
        </property>
        <property name="userPwd" type="string">
            <column name="userPwd" length="100" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

2  写DAO数据访问接口IUserDAO .java,放在dao包中:

package com.oa.data.dao;

import java.util.List;

import com.oa.data.bo.User;

public interface IUserDAO {


public abstract void save(User transientInstance);

 public abstract void delete(User persistentInstance);

 public abstract User findById(java.lang.Integer id);

 public abstract List findByExample(User instance);

 public abstract User merge(User detachedInstance);

 public abstract void attachDirty(User instance);

 public abstract void attachClean(User instance);
 
 public abstract User findByUsername(String username);
 
 public List findWithPage(int pageSize, int startRow);
 
 public int counter();

}

3   写DAO数据访问实现类 UserDAO .java,放在dao.imp包中:

package com.oa.data.dao.impl;

import java.util.ArrayList;
import java.util.List;

import net.sf.hibernate.Transaction;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.LockMode;
import org.hibernate.criterion.Example;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.oa.data.bo.User;
import com.oa.data.dao.IUserDAO;

/**
 * Data access object (DAO) for domain model class User.
 * @see .User
 * @author MyEclipse - Hibernate Tools
 */
public class UserDAO extends HibernateDaoSupport implements IUserDAO {

    private static final Log log = LogFactory.getLog(UserDAO.class);

 protected void initDao() {
  //do nothing
 }
   
    /* (non-Javadoc)
  * @see com.oa.data.dao.impl.IUserDAO#save(com.oa.data.bo.User)
  */
    public void save(User transientInstance) {
        log.debug("saving User instance");
        try {
         this.getHibernateTemplate().saveOrUpdate(transientInstance);
            log.debug("save successful");
        } catch (RuntimeException re) {
            log.error("save failed", re);
            throw re;
        }
    }
   
 /* (non-Javadoc)
  * @see com.oa.data.dao.impl.IUserDAO#delete(com.oa.data.bo.User)
  */
 public void delete(User persistentInstance) {
        log.debug("deleting User instance");
        try {
            getHibernateTemplate().delete(persistentInstance);
            log.debug("delete successful");
        } catch (RuntimeException re) {
            log.error("delete failed", re);
            throw re;
        }
    }
   
    /* (non-Javadoc)
  * @see com.oa.data.dao.impl.IUserDAO#findById(java.lang.Integer)
  */
    public User findById( java.lang.Integer id) {
        log.debug("getting User instance with id: " + id);
        try {
            User instance = (User) getHibernateTemplate()
                    .get("User", id);
            return instance;
        } catch (RuntimeException re) {
            log.error("get failed", re);
            throw re;
        }
    }
   
   
    /* (non-Javadoc)
  * @see com.oa.data.dao.impl.IUserDAO#findByExample(com.oa.data.bo.User)
  */
    public List findByExample(User instance) {
        log.debug("finding User instance by example");
        try {
            List results = getSession()
                    .createCriteria("User")
                    .add(Example.create(instance))
            .list();
            log.debug("find by example successful, result size: " + results.size());
            return results;
        } catch (RuntimeException re) {
            log.error("find by example failed", re);
            throw re;
        }
    }   
   
    /* (non-Javadoc)
  * @see com.oa.data.dao.impl.IUserDAO#merge(com.oa.data.bo.User)
  */
    public User merge(User detachedInstance) {
        log.debug("merging User instance");
        try {
            User result = (User) getHibernateTemplate()
                    .merge(detachedInstance);

            log.debug("merge successful");
            return result;
        } catch (RuntimeException re) {
            log.error("merge failed", re);
            throw re;
        }
    }

    /* (non-Javadoc)
  * @see com.oa.data.dao.impl.IUserDAO#attachDirty(com.oa.data.bo.User)
  */
    public void attachDirty(User instance) {
        log.debug("attaching dirty User instance");
        try {
            getHibernateTemplate().saveOrUpdate(instance);
            log.debug("attach successful");
        } catch (RuntimeException re) {
            log.error("attach failed", re);
            throw re;
        }
    }
   
    /* (non-Javadoc)
  * @see com.oa.data.dao.impl.IUserDAO#attachClean(com.oa.data.bo.User)
  */
    public void attachClean(User instance) {
        log.debug("attaching clean User instance");
        try {
            getHibernateTemplate().lock(instance, LockMode.NONE);
            log.debug("attach successful");
        } catch (RuntimeException re) {
            log.error("attach failed", re);
            throw re;
        }
    }

 public static IUserDAO getFromApplicationContext(ApplicationContext ctx) {
     return (IUserDAO) ctx.getBean("UserDAO");
 }

 public User findByUsername(String username) {
  log.debug("getting User instance with userName: " + username);
  try {
   List list = getHibernateTemplate().find(
     "from User as u where userName = ?", username);
   if(list.size() > 0) {
    User instance = (User) list.get(0);
    return instance;
   } else {
    return null;
   }
  } catch (RuntimeException re) {
   log.error("get failed", re);
   throw re;
  }
 }

 public List findWithPage(int pageSize, int startRow) {
  List list=new ArrayList();
  Transaction tx = null;
  log.debug("ShowAllUser");
  try {
   org.hibernate.Query q ;
   q=this.getSessionFactory().openSession().createQuery("from User");
   q.setFirstResult(startRow);
   q.setMaxResults(pageSize);
                                                 //  hibernate简单分页的设置,设置起始行和每页的记录数
   list=q.list();
  
  } catch (RuntimeException e) {
   // TODO Auto-generated catch block
          e.printStackTrace();
  }
 
  return list;
 }

 public int counter() {
  int counter=0;
  Transaction tx = null;
  log.debug("counter");
  counter = ((Integer)this.getHibernateTemplate().iterate("select count(*) from User").next()).intValue();
  return counter;
 }
}

4  因为用到了spring,需要做DAO服务代理,所以有必要实现服务类。service包中:

package com.oa.model.service;

import java.util.List;

import com.oa.data.bo.User;

public interface IUserService {
//  验证用户是否合法,并返回一个 User 对像
     public User isValidUser(String username,String password);
     public List findWithPage(int pageSize, int startRow);
     public int counter();
}


5  有服务接口就有实现类:service.imp包中:

package com.oa.model.service.impl;

import java.util.ArrayList;
import java.util.List;

import com.oa.data.bo.User;
import com.oa.data.dao.IUserDAO;
import com.oa.model.service.IUserService;

public class UserService implements IUserService {

 private IUserDAO userDAO;
 
 public IUserDAO getUserDAO() {
  return userDAO;
 }

 public void setUserDAO(IUserDAO userDAO) {
  this.userDAO = userDAO;
 }

 public User isValidUser(String username, String password) {
  // TODO Auto-generated method stub
  User user = userDAO.findByUsername(username);
  if(user == null)
   return null;
  if(user.getUserPwd().equals(password))
   return user;
  return null;
 }

 public List findWithPage(int pageSize, int startRow) {
  // TODO Auto-generated method stub
  ArrayList list=new ArrayList();
  list=(ArrayList) userDAO.findWithPage(pageSize,startRow);
  return list;
 }

 public int counter() {
  // TODO Auto-generated method stub
  int counter=0;
  counter=userDAO.counter();
  return counter;
 }

}

说明:<br>、含演示数据库建立脚本(简单)<br>二、使用Struts、Hibernate和display超简单实现分页,你不用在页面上再写很多<%%>和很多判断,简单到只需要几行语句:<br><html:form method="post" action="/displayList"><br> <display:table name="lst" cellspacing="0" border="1" cellpadding="0" requestURI="displayList.do" export="true"><br> <display:column property="id" title="编号" /><br> <display:column property="name" title="名字" /><br> <display:column property="age" title="年龄" /><br> </display:table><br> <pag:pagination name="pv" requestUri="displayList.do"></pag:pagination><br></html:form><br>这就是全部语句,不用写任何代码。<br>三、由于使用了display,所以自动实现了Excel | XML | CSV 的导出功能。<br>四、生成页面导航的样式是:<br>[首页/前页] [后页/尾页] 显示第1到1条 共3项 每页显示2项 共3页 第1页 GO<br>其中每页显示2项中的项操作人员可以随便改,“第1页”中的页号可以随便改,操作相当的灵活。我看到的样式暂只这种,我想在display中应可以方便的改变导航样式,不行的话你就去修改display的标签源码,想改成什么样就改成什么样。<br><br>心得:<br>、今天才明白使用Hibernate还有个好处,你可以随便改数据库,你可以会用oracle,会用sqlserver,会用mysql,总之你写成的代码换种数据库,最多就是改下那几个xml文件,个人感觉这才是java个地方编写到处运行呢。<br>二、明白了使用标签的好处。<br><br>另提示点:<br>打开测试用“http://localhost:8080/StrutsHibernateDisplay/displayList.do”,如果直接打开list.jsp会告诉你没有数据的。<br><br>代码是wenlong342的,我只是稍做修改,然后写了上面的说明文字。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值