ssh开发base包中的Dao代码:
package com.base;
import java.io.Serializable;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import org.hibernate.criterion.DetachedCriteria;
public interface DAO {
/**
* 加载一个实体
* @param <T>
* @param entityClass
* @param entityid 主键
* @return
*/
public <T> T load(Class<T> entityClass, Serializable entityid) ;
/**
* 增加或修改实体
* @param <T>
* @param entity 实体
* @return
*/
public <T> T saveOrUpdate(T entity);
/**
* 保存指定实体
* @param entity 实体
*/
public <T> T save(T entity);
/**
* 批量保存指定的实体集合
* @param <T>
* @param entities 实体集和
* @return
*/
public <T> Collection<T> save(Collection<T> entities);
/**
* 删除指定实体
* @param <T>
* @param entity 实体
*/
public <T> T delete(T entity);
/**
* 批量删除指定的实体集合
* @param <T>
* @param entities 实体集合
*/
public <T> Collection<T> delete(Collection<T> entities);
/**
* 更新指定操作
* @param entity 实体
*/
public <T> T update(T entity);
/**
* 获取指定id的实体
* @param <T>
* @param entityClass
* @param entityid 实体的主键
* @return
*/
public <T> T get(Class<T> entityClass, Serializable entityid);
/**
* 获取列表,相当于打开某个对象对应的数据表
* @param <T>
* @param entityClass
* @return 对象列表
*/
public <T> List<T> find(Class<T> entityClass);
/**
* 根据SQL语句执行查询语句.
* 示例:
* xxx.find("from bean.User")
* 返回所有User对象
* @param <T>
* @param queryString 完整的查询语句
* @return
*/
public <T> List<T> find(String queryString);
/**
* 根据SQL语句执行查询语句
* 示例:
* xxx.find("from bean.User o where o.name=?","test");
* 或模糊查询:
* xxx.find("from bean.User o where o.name like ?", "%test%");
* 返回name属性值为test的对象(模糊查询, 返回name属性值包含test的对象)
* @param <T>
* @param queryString 完整的查询语句
* @param value 参数
* @return
*/
public <T> List<T> find(String queryString, Object value);
/**
* 根据SQL语句执行查询语句
* 示例:
* String hql= "from bean.User u where u.name=? and u.password=?"
* xxx.find(hql, new String[]{"test", "123"});
* 返回用户名为test并且密码为123的所有User对象
* @param <T>
* @param queryString 完整的查询语句
* @param values 参数集合
* @return
*/
public <T> List<T> find(String queryString, Object[] values);
public <T> List<T> find(Class<T> entityClass, String wherehql);
/**
* 查询操作
* 示例:
* XXXService.find(Entity.class, "where o.property1=?", newObject[]{1});
* @param <T>
* @param entityClass 实体类
* @param wherehql 部分条件语句
* @param queryParam 查询参数
* @return
*/
public <T> List<T> find(Class<T> entityClass, String wherehql, Object queryParam);
/**
* 查询操作
* 示例:
* XXXService.find(Entity.class,"where o.property1=? and o.property2=?", new Object[]{1, 2});
* @param <T>
* @param entityClass 实体类
* @param wherehql 条件语句
* @param queryParams 查询参数集合
* @return
*/
public <T> List<T> find(Class<T> entityClass, String wherehql, Object[] queryParams);
/**
* 查询操作
* 示例:
* User u=new User();
* u.setPassword("123");//必须 符合的条件但是这两个条件时并列的(象当于sql中的and)
* u.setName("bb");
* list=this.getHibernateTemplate().findByExample(u,start,max);
* 返回:用户名为bb密码为123的对象
* @param <T>
* @param exampleEntity
* @return
*/
public <T> List<T> findByExample(T exampleEntity);
/**
* 查询操作
* 示例:
* HibernateTemplate ht=this.getHibernateTemplate();
* DetachedCriteria criteria=DetachedCriteria.forClass(Paper.class);
* ht.findByCriteria(criteria);
* criteria可以使用add()方法添加我们需要的查询条件,就好比SQL语句中的where条件语句
* 而add()方法可以使用Restrictions类的静态方法返回值作为参数.
* 示例:
* criteria.add(Restrictions.in("TExams", examsList)).add(Restrictions.eq("patype", 0));
* @param <T>
* @param entityClass
* @param criteria
* @return
*/
public <T> List<T> findByCriteria(Class<T> entityClass, DetachedCriteria criteria);
/**
* 查询操作
* 使用以下语句查询:
* String queryString = "select count(*) from bean.User u where u.name=:myName";
* String paramName= "myName";
* String value= "xiyue";
* this.getHibernateTemplate().findByNamedParam(queryString, paramName, value);
* System.out.println(list.get(0));
* 返回name为xiyue的User对象的条数
* @param <T>
* @param queryString 查询语句
* @param paramName 参数名
* @param value 参数
* @return
*/
public <T> List<T> findByNamedParam(String queryString, String paramName, Object value);
/**
* 查询操作
* 示例:
* String queryString = "select count(*) from bean.User u where u.name=:myName and u.password=:myPassword";
* String[] paramName= new String[]{"myName", "myPassword"};
* String[] value= new String[]{"xiyue", "123"};
* this.getHibernateTemplate().findByNamedParam(queryString, paramName, value);
* 返回用户名为xiyue密码为123的User对象
* @param <T>
* @param queryString 查询语句
* @param paramNames 参数名集合
* @param values 参数值集合
* @return
*/
public <T> List<T> findByNamedParam(String queryString, String[] paramNames, Object[] values);
/**
* 查询操作
* 示例:
* 1、首先需要在User.hbm.xml中定义命名查询
* <hibernate-mapping>
* <class>......</class>
* <query name="queryAllUser"><!--此查询被调用的名字-->
* <![CDATA[
* from bean.User
* ]]>
* </query>
* </hibernate-mapping>
* 2、如下使用查询:
* this.getHibernateTemplate().findByNamedQuery("queryAllUser");
* @param <T>
* @param queryName
* @return
*/
public <T> List<T> findByNamedQuery(String queryName);
/**
* 查询操作
* 示例:
* 1、首先需要在User.hbm.xml中定义命名查询
* <hibernate-mapping>
* <class>......</class>
* <query name="queryByName"><!--此查询被调用的名字-->
* <![CDATA[
* from bean.User u where u.name = ?
* ]]>
* </query>
* </hibernate-mapping>
* 2、如下使用查询:
* this.getHibernateTemplate().findByNamedQuery("queryByName", "test");
* @param <T>
* @param queryName
* @param value
* @return
*/
public <T> List<T> findByNamedQuery(String queryName, Object value);
/**
* 查询操作
* 示例:
* 1、首先需要在User.hbm.xml中定义命名查询
* <hibernate-mapping>
* <class>......</class>
* <query name="queryByNameAndPassword"><!--此查询被调用的名字-->
* <![CDATA[
* from bean.User u where u.name =? and u.password =?
* ]]>
* </query>
* </hibernate-mapping>
* 2、如下使用查询:
* String[] values= new String[]{"test", "123"};
* this.getHibernateTemplate().findByNamedQuery("queryByNameAndPassword" , values);
* @param <T>
* @param queryName
* @param value
* @return
*/
public <T> List<T> findByNamedQuery(String queryName, Object[] values);
/**
* 查询操作
* 示例:
* 1、首先需要在User.hbm.xml中定义命名查询
* <hibernate-mapping>
* <class>......</class>
* <query name="queryByName"><!--此查询被调用的名字-->
* <![CDATA[
* from bean.User u where u.name =:myName
* ]]>
* </query>
* </hibernate-mapping>
* 2、如下使用查询:
* this.getHibernateTemplate().findByNamedQuery("queryByName" , "myName", "test");
* @param <T>
* @param queryName
* @param value
* @return
*/
public <T> List<T> findByNamedQueryAndNamedParam(String queryName, String paramName, Object value);
/**
* 查询操作
* 示例:
* 1、首先需要在User.hbm.xml中定义命名查询
* <hibernate-mapping>
* <class>......</class>
* <query name="queryByNameAndPassword"><!--此查询被调用的名字-->
* <![CDATA[
* from bean.User u where u.name =:myName and u.password=:myPassword
* ]]>
* </query>
* </hibernate-mapping>
* 2、如下使用查询:
* String[] names= new String[]{"myName", "myPassword"};
* String[] values= new String[]{"test", "123"};
* this.getHibernateTemplate().findByNamedQuery("queryByNameAndPassword" , names, values);
* @param <T>
* @param queryName
* @param value
* @return
*/
public <T> List<T> findByNamedQueryAndNamedParam(String queryName, String[] paramNames, Object[] values);
/**
* 查询操作
* 示例:
* 1、定义一个ValueBean, 属性名必须和HSQL语句中的:后面的变量名同名,
* 此处必须至少有两个属性, 分别为myName和myPassword, 使用setter方法设置属性值后
* ValueBean valueBean= new ValueBean();
* valueBean.setMyName("test");
* valueBean.setMyPasswrod("123");
* 2、
* String queryString= "from bean.User u where u.name=:myName and u.password=:myPassword";
* this.getHibernateTemplate().findByValueBean(queryString , valueBean);
* @param <T>
* @param queryString
* @param value
* @return
*/
public <T> List<T> findByValueBean(String queryString , Object valueBean);
/**
* 查询操作
* 示例:
* 1、首先需要在User.hbm.xml中定义命名查询
* <hibernate-mapping>
* <class>......</class>
* <query name="queryByNameAndPassword"><!--此查询被调用的名字-->
* <![CDATA[
* from bean.User u where u.name =:myName and u.password=:myPassword
* ]]>
* </query>
* </hibernate-mapping>
* 2、定义一个ValueBean, 属性名必须和User.hbm.xml命名查询语句中的:
* 后面的变量名同名, 此处必须至少有两个属性, 分别为myName和myPassword, 使用setter方法设置属性值后
* ValueBean valueBean= new ValueBean();
* valueBean.setMyName("test");
* valueBean.setMyPasswrod("123");
* 3、
* String queryString= "from bean.User u where u.name=:myName and u.password=:myPassword";
* this.getHibernateTemplate().findByNamedQueryAndValueBean("queryByNameAndPassword", valueBean);
* @param <T>
* @param queryName
* @param value
* @return
*/
public <T> List<T> findByNamedQueryAndValueBean(String queryName, Object valueBean);
//分页查询///
/**
* 获取查询总记录数
* @param <T>
* @param entityClass
* @param wheresql
* @return
*/
public <T> long getQueryCount(Class<T> entityClass, String wheresql, Object[] queryParams);
/**
* 获取查询总记录数
* @param <T>
* @param entityClass
* @param criteria
* @return
*/
public <T> long getQueryCount(Class<T> entityClass, DetachedCriteria criteria);
/**
* 分页查询
* @param <T>
* @param criteria
* @param firstResult
* @param maxResults
* @return
*/
public <T> QueryResult<T> getScrollData(DetachedCriteria criteria, int firstResult, int maxResults);
/**
* 分页查询, 无法排序
* 示例:
* User u=new User();
* u.setPassword("123");//必须 符合的条件但是这两个条件时并列的(象当于sql中的and)
* u.setName("bb");
* list=this.getHibernateTemplate().findByExample(u,start,max);
* 返回:满足用户名为bb密码为123,自start起共max个User对象。(对象从0开始计数)
* @param <T>
* @param exampleEntity
* @param firstResult
* @param maxResults
* @return
*/
public <T> QueryResult<T> getScrollData(T exampleEntity, int firstResult, int maxResults);
/**
* 分页查询.
*
* @param <T>
* @param entityClass
* 实体类
* @param firstIndex
* 第一条记录位置
* @param maxResult
* 查询记录数
* @param orderby
* 排序 key=实体属性, value=desc/asc
* @param wherehql
* where语句
* @param queryParams
* 查询参数
* @return
*/
public <T> QueryResult<T> getScrollData(Class<T> entityClass, int firstResult, int maxResult, String wherehql, Object[] queryParams,
LinkedHashMap<String, String> orderby);
/**
* 获取分页数据
*
* @param <T>
* @param entityClass
* 实体类
* @param firstIndex
* 第一条记录位置
* @param maxResult
* 查询记录数
* @param wherehql
* where语句
* @param queryParams
* 查询参数
* @return
*/
public <T> QueryResult<T> getScrollData(Class<T> entityClass, int firstIndex, int maxResult, String wherehql, Object[] queryParams);
/**
* 获取分页数据
*
* @param <T>
* @param entityClass
* 实体类
* @param firstIndex
* 第一条记录位置
* @param maxResult
* 查询记录数
* @param orderby
* 排序 key=实体属性, value=desc/asc
* @return
*/
public <T> QueryResult<T> getScrollData(Class<T> entityClass, int firstIndex, int maxResult, LinkedHashMap<String, String> orderby);
/**
* 获取分页数据
*
* @param <T>
* @param entityClass
* 实体类
* @param firstIndex
* 第一条记录位置
* @param maxResult
* 查询记录数
* @return
*/
public <T> QueryResult<T> getScrollData(Class<T> entityClass, int firstIndex, int maxResult);
/**
* 获取全部
*
* @param <T>
* @param entityClass
* 实体类
* @return
*/
public <T> QueryResult<T> getScrollData(Class<T> entityClass);
/**
* 执行HQL语句
* @param hql
*/
public void executeHQL(String hql) ;
/**
* 执行HQL语句
* @param hql
* @param params
*/
public void executeHQL(String hql, Object[] params) ;
public void backUpDB();
}
ssh中的继承HibernateDaoSupport并实现Dao的接口代码:
package com.base;
import java.io.Serializable;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import javax.persistence.Entity;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Projections;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public abstract class DaoSupport extends HibernateDaoSupport implements DAO {
public <T> T load(Class<T> entityClass, Serializable entityid) {
return (T) this.getHibernateTemplate().load(entityClass, entityid);
}
public <T> T saveOrUpdate(T entity) {
this.getHibernateTemplate().saveOrUpdate(entity);
return entity;
}
public <T> Collection<T> delete(Collection<T> entities) {
this.getHibernateTemplate().deleteAll(entities);
return entities;
}
public <T> T delete(T entity) {
this.getHibernateTemplate().delete(entity);
return entity;
}
@SuppressWarnings("unchecked")
public <T> List<T> find(Class<T> entityClass, String wherehql) {
StringBuffer hql = new StringBuffer("from "
+ this.getEntityName(entityClass) + " o ");
hql.append(wherehql);
List<T> list = this.getHibernateTemplate().find(hql.toString());
return list;
}
@SuppressWarnings("unchecked")
public <T> List<T> find(Class<T> entityClass, String wherehql,
Object queryParam) {
StringBuffer hql = new StringBuffer("from "
+ this.getEntityName(entityClass) + " o ");
hql.append(wherehql);
List<T> list = this.getHibernateTemplate().find(hql.toString(),
queryParam);
return list;
}
@SuppressWarnings("unchecked")
public <T> List<T> find(Class<T> entityClass, String wherehql,
Object[] queryParams) {
StringBuffer hql = new StringBuffer("from "
+ this.getEntityName(entityClass) + " o ");
hql.append(wherehql);
List<T> list = this.getHibernateTemplate().find(hql.toString(),
queryParams);
return list;
}
@SuppressWarnings("unchecked")
public <T> List<T> find(String queryString, Object value) {
List<T> list = this.getHibernateTemplate().find(queryString, value);
return list;
}
@SuppressWarnings("unchecked")
public <T> List<T> find(String queryString, Object[] values) {
List<T> list = this.getHibernateTemplate().find(queryString, values);
return list;
}
@SuppressWarnings("unchecked")
public <T> List<T> find(String queryString) {
List<T> list = this.getHibernateTemplate().find(queryString);
return list;
}
@SuppressWarnings("unchecked")
public <T> List<T> find(Class<T> entityClass) {
StringBuffer hql = new StringBuffer("from "
+ this.getEntityName(entityClass));
List<T> list = this.getHibernateTemplate().find(hql.toString());
return list;
}
@SuppressWarnings("unchecked")
public <T> List<T> findByCriteria(Class<T> entityClass,
DetachedCriteria criteria) {
List<T> list = this.getHibernateTemplate().findByCriteria(criteria);
return list;
}
@SuppressWarnings("unchecked")
public <T> List<T> findByExample(T exampleEntity) {
List<T> list = this.getHibernateTemplate().findByExample(exampleEntity);
return list;
}
@SuppressWarnings("unchecked")
public <T> List<T> findByNamedParam(String queryString, String paramName,
Object value) {
List<T> list = this.getHibernateTemplate().findByNamedParam(
queryString, paramName, value);
return list;
}
@SuppressWarnings("unchecked")
public <T> List<T> findByNamedParam(String queryString,
String[] paramNames, Object[] values) {
List<T> list = this.getHibernateTemplate().findByNamedParam(
queryString, paramNames, values);
return list;
}
@SuppressWarnings("unchecked")
public <T> List<T> findByNamedQuery(String queryName, Object value) {
List<T> list = this.getHibernateTemplate().findByNamedQuery(queryName,
value);
return list;
}
@SuppressWarnings("unchecked")
public <T> List<T> findByNamedQuery(String queryName, Object[] values) {
List<T> list = this.getHibernateTemplate().findByNamedQuery(queryName,
values);
return list;
}
@SuppressWarnings("unchecked")
public <T> List<T> findByNamedQuery(String queryName) {
List<T> list = this.getHibernateTemplate().findByNamedQuery(queryName);
return list;
}
@SuppressWarnings("unchecked")
public <T> List<T> findByNamedQueryAndNamedParam(String queryName,
String paramName, Object value) {
List<T> list = this.getHibernateTemplate()
.findByNamedQueryAndNamedParam(queryName, paramName, value);
return list;
}
@SuppressWarnings("unchecked")
public <T> List<T> findByNamedQueryAndNamedParam(String queryName,
String[] paramNames, Object[] values) {
List<T> list = this.getHibernateTemplate()
.findByNamedQueryAndNamedParam(queryName, paramNames, values);
return list;
}
@SuppressWarnings("unchecked")
public <T> List<T> findByNamedQueryAndValueBean(String queryName,
Object valueBean) {
List<T> list = this.getHibernateTemplate()
.findByNamedQueryAndValueBean(queryName, valueBean);
return list;
}
@SuppressWarnings("unchecked")
public <T> List<T> findByValueBean(String queryString, Object valueBean) {
List<T> list = this.getHibernateTemplate().findByValueBean(queryString,
valueBean);
return list;
}
public <T> T get(Class<T> entityClass, Serializable entityid) {
return (T) this.getHibernateTemplate().get(entityClass, entityid);
}
public <T> long getQueryCount(Class<T> entityClass, String wheresql,
Object[] queryParams) {
Session session = this.getSession();
Query query = session.createQuery("select count(*) from "
+ this.getEntityName(entityClass) + " o "
+ (wheresql == null ? "" : wheresql));
this.setQueryParams(query, queryParams);
Long result = (Long) query.uniqueResult();
return result;
}
public <T> long getQueryCount(Class<T> entityClass,
DetachedCriteria detachedCriteria) {
Criteria criteria = detachedCriteria.getExecutableCriteria(this
.getSession());
int totalCount = ((Integer) criteria.setProjection(
Projections.rowCount()).uniqueResult()).intValue();
return new Long(totalCount);
}
public <T> QueryResult<T> getScrollData(Class<T> entityClass,
int firstIndex, int maxResult, LinkedHashMap<String, String> orderby) {
return this.getScrollData(entityClass, firstIndex, maxResult, null,
null, orderby);
}
@SuppressWarnings("unchecked")
public <T> QueryResult<T> getScrollData(Class<T> entityClass,
int firstResult, int maxResult, String wherehql,
Object[] queryParams, LinkedHashMap<String, String> orderby) {
Session session = this.getSession();
QueryResult<T> qr = new QueryResult<T>();
String entityName = this.getEntityName(entityClass);
Query query = session.createQuery("select o from " + entityName + " o "
+ (wherehql == null ? "" : wherehql)
+ this.buildOrderby(orderby));
// 分页查询
if (-1 != firstResult && -1 != maxResult)
query.setFirstResult(firstResult).setMaxResults(maxResult);
// else, 否则查询全部
this.setQueryParams(query, queryParams);
List<T> list = query.list();
qr.setResultList(list);
return qr;
}
public <T> QueryResult<T> getScrollData(Class<T> entityClass,
int firstIndex, int maxResult, String wherehql, Object[] queryParams) {
return this.getScrollData(entityClass, firstIndex, maxResult, wherehql,
queryParams, null);
}
public <T> QueryResult<T> getScrollData(Class<T> entityClass,
int firstIndex, int maxResult) {
return this.getScrollData(entityClass, firstIndex, maxResult, null);
}
public <T> QueryResult<T> getScrollData(Class<T> entityClass) {
return this.getScrollData(entityClass, -1, -1);
}
@SuppressWarnings("unchecked")
public <T> QueryResult<T> getScrollData(DetachedCriteria criteria,
int firstResult, int maxResults) {
QueryResult<T> result = new QueryResult<T>();
List<T> list = this.getHibernateTemplate().findByCriteria(criteria,
firstResult, maxResults);
result.setResultList(list);
return result;
}
@SuppressWarnings("unchecked")
public <T> QueryResult<T> getScrollData(T exampleEntity, int firstResult,
int maxResults) {
QueryResult<T> result = new QueryResult<T>();
List<T> list = this.getHibernateTemplate().findByExample(exampleEntity,
firstResult, maxResults);
result.setResultList(list);
return result;
}
public <T> Collection<T> save(Collection<T> entities) {
this.getHibernateTemplate().saveOrUpdateAll(entities);
return entities;
}
public <T> T save(T entity) {
this.getHibernateTemplate().save(entity);
return entity;
}
public <T> T update(T entity) {
this.getHibernateTemplate().update(entity);
return entity;
}
public void executeHQL(String hql) {
this.executeHQL(hql, null);
}
public void executeHQL(String hql, Object[] params) {
Session session = this.getSession();
Query query = session.createQuery(hql);
if (null != params)
this.setQueryParams(query, params);
query.executeUpdate();
}
/**
* 获取实体名称
*
* @param <T>
* @param entityClass
* 实体�?
* @return
*/
protected <T> String getEntityName(Class<T> entityClass) {
String entityName = entityClass.getSimpleName();
Entity entity = entityClass.getAnnotation(Entity.class);
if (entity != null && entity.name() != null && entity.name().isEmpty()) {
entityName = entity.name();
}
return entityName;
}
/**
* 组装order by语句
*
* @param orderby
* @return
*/
protected String buildOrderby(LinkedHashMap<String, String> orderby) {
StringBuffer orderbysql = new StringBuffer();
if (null != orderby && orderby.size() > 0) {
orderbysql.append(" order by ");
for (String key : orderby.keySet()) {
orderbysql.append("o.").append(key).append(" ")
.append(orderby.get(key)).append(",");
}
orderbysql.deleteCharAt(orderbysql.length() - 1);
}
return orderbysql.toString();
}
/**
* 设置查询参数
*
* @param query
* @param queryParams
*/
protected void setQueryParams(Query query, Object[] queryParams) {
if (null != queryParams && queryParams.length > 0) {
for (int i = 0; i < queryParams.length; i++) {
query.setParameter(i, queryParams[i]);
}
}
}
public void backUpDB() {
String sql = "BACKUP DATABASE wspj TO DISK ='C:/wspj.bak' with init";
this.getSession().createSQLQuery(sql).executeUpdate();
}
}