package cn.com.oneslife.dao;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class HibernateDAO extends HibernateDaoSupport {
/**
* @param hql
* @param bean
* @return
* @throws SecurityException
* @throws NoSuchMethodException
* @throws IllegalArgumentException
* @throws IllegalAccessException
* @throws InvocationTargetException
*/
public String getQuery(String hql, Object bean) throws SecurityException,
NoSuchMethodException, IllegalArgumentException,
IllegalAccessException, InvocationTargetException {
Class<?> cl = bean.getClass();
Field[] fields = cl.getDeclaredFields();
Map<String, Object> listParam = new HashMap<String, Object>();
String fieldName = null;
String regex = "(and)?\\s+[a-zA-Z0-9]*\\.?[a-zA-Z0-9]*\\s+=\\s+:("
+ fieldName + ")";
for (Field field : fields) {
String methodName = "get"
+ field.getName().substring(0, 1).toUpperCase();
methodName += field.getName().substring(1);
Method method = cl.getMethod(methodName);
Object object = method.invoke(bean, new Object[] {});
fieldName = field.getName();
if (null == object) {
hql = hql.replaceAll(regex, "");
} else {
listParam.put(field.getName(), object);
}
}
hql = hql.replaceAll("where", "where true and");
hql = hql.replaceAll("set\\s+and", "set");
Query query = this.getSession().createQuery(hql);
loadParam(query, listParam);
return hql;
}
/**
* @param hql
* @param parameters
* @return
*/
public Query getQuery(String hql, Object... parameters) {
Query query = this.getSession().createQuery(hql);
for (int index = 0; index < parameters.length; index++) {
query.setParameter(index + 1, parameters[index]);
}
return query;
}
/**
* @param query
* @param parameters
* @return
*/
private Query loadParam(Query query, Map<String, Object> parameters) {
Set<Map.Entry<String, Object>> set = parameters.entrySet();
Iterator<Entry<String, Object>> iter = set.iterator();
while (iter.hasNext()) {
Entry<String, Object> entry = iter.next();
query.setParameter(entry.getKey(), entry.getValue());
}
return query;
}
}
分享到:
相关推荐
1)配置环境,加载hibernate的jar文件,以及连接数据库连接使用的jar文件,并配置CLASSPATH环境变量。 2)写POJO类(普通的java类) 3)写hibernate所需的配置文件,hibernate.cfg.xml ,Xxxxx.hbm.xml 4)调用...
初始化Hibernate:在要使用Hibernate的类的方法中实例化Configuration对象并用Configuration对象的configure()方法将hibernate.cfg.xml中的配置加载到内存,即: Configuration config = new Configuration()....
同时也可以将数据从关系型数据库或者⽂件 服务器导⼊到FusionInsight HD的HDFS/HBase中,或者反过来从HDFS/HBase导出到关系型数据库或者⽂件服务器中。同时提供 REST API接⼝,供第三⽅调度平台调⽤。 Loader模型...
对托管对象的更动,在托管期间不会影响数据库,但是将托管状态重新和数据库进行关联的时候会将托管对象重新变为持久态,那么在托管期间发生的更动也会被更新到数据库中 get()/load():从数据库中还原数据 get: 1.先...
1. 在Tomcat中快速上手 1.1. 开始Hibernate之旅 1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. Hibernate入门 2.1. 前言 2.2. 第一部分 - 第一个Hibernate程序 2.2.1. 第一个class 2.2.2...
目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 ...20.5. SchemaValidator命令行参数
HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- ...20.5. SchemaValidator命令行参数
1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 1.3.5. 双向关联 1.3.6. 使双向连起来 1.4. 第三部分 - Event...
1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 1.3.5. 双向关联 1.3.6. 使双向连起来 1.4. 第三部分 - Event...
4.1.4. 使用非不可继承的(non-sealed)类以及虚方法(virtual methods) (可选) 4.2. 实现继承(Inheritance) 4.3. 实现 Equals() 和 GetHashCode() 方法 4.4. 持久化生命周期(Lifecycle)中的回调(Callbacks)...
1. 在Tomcat中快速上手 1.1. 开始Hibernate之旅 1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. Hibernate入门 2.1. 前言 2.2. 第一部分 - 第一个Hibernate程序 2.2.1. 第一个class ...
4.1.4. 使用非不可继承的(non-sealed)类以及虚方法(virtual methods) (可选) 4.2. 实现继承(Inheritance) 4.3. 实现 Equals() 和 GetHashCode() 方法 4.4. 持久化生命周期(Lifecycle)中的回调(Callbacks)...
HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- ...20.5. SchemaValidator命令行参数
创建一个基于SQL的Query 17.2. 别名和属性引用 17.3. 命名SQL查询 17.3.1. 使用return-property来明确地指定字段/别名 17.3.2. 使用存储过程来查询 17.3.2.1. 使用存储过程的规则和限制 17.4. 定制SQL用来...
1.2.6. 加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 1.3.5. 双向关联 1.3.6. 使双向连起来 1.4. 第三部分 - Event...
HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- ...20.5. SchemaValidator命令行参数
加载并存储对象 1.3. 第二部分 - 关联映射 1.3.1. 映射Person类 1.3.2. 单向Set-based的关联 1.3.3. 使关联工作 1.3.4. 值类型的集合 1.3.5. 双向关联 1.3.6. 使双向连起来 1.4. 第三部分 - Event...
Hibernate查询语言(Query Language), 即HQL 11.1. 大小写敏感性(Case Sensitivity) 11.2. from 子句 11.3. 联合(Associations)和连接(joins) 11.4. select子句 11.5. 统计函数(Aggregate ...
Hibernate查询语言(Query Language), 即HQL 11.1. 大小写敏感性(Case Sensitivity) 11.2. from 子句 11.3. 联合(Associations)和连接(joins) 11.4. select子句 11.5. 统计函数(Aggregate ...
1.1.7. 加载并存储对象 ................................................. 10 1.2. 第二部分 - 关联映射 ................................................. 13 1.2.1. 映射 Person 类 ...........................