package dao;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.StatelessSession;
import org.hibernate.Transaction;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.orm.hibernate3.SessionFactoryUtils;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import eo.common.PageResult;
public class BaseUserDao extends HibernateDaoSupport {
/** log4j instance. */
private Logger log = Logger.getLogger(this.getClass());
//private Connection con;
// private SimpleJdbcTemplate jdbcTemplate ;
/**
* 获取多条数据
* @param sql 查询语句
* @return 查询结果
*/
@SuppressWarnings("unchecked")
List find(String sql) {
this.logParams(sql,null);
return getHibernateTemplate().find(sql);
}
/**
* 带有参数查询,获取多条数�?
* @param sql 查询语句
* @param parms 查询参数
* @return 查询结果
*/
@SuppressWarnings("unchecked")
List find(String sql, Object[] parms) {
logParams(sql, parms);
return getHibernateTemplate().find(sql, parms);
}
/**
* 带有参数查询,获取�?�的记录�?
* @param hql 查询语句
* @param parms 查询参数�?
* @return 记录�?
*/
long getRecordsCount(String hql, Object... parms) {
logParams(hql, parms);
Query queryCount = getSession().createQuery("select count(*) " + hql);
if (parms != null) {
for (int i = 0; i < parms.length; i++) {
queryCount.setParameter(i, parms[i]);
}
}
long totalRecords = -1;
Object count = queryCount.iterate().next();
if (count != null) {
totalRecords = ((Long) count).longValue();
}
return totalRecords;
}
/**
* 根据jdbcSql得到记录总数
* @param sql
* @param params
* @return
* @throws Exception
*/
long getCountsWithSql(String sql, Object... params) {
logParams(sql, params);
Query queryCount = getSession().createQuery(sql);
if (params != null) {
for (int i = 0; i < params.length; i++) {
queryCount.setParameter(i, params[i]);
}
}
long totalRecords = -1;
Object count = queryCount.iterate().next();
if (count != null) {
totalRecords = ((Long) count).longValue();
}
return totalRecords;
}
/**
* 查询结果是一个字符串.
* @param hsql 查询语句
* @return 单个字符�?
*/
@SuppressWarnings("unchecked")
String getSingleHSQLString(String hsql) {
Iterator it = getHibernateTemplate().iterate(hsql);
if (it.hasNext()) {
Object l = (Object) it.next();
if (l != null) {
return l.toString();
}
}
return null;
}
/**
* 获取单条数据
* @param clazz Class
* @param s Serializable
* @return Object
*/
@SuppressWarnings("unchecked")
Object getSingleObject(Class clazz, Serializable s) {
return getHibernateTemplate().get(clazz, s);
}
/**
* 获取单条数据
* @param clazz Class
* @param s Serializable
* @return Object
*/
@SuppressWarnings("unchecked")
Object loadSingleObject(Class clazz, Serializable s) {
return getHibernateTemplate().load(clazz, s);
}
/**
* 增加记录
* @param obj 待保存对�?
*/
void saveSingleObject(Object obj) {
getHibernateTemplate().save(obj);
}
/**
* 增加或�?�修改记�?
* @param obj 待保存或修改对象
*/
void saveOrUpdateSingleObject(Object obj) {
getHibernateTemplate().saveOrUpdate(obj);
}
/**
* 批量增加或�?�修改记�?
* @param obj 待保存或修改对象
*/
@SuppressWarnings("unchecked")
void saveOrUpdateAll(Collection obj) {
getHibernateTemplate().saveOrUpdateAll(obj);
}
/**
* 修改记录
* @param obj 待修改对�?
*/
void update(Object obj) {
getHibernateTemplate().update(obj);
}
/**
* 删除记录
* @param obj 待删除对�?
*/
void delete(Object obj) {
getHibernateTemplate().delete(obj);
}
/**
* 删除�?选记�?
* @param obj 待删除对象集�?
*/
@SuppressWarnings("unchecked")
void deleteAll(Collection obj) {
getHibernateTemplate().deleteAll(obj);
}
/**
* 根据JDBC得到查询出来的一个�??.
* @param sql
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
Object getCountByJDBCsql(String sql,Object...params) {
Object totalRecords =null;
this.logParams(sql, params);
Query query = getSession().createSQLQuery(sql);
if (params != null) {
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
}
List lst = query.list();
if (lst.size()>0) {
totalRecords = (Object) lst.get(0);
}
return totalRecords;
}
/**
* 根据JDBC得到查询出来的一个�??.
* @param sql
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
List getListByJDBChSql(String sql,Object...params) throws Exception {
this.logParams(sql, params);
Query query = getSession().createSQLQuery(sql);
if (params != null) {
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
}
List lst = query.list();
return lst;
}
/**
* 得到翻页结果
* @param sql
* 查询语句
* @param params
* 客户端Dao类查询参�?
* @return 翻页结果
*/
@SuppressWarnings("unchecked")
PageResult getListByPagination(String sql, int startPage, int pageTotal,
Object... params) {
//打印信息.
logParams(sql, params);
Query query = getSession().createQuery(sql);
Query queryCount = null;
queryCount = getSession().createQuery("select count(*) " + sql);
if (params != null) {
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
queryCount.setParameter(i, params[i]);
}
}
int totalRecords = (int) ((Long) queryCount.iterate().next())
.intValue();
query.setFirstResult((startPage - 1) * pageTotal);
query.setMaxResults(pageTotal);
List list = query.list();
return new PageResult(totalRecords, list);
}
/**
* 打印参数信息
* @param finalSQL 查询sql语句
* @param params 客户端Dao类查询参�?
* @param ps PagedStatement
*/
private void logParams(String finalSQL, Object[] params) {
/************打印调试信息�?�?*****************/
log.info("finalSQL:" + finalSQL);
if (params != null) {
for (Object o : params) {
log.info("params :" + o);
}
}
/************打印调试信息结束*****************/
}
/**
* 无状态批量删除数据,用于单独的批量删除操作,暂时不能和其它业务统�?进行事务处理
* @param entity 实体BEAN
* @param idValues 主健值集�?
*/
@SuppressWarnings("unchecked")
void batchDeleteData(Class entity, Collection idValues) {
String tableName = AnnotationUtils.getMappedTableName(entity);
String keyColumnName = AnnotationUtils.getMappedKeyColumnName(entity);
StatelessSession session = getSessionFactory().openStatelessSession();
String finalSQL = "delete from " + tableName + " where "
+ keyColumnName + " = :value";
Query query = session.createSQLQuery(finalSQL);
Transaction ta = session.getTransaction();
ta.begin();
for (Object ob : idValues) {
query.setParameter("value", ob);
query.executeUpdate();
}
ta.commit();
session.close();
}
int deleteWithJDBCsqL(String sql,Object...params ) {
SimpleJdbcTemplate jdbcTemplate= this.connection();
this.logParams(sql, params);
int a = jdbcTemplate.update(sql, params);
return a;
}
/**
* 根据sql语句来进行update操作
* @param sql 传统的jdbc sql语句
* @param params 问号参数数组
* @return 更新的记录数�?
*/
int updateWithJdbcSql(String sql, Object... params) {
int c = -1;
this.logParams(sql, params);
SimpleJdbcTemplate jdbcTemplate= this.connection();
c = jdbcTemplate.update(sql, params);
log.info("updateWithSql更改的记录数量为�?" + c);
return c;
}
/**
* 根据sql语句来进行update操作
* @param sql 传统的jdbc sql语句
* @param params 问号参数数组
* @return 更新的记录数�?
*/
int updateOldWithJdbcSql(String sql, Object... params) {
int c = -1;
this.logParams(sql, params);
Query query = this.getSession().createSQLQuery(sql);
if (params != null) {
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
}
c = query.executeUpdate();
log.debug("updateWithSql更改的记录数量为�?" + c);
return c;
}
/**
* 根据hql语句来进行update操作
* @param hql hql语句
* @param params 问号参数数组
* @return 更新的记录数�?
*/
int updateWithHibernateHql(String hql, Object... params) {
int c = -1;
this.logParams(hql, params);
Query query = getSession().createQuery(hql);
if (params != null) {
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
}
c = query.executeUpdate();
log.debug("updateWithHql更改的记录数量为�?" + c);
return c;
}
/***
* 得到数据库的连接.
* @return
* @throws SQLException
*/
private SimpleJdbcTemplate connection() {
//if (con ==null || con.isClosed()){
SimpleJdbcTemplate jdbcTemplate =
new SimpleJdbcTemplate(SessionFactoryUtils.getDataSource(getSessionFactory()));
//con =SessionFactoryUtils.getDataSource(this.getSessionFactory()).getConnection();
return jdbcTemplate;
}
int delete(String hql, Object... params) {
logParams(hql, params);
Query query = getSession().createQuery(hql);
for (int i=0; i<params.length; i++) {
query.setParameter(i, params[i]);
}
return query.executeUpdate();
}
//调用存储过程:不返回�??
void callProcedure(String call,Object...params ) throws Exception{
SimpleJdbcTemplate jdbcTemplate= this.connection();
this.logParams(call, params);
jdbcTemplate.update(call, params);
}
}
|
package dao;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.log4j.Logger;
import eo.common.PageResult;
public class BaseDao extends BaseUserDao{
Logger log = Logger.getLogger(this.getClass());
/**
* 返回实体对象的class名称
* @param clazz 实体对象
* @return name
*/
@SuppressWarnings("unchecked")
private String getClassEntityName(Class clazz) {
String name = "";
if (clazz != null) {
name = clazz.getSimpleName();
}
return name;
}
/**
* 获取查询语句
* @param table 实体对象
* @return 查询语句
*/
@SuppressWarnings("unchecked")
private String getHsqlFromStr(Class table) {
String hsql = "from " + getClassEntityName(table);
log.debug("hsql = " + hsql);
return hsql;
}
/********************以下是各个业务模块可以调用的方法***********************/
//得到数据的条�?.
/**
* 带有参数查询,获取�?�的记录�?
* @param hql 查询语句
* @param parms 查询参数
* @return 记录�?
*/
public long getCount(String hql, Object[] parms) {
return super.getRecordsCount(hql, parms);
}
/**
* 根据Hibernate sql
* 带有参数查询,获取�?�的记录�?
* @param hqlName 查询语句
* @param params 参数�?
* @return 记录�?
*/
public long getCountBySqlName(String hqlSql, Object[] params) {
return getCount(hqlSql, params);
}
/***
* 根据�?般的jdbc sql得到总数.
* @param sql
* @return
* @throws Exception
*/
public long getCountWithSql(String sql,Object[] params){
return super.getCountsWithSql(sql,params);
}
/**
* 获取�?张表的记录数�?
* @param table 实体对象
* @return 记录�?
*/
@SuppressWarnings("unchecked")
public long getCountByClass(Class table) {
return getCount(getHsqlFromStr(table),null);
}
//得到数据的条数END
//得到表的单条记录.
/**
* 获取单条数据
* @param clazz Class
* @param s Serializable主键
* @return Object
*/
@SuppressWarnings("unchecked")
public Object get(Class clazz, Serializable s) {
return super.getSingleObject(clazz, s);
}
/**
* 取得单条数据
* @param table 实体对象
* @param code 数据code(主键)
* @throws Exception
* @return 单条数据
*/
@SuppressWarnings("unchecked")
public Object getData(Class table, Serializable code) {
return get(table, code);
}
/**
* 获取单条数据
* @param clazz Class
* @param s Serializable
* @return Object
*/
@SuppressWarnings("unchecked")
public Object load(Class clazz, Serializable s) {
return super.loadSingleObject(clazz, s);
}
//得到单条记录END
//得到数据�?.
/**
* 获取多条数据
* @param sql 查询语句
* @return 查询结果
*/
@SuppressWarnings("unchecked")
public List getListData(String sql) {
return super.find(sql);
}
/**
* 带有参数查询,获取多条数�?
* @param sql 查询语句
* @param parms 查询参数
* @return 查询结果
*/
@SuppressWarnings("unchecked")
public List getListData(String sql, Object[] parms) {
return super.find(sql, parms);
}
/**
* 根据表名得到该表的所有数据集.
* @param table 相应的entity
* @return �?有数据列�?
* @throws Exception
*/
@SuppressWarnings("unchecked")
public List getListPageAll(Class table) {
return getListData(getHsqlFromStr(table));
}
//得到数据集END
/**
* 判断指定code的实体是否存在,如果存在的话,赋值给obj
* @param obj 实体对象
* @throws Exception
* @return 单条数据
*/
public boolean locate(Object obj) throws Exception {
Serializable idValue = AnnotationUtils.getVoKeyValue(obj);
return locate(obj, idValue);
}
/**
* 判断指定code的实体是否存在,如果存在的话,赋值给obj
* @param obj 实体对象
* @param code 数据code
* @throws Exception
* @return 单条数据
*/
public boolean locate(Object obj, Serializable code) throws Exception {
if (obj != null && code != null) {
Object newEntity = get(obj.getClass(), code);
if (newEntity != null) {
BeanUtils.copyProperties(obj, newEntity);
return true;
}
}
return false;
}
//添加数据
/**
* 增加数据
* @param data 数据
* @throws Exception
*/
public void addData(Object data) {
save(data);
}
/**
* 增加记录
* @param obj 待保存对�?
*/
public void save(Object obj) {
super.saveSingleObject(obj);
}
/**
* 修改数据
* @param data 数据
* @throws Exception
*/
public void updateData(Object data) {
super.update(data);
}
/**
* 增加或�?�修改记�?
* @param obj 待保存或修改对象
*/
public void saveOrUpdate(Object obj) {
super.saveOrUpdateSingleObject(obj);
}
/**
* 批量增加或�?�修改记�?
* @param obj 待保存或修改对象
*/
@SuppressWarnings("unchecked")
public void saveOrUpdateBatch(Collection obj) {
super.saveOrUpdateAll(obj);
}
/***
* 批量添加.
* @param obj
*/
@SuppressWarnings("unchecked")
public void saveAllObject(Collection obj){
for (Object date : obj) {
this.addData(date);
}
}
/***
* 批量删除�?
* @param obj
*/
@SuppressWarnings("unchecked")
public void deleteAllObject(Collection obj){
super.deleteAll(obj);
}
/**
* 根据sql语句来进行update操作
* @param sql 传统的jdbc sql语句
* @param params 问号参数数组
* @return 更新的记录数�?
*/
@SuppressWarnings("unchecked")
public int updateWithSql(String sql, Object[] params) {
return super.updateOldWithJdbcSql(sql, params);
}
/**
* 根据hql语句来进行update操作
* @param hql hql语句
* @param params 问号参数数组
* @return 更新的记录数�?
*/
public int updateWithHql(String hql, Object[] params) {
return super.updateWithHibernateHql(hql, params);
}
/**
* 判断对象是否为BaseEntity.class.
* @param data 数据
* @throws Exception
*/
public void deleteData(Object data) {
// Assert.isInstanceOf(BaseEntity.class, data);
if (data != null) {
super.delete(data);
}
}
/**
* 批量删除数据
* @param data 待删除对象集�?
* @throws Exception
*/
@SuppressWarnings("unchecked")
public void deleteBatch(Collection data) {
for (Object obj : data) {
deleteData(obj);
}
}
/**
* 翻页查询多表或单表查�?.
* @param sql 查询语句
* @param startPage 起始�?
* @param pageSize 每页的最大记录数.
* @param params 客户端Dao类查询参�?
* @return 翻页结果
*/
public PageResult getPageListInfo(String sql,int startPage,int pageSize, Object[] params) {
return super.getListByPagination(sql, startPage, pageSize, params);
}
/***
*
* �?:这些表名不要用hibernate映射的类.
* 根据JDBC修改批处理修改记�?.
* @param sql
* @return
* @throws Exception
*/
public int updateByJDBCsql(String sql,Object... params) throws Exception{
return super.updateWithJdbcSql(sql,params);
}
/**
* �?:这些表名不要用hibernate映射的类.
* 根据JDBC得到第一条记�?.
* @param sql
* @return
* @throws Exception
*/
public Object getValueByJDBCsql(String sql,Object[] params) {
return super.getCountByJDBCsql(sql,params);
}
/***
* 根据jdbcSql删除信息.
*/
public int deleteByJDBCsqL(String sql,Object...params ) throws Exception{
return super.deleteWithJDBCsqL(sql, params);
}
/**
* 根据使用hibenate的JDBC得到查询返回:当含有多个字段时返回List<Object[]>;
* @param sql
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
public List getListByJDBChHSql(String sql,Object[] params) throws Exception{
return super.getListByJDBChSql(sql, params);
}
//调用存储过程:不返回�??
public void callProcedure(String call,Object...params ) throws Exception {
super.callProcedure(call, params);
}
/*//获取JDBC 查询语句的ResultSet结果对象
public ResultSet getResultSetByJDBCSql(String sql, Object...params) throws Exception {
return super.getResultSetByJDBCSql(sql, params);
}*/
}
|