Hibernate 用法总结:

 import java.io.Serializable;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.FlushMode;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.type.Type;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.krm.dao.DAO; /**
* @Title:
*
* @Description: HibernateTemplate是Spring框架接管hibernate的提供方法集合
*
* @Copyright: Copyright (c) 2015
*
* @author HHT
*/
public class BaseDAOHibernate extends HibernateDaoSupport implements DAO { protected final Log log = LogFactory.getLog(getClass()); // ---------------------------------------------- VO操作-------------------------------------------- // /**
* 按主键查询,返回唯一结果
*
* @param clazz
* DTO.class返回值的类
* @param id
* 主键(Long型就可以)
* @return 查询结果
*/
public Object getObject(Class clazz, Serializable id) {
return getHibernateTemplate().get(clazz, id); // get
} /**
* 取得查询结果,返回所有结果
*
* @param clazz
* DTO.class返回值的类
* @return 查询结果列表
*/
public List getObjects(Class clazz) {
return getHibernateTemplate().loadAll(clazz); // load
} /**
* 删除数据,按住键删除
*
* @param clazz
* DTO.class返回值的类
* @param id
* 主键(Long型就可以)
* @return
*/
public void removeObject(Class clazz, Serializable id) {
getHibernateTemplate().delete(getObject(clazz, id)); // delete
} /**
* 删除数据
*
* @param o
* VO实体类
* @return
*/
public void removeObject(Object o) {
getHibernateTemplate().delete(o); // delete
} /**
* 更新或插入数据
*
* @param o
* VO实体类
* @return
*/
public void saveObject(Object o) {
getHibernateTemplate().saveOrUpdate(o); // saveOrUpdate
getHibernateTemplate().flush();
} /**
* 经过检索操作,更新或插入数据
*
* @param o
* VO实体类
* @return
*/
public void saveObjectAfterFind(final Object o) {
getHibernateTemplate().execute(new HibernateCallback() { // execute
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
session.saveOrUpdate(o);
session.setFlushMode(FlushMode.COMMIT);
session.flush();
return null;
}
});
} /**
* 批量更新或插入数据
*
* @param objectList
* VO实体类
* @return 查询结果列表
*/
public void batchSaveOrUpdateVO(final List objectList) {
HibernateCallback callback = new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
int i = 0;
for (Iterator it = objectList.iterator(); it.hasNext();) {
session.saveOrUpdate(it.next());
if (i % 20 == 0) {
session.flush();
session.clear();
}
i++;
}
session.flush();
session.clear();
return null;
}
};
getHibernateTemplate().execute(callback); // execute
} // ---------------------------------------------- SQL,HQL语句-------------------------------------------- // /**
* 执行简单的HQL查询,返回多件结果
*
* @param hql
* HQL查询语句
* @return 查询结果列表
*/
protected List list(String hql) {
return getHibernateTemplate().find(hql); // find
} /**
* 执行带参数的HQL查询,返回多件结果
*
* @param hql
* HQL查询语句
* @param values
* HQL语句数组类型的参数
* @return 查询结果列表
*/
// String hql = "SELECT * FROM table WHERE entityId=? AND entityKind=? AND status=1 ORDER BY dispOrder";
// list(hql, new Object[]{entityId, accessoryType});
protected List list(String hql, Object[] values) {
return getHibernateTemplate().find(hql, values); // find
} /**
* 执行带参数的HQL查询,返回多件结果
*
* @param hql
* HQL查询语句
* @param parameters
* HQL语句Map类型的参数
* @return 查询结果列表
*/
// String hql = "from ImportRule t where t.report_type=:type and t.reportid=:reportid";
// Map map = new HashMap();
// map.put("type",report_type);
// map.put("reportid",reportid);
// list(hql,map);
protected List list(final String hql, final Map parameters) {
HibernateCallback callback = new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
Query query = session.createQuery(hql);
setQueryParameters(query, parameters);
return query.list();
}
};
return (List) getHibernateTemplate().execute(callback); // execute
} // 方法重载
// Object[][] scalaries = {{"money", Hibernate.DOUBLE}};
// List list = list(sql, null, scalaries);
protected List list(String sql, Object[][] entities, Object[][] scalaries) {
return list(sql, entities, scalaries, null);
} // 方法重载
protected List list(String sql, Object[][] entities, Object[][] scalaries, int maxResults) {
return list(sql, entities, scalaries, null, maxResults);
} // 方法重载
// String sql = "SELECT {u.*} " + "FROM table u WHERE u.status = '1' AND u.loginname=? AND u.password = ?" ;
// list(sql, new Object[][]{{"u", User.class}}, null, new Object[]{loginName, passWord});
//------------------上种方法必须配置VO实体类表映射xml文件 下面则不用--------------------------------------------------
// String sql = "SELECT rdf.PKID AS PKID,rdf.ORGAN_ID AS ORGAN_ID FROM table rdf WHERE rdf.report_id = ? AND rdf.report_date = ? AND rdf.organ_id ='"+organId +"'";
// Object[][] scalaries = {{"PKID", Hibernate.LONG}, {"ORGAN_ID", Hibernate.STRING}};
// List result = list(sql, null, scalaries, new Object[]{reportId, reportDate});
// ------------------下面的方法结果解析麻烦-----------------------------
// for (Iterator it = result.iterator(); it.hasNext();)
// {
// Object[] oa = (Object[])it.next();
// (Long)oa[0];
// (String)oa[1];
// }
protected List list(String sql, Object[][] entities, Object[][] scalaries, Object[] values) {
return list(sql, entities, scalaries, values, 0);
} // 方法重载
protected List list(String sql, Object[][] entities, Object[][] scalaries, Object[] values, int maxResults) {
return list(sql, entities, scalaries, values, 0, maxResults);
} // 方法重载
protected List page(String sql, Object[][] entities, Object[][] scalaries, Object[] values, int pageNo, int pageSize) {
return list(sql, entities, scalaries, values, (pageNo - 1) * pageSize, pageSize);
} /**
* 执行HQL或SQL的带分页功能的查询(数据量大时,分页有效率问题),返回多件结果
*
* @param sql
* HQL或者SQL查询语句
* @param entities
* 表别名和映射BEAN的类型
* @param scalaries
* SQL列类型映射
* @param values
* 参数列表,替换语句中的?参数
* @param firstResult
* 分页参数 起始位置
* @param maxResults
* 分页参数 最大上限
* @return list 查询结果集
*/
protected List list(final String sql, final Object[][] entities,
final Object[][] scalaries, final Object[] values, final int firstResult,
final int maxResults) {
try {
HibernateCallback callback = new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
// Query query = session.createQuery(sql);
// Query只能执行HQL语句,但是以Hibernate生成的Bean为对象装入List返回
// SQLQuery 可以执行原生SQL语句,以对象数组返回,可以用addEntity()方法指定映射Bean
SQLQuery query = session.createSQLQuery(sql);
// 追加结果映射的BEAN
if (entities != null) {
for (int i = 0; i < entities.length; i++) {
query.addEntity(entities[i][0].toString(),
(Class) entities[i][1]);
}
}
//
if (scalaries != null) {
for (int i = 0; i < scalaries.length; i++) {
query.addScalar(scalaries[i][0].toString(), (Type) scalaries[i][1]);
}
}
// 设置查询参数
setQueryParameters(query, values);
// 分页起始位置
if (firstResult > 0) {
query.setFirstResult(firstResult);
}
// 分页上位置
if (maxResults > 0) {
query.setMaxResults(maxResults);
}
return query.list();
}
};
return (List) getHibernateTemplate().execute(callback); // execute
} catch (Exception e) {
// log.error(" BaseDAOHIBERNATE list is error" + e.getMessage());
return null;
}
} /**
* 执行HQL查询,返回唯一结果
*
* @param hql
* HQL查询语句
* @return 查询结果对象
*/
protected Object uniqueResult(final String hql) {
HibernateCallback callback = new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
return session.createQuery(hql).uniqueResult();
}
};
return getHibernateTemplate().execute(callback); // execute
} /**
* 执行HQL查询,返回唯一结果
*
* @param hql
* HQL查询语句
* @param parameters
* HQL语句Map类型的参数
* @return 查询结果对象
*/
protected Object uniqueResult(final String hql, final Map parameters) {
HibernateCallback callback = new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
Query query = session.createQuery(hql);
setQueryParameters(query, parameters);
return query.uniqueResult();
}
};
return getHibernateTemplate().execute(callback); // execute
} /**
* 执行HQL查询,返回唯一结果
*
* @param hql
* HQL查询语句
* @param values
* HQL语句数组类型的参数
* @return 查询结果对象
*/
protected Object uniqueResult(final String hql, final Object[] values) {
HibernateCallback callback = new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
Query query = session.createQuery(hql);
setQueryParameters(query, values);
return query.uniqueResult();
}
};
return getHibernateTemplate().execute(callback); // execute
} private void setQueryParameters(Query query, Object[] values) {
if (values != null) {
for (int i = 0; i < values.length; i++) {
query.setParameter(i, values[i]);
}
}
} private void setQueryParameters(Query query, Map parameters) {
if (parameters != null) {
for (Iterator it = parameters.entrySet().iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();
String paramName = (String) entry.getKey();
Object paramValue = entry.getValue();
if (paramValue instanceof Collection) {
query.setParameterList(paramName, (Collection) paramValue);
} else if (paramValue instanceof Object[]) {
query.setParameterList(paramName, (Object[]) paramValue);
} else {
query.setParameter(paramName, paramValue);
}
}
}
} /**
* 更新,删除或插入数据
*
* @param sql
* HQL或者SQL查询语句
* @return boolean 是否有影响的记录
*/
public boolean save(final String sql) {
Integer result = (Integer) getHibernateTemplate().execute( // execute
new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
Query query = session.createQuery(sql);
int rowCount = query.executeUpdate();
session.flush();
return rowCount;
}
});
if (result > 0) {
return true;
} else {
return false;
}
}
}

java Hibernate 用法的更多相关文章

  1. 【转】java list用法示例详解

    转自:http://www.jb51.net/article/45660.htm java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对java list用法做了详解. Lis ...

  2. Java List 用法代码分析 非常详细

    Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对Java List用法做了详解. List:元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3 ...

  3. Java split用法

    Java split用法 java.lang.string.split split 方法  将一个字符串分割为子字符串,然后将结果作为字符串数组返回. stringObj.split([separat ...

  4. Java Enum用法详解

    Java Enum用法详解 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举 ...

  5. Java 习惯用法总结

    转自:http://www.importnew.com/15605.html 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » Java 习惯用法总结 2015/04/ ...

  6. 你真的了解java的lambda吗?- java lambda用法与源码分析

    你真的了解java的lambda吗?- java lambda用法与源码分析 转载请注明来源:cmlanche.com 用法 示例:最普遍的一个例子,执行一个线程 new Thread(() -> ...

  7. Java Hibernate 5.3.x

    SchemeExport Hibernate根据实体类和实体类映射文件自动生成表结构. 示例代码: <?xml version='1.0' encoding='utf-8'?> <! ...

  8. 不藏了,这些Java反射用法总结都告诉你们

    摘要:Java反射是一种非常强大的机制,它可以在同一个系统中去检测内部的类的字段.方法和构造函数.它非常多的Java框架中,都大量应用了反射技术,如Hibernate和Spring.可以说,反射机制的 ...

  9. JAVA Hibernate工作原理及为什么要用

    hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库.hibernate核心接口 ...

随机推荐

  1. python---Flask使用教程-加载静态文件

    flask的静态文件,一般放在static目录下,前端页面放在templates下(而且这两个名字是定死的(static,templates)),目录结构如图: 模板(index.html)里加载静态 ...

  2. 带Boolean类型的参数的接口用postman测试时传参问题

    带Boolean类型的参数的接口用postman测试时传参问题 @Data public class ATest { private Boolean isCommit; } postman 测试时传参 ...

  3. C++ 线性筛素数

    今天要写一篇亲民的博客了,尽力帮助一下那些不会线性筛素数或者突然忘记线性筛素数的大佬. 众所周知,一个素数的倍数肯定不是素数(废话).所以我们可以找到一个方法,普通的筛法(其实不算筛,普通的是判断一个 ...

  4. node.js02 安装Node环境

    安装Node环境 在node.js01中我大概了解了什么是node.js,这次进入起步阶段,首先要安装下Node环境. 开始安装 查看当前Node环境的版本号 win+r输入cmd进入命令行,输入no ...

  5. HashTable、HashMap与ConCurrentHashMap源码解读

    HashMap 的数据结构 ​ hashMap 初始的数据结构如下图所示,内部维护一个数组,然后数组上维护一个单链表,有个形象的比喻就是想挂钩一样,数组脚标一样的,一个一个的节点往下挂. ​ 我们可以 ...

  6. 详解Vue大护法——组件

    1.什么是组件化 人面对复杂问题的处理方式: 任何一个人处理信息的逻辑能力都是有限的 所以,当面对一个非常复杂的问题时,我们不太可能一次性搞定一大堆的内容. 但是,我们人有一种天生的能力,就是将问题进 ...

  7. 使用java实现希表的基础功能

    用java代码完成哈希表数据结构的简单实现, 以公司雇员的添加修改作为模拟实例 具体代码如下: package com.seizedays.hashtable; import java.util.Sc ...

  8. three.js 郭先生制作太阳系

    今天郭先生收到评论,想要之前制作太阳系的案例,因为找不到了,于是在vue版本又制作一版太阳系,在线案例请点击博客原文(加载时间比较长,请稍等一下).话不多说先看效果图. 图片有点多,先放三张,相比于上 ...

  9. Python unichr() 函数

    描述 unichr() 函数 和 chr() 函数功能基本一样, 只不过是返回 unicode 的字符.高佣联盟 www.cgewang.com 注意: Python3 不支持 unichr(),改用 ...

  10. PHP date_get_last_errors() 函数

    ------------恢复内容开始------------ 实例 返回解析日期字符串时的警告和错误: <?phpdate_create("gyuiyiuyui%&&/ ...