ï»??xml version="1.0" encoding="utf-8" standalone="yes"?> Â Â
分页支挾c»ï¼š
import java.util.List;Â
public class PaginationSupport {Â
        public final static int PAGESIZE = 30;Â
        private int pageSize = PAGESIZE;Â
        private List items;Â
        private int totalCount;Â
        private int[] indexes = new int[0];Â
        private int startIndex = 0;Â
        public PaginationSupport(List items, int totalCount) {Â
                setPageSize(PAGESIZE);Â
                setTotalCount(totalCount);Â
                setItems(items);               Â
                setStartIndex(0);Â
        }Â
        public PaginationSupport(List items, int totalCount, int startIndex) {Â
                setPageSize(PAGESIZE);Â
                setTotalCount(totalCount);Â
                setItems(items);               Â
                setStartIndex(startIndex);Â
        }Â
        public PaginationSupport(List items, int totalCount, int pageSize, int startIndex) {Â
                setPageSize(pageSize);Â
                setTotalCount(totalCount);Â
                setItems(items);Â
                setStartIndex(startIndex);Â
        }Â
        public List getItems() {Â
                return items;Â
        }Â
        public void setItems(List items) {Â
                this.items = items;Â
        }Â
        public int getPageSize() {Â
                return pageSize;Â
        }Â
        public void setPageSize(int pageSize) {Â
                this.pageSize = pageSize;Â
        }Â
        public int getTotalCount() {Â
                return totalCount;Â
        }Â
        public void setTotalCount(int totalCount) {Â
                if (totalCount > 0) {Â
                        this.totalCount = totalCount;Â
                        int count = totalCount / pageSize;Â
                        if (totalCount % pageSize > 0)Â
                                count++;Â
                        indexes = new int[count];Â
                        for (int i = 0; i < count; i++) {Â
                                indexes[i] = pageSize * i;Â
                        }Â
                } else {Â
                        this.totalCount = 0;Â
                }Â
        }Â
        public int[] getIndexes() {Â
                return indexes;Â
        }Â
        public void setIndexes(int[] indexes) {Â
                this.indexes = indexes;Â
        }Â
        public int getStartIndex() {Â
                return startIndex;Â
        }Â
        public void setStartIndex(int startIndex) {Â
                if (totalCount <= 0)Â
                        this.startIndex = 0;Â
                else if (startIndex >= totalCount)Â
                        this.startIndex = indexes[indexes.length - 1];Â
                else if (startIndex < 0)Â
                        this.startIndex = 0;Â
                else {Â
                        this.startIndex = indexes[startIndex / pageSize];Â
                }Â
        }Â
        public int getNextIndex() {Â
                int nextIndex = getStartIndex() + pageSize;Â
                if (nextIndex >= totalCount)Â
                        return getStartIndex();Â
                elseÂ
                        return nextIndex;Â
        }Â
        public int getPreviousIndex() {Â
                int previousIndex = getStartIndex() - pageSize;Â
                if (previousIndex < 0)Â
                        return 0;Â
                elseÂ
                        return previousIndex;Â
        }Â
}
抽象业务¾c?java代ç :Â
* Created on 2005-7-12Â
*/Â
package com.javaeye.common.business;Â
import java.io.Serializable;Â
import java.util.List;Â
import org.hibernate.Criteria;Â
import org.hibernate.HibernateException;Â
import org.hibernate.Session;Â
import org.hibernate.criterion.DetachedCriteria;Â
import org.hibernate.criterion.Projections;Â
import org.springframework.orm.hibernate3.HibernateCallback;Â
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;Â
import com.javaeye.common.util.PaginationSupport;Â
public abstract class AbstractManager extends HibernateDaoSupport {Â
        private boolean cacheQueries = false;Â
        private String queryCacheRegion;Â
        public void setCacheQueries(boolean cacheQueries) {Â
                this.cacheQueries = cacheQueries;Â
        }Â
        public void setQueryCacheRegion(String queryCacheRegion) {Â
                this.queryCacheRegion = queryCacheRegion;Â
        }Â
        public void save(final Object entity) {Â
                getHibernateTemplate().save(entity);Â
        }Â
        public void persist(final Object entity) {Â
                getHibernateTemplate().save(entity);Â
        }Â
        public void update(final Object entity) {Â
                getHibernateTemplate().update(entity);Â
        }Â
        public void delete(final Object entity) {Â
                getHibernateTemplate().delete(entity);Â
        }Â
        public Object load(final Class entity, final Serializable id) {Â
                return getHibernateTemplate().load(entity, id);Â
        }Â
        public Object get(final Class entity, final Serializable id) {Â
                return getHibernateTemplate().get(entity, id);Â
        }Â
        public List findAll(final Class entity) {Â
                return getHibernateTemplate().find("from " + entity.getName());Â
        }Â
        public List findByNamedQuery(final String namedQuery) {Â
                return getHibernateTemplate().findByNamedQuery(namedQuery);Â
        }Â
        public List findByNamedQuery(final String query, final Object parameter) {Â
                return getHibernateTemplate().findByNamedQuery(query, parameter);Â
        }Â
        public List findByNamedQuery(final String query, final Object[] parameters) {Â
                return getHibernateTemplate().findByNamedQuery(query, parameters);Â
        }Â
        public List find(final String query) {Â
                return getHibernateTemplate().find(query);Â
        }Â
        public List find(final String query, final Object parameter) {Â
                return getHibernateTemplate().find(query, parameter);Â
        }Â
        public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria) {Â
                return findPageByCriteria(detachedCriteria, PaginationSupport.PAGESIZE, 0);Â
        }Â
        public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria, final int startIndex) {Â
                return findPageByCriteria(detachedCriteria, PaginationSupport.PAGESIZE, startIndex);Â
        }Â
        public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria, final int pageSize,Â
                        final int startIndex) {Â
                return (PaginationSupport) getHibernateTemplate().execute(new HibernateCallback() {Â
                        public Object doInHibernate(Session session) throws HibernateException {Â
                                Criteria criteria = detachedCriteria.getExecutableCriteria(session);Â
                                int totalCount = ((Integer) criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue();Â
                                criteria.setProjection(null);Â
                                List items = criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();Â
                                PaginationSupport ps = new PaginationSupport(items, totalCount, pageSize, startIndex);Â
                                return ps;Â
                        }Â
                }, true);Â
        }Â
        public List findAllByCriteria(final DetachedCriteria detachedCriteria) {Â
                return (List) getHibernateTemplate().execute(new HibernateCallback() {Â
                        public Object doInHibernate(Session session) throws HibernateException {Â
                                Criteria criteria = detachedCriteria.getExecutableCriteria(session);Â
                                return criteria.list();Â
                        }Â
                }, true);Â
        }Â
        public int getCountByCriteria(final DetachedCriteria detachedCriteria) {Â
                Integer count = (Integer) getHibernateTemplate().execute(new HibernateCallback() {Â
                        public Object doInHibernate(Session session) throws HibernateException {Â
                                Criteria criteria = detachedCriteria.getExecutableCriteria(session);Â
                                return criteria.setProjection(Projections.rowCount()).uniqueResult();Â
                        }Â
                }, true);Â
                return count.intValue();Â
        }Â
}Â
ps.getItems()得到已分™åµå¥½çš„结果集
ps.getIndexes()得到分页索引的数¾l?
ps.getTotalCount()得到æ€È»“果数
ps.getStartIndex()当å‰åˆ†é¡µç´¢å¼•
ps.getNextIndex()下一™å늃¦å¼?
ps.getPreviousIndex()上一™å늃¦å¼?
<!
DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<
hibernate-mapping
>
 Â
<
classÂ
name
="Tuser"
 table
="T_User"
>
   Â
<
idÂ
name
="id"
 column
="id"
 type
="java.lang.Integer"
>
     Â
<
generatorÂ
class
="native"
/>
   Â
</
id
>
   Â
<
propertyÂ
name
="name"
 column
="name"
 type
="java.lang.String"
/>
   Â
<!--
<property name="age" column="age" type="java.lang.Integer"/>
-->
   Â
<!--
<property name="email" column="email" type="EMailList"/>
-->
   Â
<!--
<property name="image" column="image" type="java.sql.Blob"/>
-->
   Â
<
propertyÂ
name
="resume"
 column
="resume"
 type
="clob"
/>
 Â
</
class
>
</
hibernate-mapping
>
復åˆä¸»éµ
<!DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<hibernate-mapping>
  <class name="TUser2" table="T_User2">
    <composite-id name="userPk" class="TUserPk">
      <key-property name="firstName" column="firstname" type="java.lang.String"/>
      <key-property name="lastName" column="lastname" type="java.lang.String"/>
    </composite-id>
    <property name="age" column="age" type="java.lang.Integer"/>   Â
  </class>
</hibernate-mapping>
DISCRIMINATOR
<!DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<hibernate-mapping>
  <class name="TItem" table="T_Item">
    <id name="id" column="id">
      <generator class="native"/>
    </id>
    <discriminator column="category" type="java.lang.String"/>
    <property name="manufacturer" column="manufacturer"/>
    <property name="name" column="name"/>   Â
    <subclass name="TBook" discriminator-value="1">
      <property name="pageCount" column="pagecount"/>
    </subclass>
    <subclass name="TDVD" discriminator-value="2">
      <property name="regionCode" column="regionCode"/>
    </subclass>
  </class>
</hibernate-mapping>
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"
>
<
hibernate-configuration
>
 Â
<
session-factory
>
   Â
<
propertyÂ
name
="hibernate.connection.url"
>
       jdbc:Microsoft:sqlserver://192.168.10.236:1433;databaseName=Sample
   Â
</
property
>
   Â
<
propertyÂ
name
="hibernate.connection.driver_class"
>
       com.microsoft.jdbc.sqlserver.SQLServerDriver
   Â
</
property
>
   Â
<
propertyÂ
name
="hibernate.connection.username"
>
       sa
   Â
</
property
>
   Â
<
propertyÂ
name
="hibernate.connection.password"
>
       55
   Â
</
property
>
   Â
<
propertyÂ
name
="dialect"
>
       org.hibernate.dialect.SQLServerDialect
   Â
</
property
>
   Â
<
propertyÂ
name
="hibernate.show_sql"
>
       true
   Â
</
property
>
   Â
<
propertyÂ
name
="hibernate.transaction.factory_class"
>
       org.hibernate.transaction.JDBCTransactionFactory
   Â
</
property
>
   Â
<
mappingÂ
resource
="TItem.hbm.xml"
/>
   Â
 Â
</
session-factory
>
</
hibernate-configuration
>
// 新增å為"Emma"的用戶記éŒ?br />Tuser user = new Tuser();
user.setName("Emma");
session.save(user);
Get
// å‡è¨T_User表ä¸å˜åœ¨ID = 1的記éŒ?br />Tuser user = (Tuser)session.get(Tuser.class, new Integer(1));
Delete
// å‡è¨T_User表ä¸å˜åœ¨ID = 1的記éŒ?br />Tuser user = (Tuser)session.get(Tuser.class, new Integer(1));
session.delete(user);
// 也å¯ä»¥é€šéŽHQL指定刪除æ¢äšg
Session.delete(" from Tuser where id = 1");
// 通éŽQuery接å£é€²æ–¼åŸºæ–¼HQL的刪除æ“ä½?br />Stirng hql = "delete Tuser where id = 1";
Query query = session.createQuery(hql);
query.executeUpdate();
Find
// 通éŽQuery接å£é€²è¡Œæ•¸æ“šæŸ¥è©¢
String hql="from Tuser user where user.name like ?";
Query query = session.createQuery(hql);
query.setParameter(0, "Cartier");
List list = query.list();
Iterator it = list.iterator();
while(it.hasNext()){
 Tuser user = (Tuser)it.next();
 System.out.println(user.getName());
}
// 通éŽCriteria接å£é€²è¡Œæ•¸æ“šæŸ¥è©¢
Criteria criteria = session.createCriteria(Tuser.class);
criteria.add(Expression.eq("name","Cariter"));
List list = criteria.list();
Iterator it = list.iterator();
while(it.hasNext()){
 Tuser user = (Tuser)it.next();
 System.out.println(user.getName());
}