天天看点

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

今天终于实现了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;

public class UserDAO extends HibernateDaoSupport implements IUserDAO {

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

 protected void initDao() {

  //do nothing

 }

    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;

        }

    }

 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;

        }

    }

    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;

        }

    }

    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;

        }

    }   

    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;

        }

    }

    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;

        }

    }

    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;

 }

}