代碼未完善,後期再補
1. 通過數據庫訪問層BaseDao
1. 接口BaseDao
package com.dao;
import java.io.Serializable;
import java.util.List;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.SimpleExpression;
import com.domain.Page;
public interface BaseDao<T> {
void save(T t);
void update(T t);
void delete(T t);
T findById(Serializable id);
List<T> findAll();
List<T> findByCriteria(DetachedCriteria detachedCriteria);
int findCount(DetachedCriteria detachedCriteria);
int findCount(SimpleExpression... conditions);
List<T> findByPage(Page page,DetachedCriteria detachedCriteria);
List<T> findByPage(Page page,SimpleExpression... conditions);
int findCount(Object... paramValues);
List<T> findByPage(Page page,String hql,Object... paramValues);
}
1.2 實現類BaseDaoImpl
package com.dao.impl;
import java.io.Serializable;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.SimpleExpression;
import org.springframework.orm.hibernate5.HibernateCallback;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import com.dao.BaseDao;
import com.domain.Page;
public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T>{
private Class clazz;
public BaseDaoImpl() {
Class clazz = this.getClass();
Type type = clazz.getGenericSuperclass();
ParameterizedType pType = (ParameterizedType) type;
Type[] types = pType.getActualTypeArguments();
this.clazz = (Class) types[0];
}
@Override
public void save(T t) {
getHibernateTemplate().save(t);
}
@Override
public void update(T t) {
getHibernateTemplate().update(t);
}
@Override
public void delete(T t) {
getHibernateTemplate().delete(t);
}
@Override
public T findById(Serializable id) {
return (T) getHibernateTemplate().get(clazz, id);
}
@Override
public List<T> findAll() {
return (List<T>) getHibernateTemplate().find("from "+clazz.getSimpleName());
}
public DetachedCriteria getConditionCriteria(SimpleExpression... conditions){
DetachedCriteria dc=DetachedCriteria.forClass(clazz);
for (SimpleExpression se : conditions) {
if(se.getValue()==null)continue;
String className=se.getValue().getClass().getSimpleName();
if(className.equals("String")||className.equals("Character")){
if(!se.getValue().toString().matches("%?\\s*%?")){
dc.add(se);
}
}else{
dc.add(se);
}
}
return dc;
}
@Override
public List<T> findByCriteria(DetachedCriteria detachedCriteria) {
return (List<T>) getHibernateTemplate().findByCriteria(detachedCriteria);
}
@Override
public int findCount(DetachedCriteria detachedCriteria) {
detachedCriteria.setProjection(Projections.rowCount());
List<Long> list= (List<Long>) getHibernateTemplate().findByCriteria(detachedCriteria);
detachedCriteria.setProjection(null);
return list.size()>0?list.get(0).intValue():0;
}
@Override
public int findCount(SimpleExpression... conditions) {
return findCount(getConditionCriteria(conditions));
}
@Override
public List<T> findByPage(Page page,DetachedCriteria detachedCriteria) {
return (List<T>) getHibernateTemplate().findByCriteria(detachedCriteria, page.getBeginIndex(), page.getPageSize());
}
@Override
public List<T> findByPage(Page page, SimpleExpression... conditions) {
return findByPage(page, getConditionCriteria(conditions));
}
@Override
public List<T> findByPage(final Page page,final String hql,final Object... paramValues) {
return getHibernateTemplate().execute(new HibernateCallback<List<T>>() {
@Override
public List<T> doInHibernate(Session session) throws HibernateException {
Query query =session.createQuery(hql);
query.setFirstResult(page.getBeginIndex());
query.setMaxResults(page.getPageSize());
for(int i=0;i<paramValues.length;i++){
query.setParameter(i, paramValues[i]);
}
return query.list();
}
});
}
@Override
public int findCount(Object... paramValues) {
List<Long> list=(List<Long>)getHibernateTemplate().find("from "+clazz.getSimpleName(), paramValues);
return list.size()>0?list.get(0).intValue():0;
}
}
1.3 條件分頁簡單例子
public List<Book> findByPage(Page page, SimpleExpression... conditions) {
int count=bookDao.findCount(conditions);
page.setTotalCount(count);
return bookDao.findByPage(page, conditions);
}
public String page4(){
Page page=new Page(1,2);
SimpleExpression[] conditions=new SimpleExpression[]{
Restrictions.eq("category.category_id", book.getCategory().getCategory_id()),
Restrictions.like("book_name", book.getBook_name().trim(),MatchMode.ANYWHERE)
};
List<Book> bookList=bookService.findByPage(page, conditions);
for (Book book : bookList) {
System.out.println(book);
}
return NONE;
}