本人用SH4.0 实现了基本增删改查的操作
配置文件使用注解实现,直接省略,直接看代码
BaseDao的接口
package com.school.dao;
import java.io.Serializable;
import java.util.List;
import com.school.util.PageList;
/**
*
* @author Fandy
*
*/
public interface BaseDao {
/**
*
* @param hql
* @return
*/
<T> T findObject(String hql);
/**
*
* @param hql
* @param objects
* @return
*/
<T> T findObject(String hql, Object...objects);
/**
*
* @param cls
* @param id
* @return
*/
<T> T findObject(Class<T> cls, Serializable id);
/**
*
* @param sql
* @return
*/
<T> T findObjectBySql(String sql);
/**
*
* @param sql
* @param objects
* @return
*/
<T> T findObjectBySql(String sql, Object...objects);
/**
*
* @param hql
* @return
*/
<T> List<T> findList(String hql);
/**
*
* @param hql
* @param objects
* @return
*/
<T> List<T> findList(String hql, Object...objects);
/**
*
* @param cls
* @return
*/
<T> List<T> findList(Class<T> cls);
/**
*
* @param sql
* @return
*/
<T> List<T> findListBySql(String sql);
/**
*
* @param sql
* @param objects
* @return
*/
<T> List<T> findListBySql(String sql, Object...objects);
/**
*
* @param obj
*/
<T> void saveObject(T obj);
/**
*
* @param obj
*/
<T> void updateObject(T obj);
/**
*
* @param obj
*/
<T> void saveOrUpdateObject(T obj);
/**
*
* @param sql
* @return
*/
int executeSql(String sql);
/**
*
* @param sql
* @param objects
* @return
*/
int executeSql(String sql, Object...objects);
/**
*
* @param hql
* @return
*/
int coutObjects(String hql);
/**
*
* @param hql
* @param objects
* @return
*/
int countObjects(String hql, Object...objects);
/**
*
* @param hql
* @param page
* @param rows
* @return
*/
<T> PageList<T> findPageList(String hql, int page, int rows);
/**
*
* @param hql
* @param page
* @param rows
* @param objects
* @return
*/
<T> PageList<T> findPageList(String hql, int page, int rows, Object...objects);
}
BaseDao的实现类
package com.school.dao.impl;
/**
*
* @author Fandy
*
*/
import java.io.Serializable;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.school.dao.BaseDao;
import com.school.util.PageList;
@SuppressWarnings("unchecked")
@Repository("baseDao")
public class BaseDaoImpl implements BaseDao {
@Autowired
private SessionFactory sessionFactory;
Session getSession() {
return sessionFactory.getCurrentSession();
}
/*
* (non-Javadoc)
*
* @see com.school.dao.BaseDao#findObject(java.lang.String)
*/
@Override
public <T> T findObject(String hql) {
List<T> list = findList(hql);
return (null == list || list.size() == 0) ? null : list.get(0);
}
/*
* (non-Javadoc)
*
* @see com.school.dao.BaseDao#findObject(java.lang.String,
* java.lang.Object[])
*/
@Override
public <T> T findObject(String hql, Object... objects) {
List<T> list = findList(hql, objects);
return (null == list || list.size() == 0) ? null : list.get(0);
}
/*
* (non-Javadoc)
*
* @see com.school.dao.BaseDao#findObject(java.lang.Class,
* java.io.Serializable)
*/
@Override
public <T> T findObject(Class<T> cls, Serializable id) {
return (T) getSession().get(cls, id);
}
/*
* (non-Javadoc)
*
* @see com.school.dao.BaseDao#findObjectBySql(java.lang.String)
*/
@Override
public <T> T findObjectBySql(String sql) {
List<T> list = findListBySql(sql);
return (null == list || list.size() == 0) ? null : list.get(0);
}
/*
* (non-Javadoc)
*
* @see com.school.dao.BaseDao#findObjectBySql(java.lang.String,
* java.lang.Object[])
*/
@Override
public <T> T findObjectBySql(String sql, Object... objects) {
List<T> list = findListBySql(sql, objects);
return (null == list || list.size() == 0) ? null : list.get(0);
}
/*
* (non-Javadoc)
*
* @see com.school.dao.BaseDao#findList(java.lang.String)
*/
@Override
public <T> List<T> findList(String hql) {
Query query = getSession().createQuery(hql);
return query.list();
}
/*
* (non-Javadoc)
*
* @see com.school.dao.BaseDao#findList(java.lang.String,
* java.lang.Object[])
*/
@Override
public <T> List<T> findList(String hql, Object... objects) {
Query query = getSession().createQuery(hql);
setParameter(query, objects);
return query.list();
}
/*
* (non-Javadoc)
*
* @see com.school.dao.BaseDao#findList(java.lang.Class)
*/
@Override
public <T> List<T> findList(Class<T> cls) {
String hql = "FROM " + cls.getName();
return findList(hql);
}
/*
* (non-Javadoc)
*
* @see com.school.dao.BaseDao#findListBySql(java.lang.String)
*/
@Override
public <T> List<T> findListBySql(String sql) {
Query query = getSession().createSQLQuery(sql);
return query.list();
}
/*
* (non-Javadoc)
*
* @see com.school.dao.BaseDao#findListBySql(java.lang.String,
* java.lang.Object[])
*/
@Override
public <T> List<T> findListBySql(String sql, Object... objects) {
Query query = getSession().createSQLQuery(sql);
setParameter(query, objects);
return query.list();
}
/*
* (non-Javadoc)
*
* @see com.school.dao.BaseDao#saveObject(java.lang.Object)
*/
@Override
public <T> void saveObject(T obj) {
getSession().save(obj);
}
/*
* (non-Javadoc)
*
* @see com.school.dao.BaseDao#updateObject(java.lang.Object)
*/
@Override
public <T> void updateObject(T obj) {
getSession().update(obj);
}
/*
* (non-Javadoc)
*
* @see com.school.dao.BaseDao#saveOrUpdateObject(java.lang.Object)
*/
@Override
public <T> void saveOrUpdateObject(T obj) {
getSession().saveOrUpdate(obj);
}
/*
* (non-Javadoc)
*
* @see com.school.dao.BaseDao#executeSql(java.lang.String)
*/
@Override
public int executeSql(String sql) {
Query query = getSession().createSQLQuery(sql);
return query.executeUpdate();
}
/*
* (non-Javadoc)
*
* @see com.school.dao.BaseDao#executeSql(java.lang.String,
* java.lang.Object[])
*/
@Override
public int executeSql(String sql, Object... objects) {
Query query = getSession().createSQLQuery(sql);
setParameter(query, objects);
return query.executeUpdate();
}
/*
* (non-Javadoc)
*
* @see com.school.dao.BaseDao#coutObjects(java.lang.String)
*/
@Override
public int coutObjects(String hql) {
Query query = getSession().createQuery(hql);
ScrollableResults sr = query.scroll();
sr.last();
return sr.getRowNumber() == -1 ? 0 : sr.getRowNumber() + 1;
}
/*
* (non-Javadoc)
*
* @see com.school.dao.BaseDao#countObjects(java.lang.String,
* java.lang.Object[])
*/
@Override
public int countObjects(String hql, Object... objects) {
Query query = getSession().createQuery(hql);
setParameter(query, objects);
ScrollableResults sr = query.scroll();
sr.last();
return sr.getRowNumber() == -1 ? 0 : sr.getRowNumber() + 1;
}
/*
* (non-Javadoc)
*
* @see com.school.dao.BaseDao#findPageList(java.lang.String, int, int)
*/
@Override
public <T> PageList<T> findPageList(String hql, int page, int rows) {
Query query = getSession().createQuery(hql);
return findPageList(query, page, rows);
}
/*
* (non-Javadoc)
*
* @see com.school.dao.BaseDao#findPageList(java.lang.String, int, int,
* java.lang.Object[])
*/
@Override
public <T> PageList<T> findPageList(String hql, int page, int rows,
Object... objects) {
Query query = getSession().createQuery(hql);
setParameter(query, objects);
return findPageList(query, page, rows);
}
<T> PageList<T> findPageList(Query query, int page, int rows) {
ScrollableResults sr = query.scroll();
sr.last();
int count = sr.getRowNumber() == -1 ? 0 : sr.getRowNumber() + 1;
query.setFirstResult((page - 1) * rows);
query.setMaxResults(page * rows);
return new PageList<T>(page, rows, count, query.list());
}
void setParameter(Query query, Object... objects) {
for (int i = 0; i < objects.length; i++) {
query.setParameter(i, objects[i]);
}
}
}
所用到的PageList类
package com.school.util;
/**
* @author Fandy
*/
import java.util.List;
public class PageList<T> {
private int page;
private int rows;
private int total;
private List<T> list;
public PageList() {
super();
}
public PageList(int page, int rows, int total, List<T> list) {
super();
this.page = page;
this.rows = rows;
this.total = total;
this.list = list;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
public int size(){
return null==list?0:list.size();
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
}
这是我的第一篇文章,希望大家多多支持