标签:http java 使用 os io for art ar
本提供来自:点击链接加入群【J2EE开发(SSH+IntelliJ IDEA)】:http://jq.qq.com/?_wv=1027&k=QtFTMx
package com.mzq.dao;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.annotation.Resource;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.SessionFactoryUtils;
import org.springframework.orm.hibernate4.HibernateTemplate;
import org.springframework.util.Assert;
/**
* DAO基类,其它DAO可以直接继承这个DAO,不但可以复用共用的方法,还可以获得泛型的好处。
*/
public class BaseDao<T> {
private Class<T> entityClass;
private HibernateTemplate hibernateTemplate;
/**
* 通过反射获取子类确定的泛型类
*/
public BaseDao() {
Type genericSuperclass = getClass().getGenericSuperclass();
Type[] actualTypeArguments = ((ParameterizedType) genericSuperclass)
.getActualTypeArguments();
entityClass = (Class<T>) actualTypeArguments[0];
}
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
@Resource(name = "hibernateTemplate")
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
public Session getSession() {
return SessionFactoryUtils.getSession(
hibernateTemplate.getSessionFactory(), true);
}
/**
* 根据ID加载PO实例
*
* @param id
* @return 返回相应的持久化PO实例
*/
public T load(Serializable id) {
return (T) getHibernateTemplate().load(entityClass, id);
}
/**
* 根据ID获取PO实例
*
* @param id
* @return 返回相应的持久化PO实例
*/
public T get(Serializable id) {
return (T) getHibernateTemplate().get(entityClass, id);
}
/**
* 获取PO的所有对象
*
* @return
*/
public List<T> loadAll() {
return getHibernateTemplate().loadAll(entityClass);
}
/**
* 保存PO
*
* @param entity
*/
public void save(T entity) {
getHibernateTemplate().save(entity);
}
/**
* 删除PO
*
* @param entity
*/
public void delete(T entity) {
getHibernateTemplate().delete(entity);
}
/**
* 更改PO
*
* @param entity
*/
public void update(T entity) {
getHibernateTemplate().update(entity);
}
/**
* 执行HQL查询
*
* @param sql
* @return 查询结果
*/
public List find(String hql) {
return this.getHibernateTemplate().find(hql);
}
/**
* 执行带参的HQL查询
*
* @param sql
* @param params
* @return 查询结果
*/
public List find(String hql, Object... params) {
return this.getHibernateTemplate().find(hql, params);
}
/**
* 对延迟加载的实体PO执行初始化
*
* @param entity
*/
public void initialize(Object entity) {
this.getHibernateTemplate().initialize(entity);
}
/**
* 分页查询函数,使用hql.
*
* @param pageNo
* 页号,从1开始.
*/
public Page pagedQuery(String hql, int pageNo, int pageSize,
Object... values) {
Assert.hasText(hql);
Assert.isTrue(pageNo >= 1, "pageNo should start from 1");
// Count查询
String countQueryString = " select count (*) "
+ removeSelect(removeOrders(hql));
List countlist = getHibernateTemplate().find(countQueryString, values);
long totalCount = (Long) countlist.get(0);
if (totalCount < 1)
return new Page();
// 实际查询返回分页对象
int startIndex = Page.getStartOfPage(pageNo, pageSize);
Query query = createQuery(hql, values);
List list = query.setFirstResult(startIndex).setMaxResults(pageSize)
.list();
return new Page(startIndex, totalCount, pageSize, list);
}
/**
* 创建Query对象.
* 对于需要first,max,fetchsize,cache,cacheRegion等诸多设置的函数,可以在返回Query后自行设置.
* 留意可以连续设置,如下:
*
* <pre>
* dao.getQuery(hql).setMaxResult(100).setCacheable(true).list();
* </pre>
*
* 调用方式如下:
*
* <pre>
* dao.createQuery(hql)
* dao.createQuery(hql,arg0);
* dao.createQuery(hql,arg0,arg1);
* dao.createQuery(hql,new Object[arg0,arg1,arg2])
* </pre>
*
* @param values
* 可变参数.
*/
public Query createQuery(String hql, Object... values) {
Assert.hasText(hql);
Query query = getSession().createQuery(hql);
for (int i = 0; i < values.length; i++) {
query.setParameter(i, values[i]);
}
return query;
}
/**
* 去除hql的select 子句,未考虑union的情况,用于pagedQuery.
*
* @see #pagedQuery(String,int,int,Object[])
*/
private static String removeSelect(String hql) {
Assert.hasText(hql);
int beginPos = hql.toLowerCase().indexOf("from");
Assert.isTrue(beginPos != -1, " hql : " + hql
+ " must has a keyword ‘from‘");
return hql.substring(beginPos);
}
/**
* 去除hql的orderby 子句,用于pagedQuery.
*
* @see #pagedQuery(String,int,int,Object[])
*/
private static String removeOrders(String hql) {
Assert.hasText(hql);
Pattern p = Pattern.compile("order\\s*by[\\w|\\W|\\s|\\S]*",
Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(hql);
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, "");
}
m.appendTail(sb);
return sb.toString();
}
}
hibernate的dao模版代码,布布扣,bubuko.com
标签:http java 使用 os io for art ar
原文地址:http://my.oschina.net/moziqi/blog/297124