java Hibernate 用法
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 用法的更多相关文章
- 【转】java list用法示例详解
转自:http://www.jb51.net/article/45660.htm java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对java list用法做了详解. Lis ...
- Java List 用法代码分析 非常详细
Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对Java List用法做了详解. List:元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3 ...
- Java split用法
Java split用法 java.lang.string.split split 方法 将一个字符串分割为子字符串,然后将结果作为字符串数组返回. stringObj.split([separat ...
- Java Enum用法详解
Java Enum用法详解 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举 ...
- Java 习惯用法总结
转自:http://www.importnew.com/15605.html 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » Java 习惯用法总结 2015/04/ ...
- 你真的了解java的lambda吗?- java lambda用法与源码分析
你真的了解java的lambda吗?- java lambda用法与源码分析 转载请注明来源:cmlanche.com 用法 示例:最普遍的一个例子,执行一个线程 new Thread(() -> ...
- Java Hibernate 5.3.x
SchemeExport Hibernate根据实体类和实体类映射文件自动生成表结构. 示例代码: <?xml version='1.0' encoding='utf-8'?> <! ...
- 不藏了,这些Java反射用法总结都告诉你们
摘要:Java反射是一种非常强大的机制,它可以在同一个系统中去检测内部的类的字段.方法和构造函数.它非常多的Java框架中,都大量应用了反射技术,如Hibernate和Spring.可以说,反射机制的 ...
- JAVA Hibernate工作原理及为什么要用
hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库.hibernate核心接口 ...
随机推荐
- Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解
随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一.Spring 3开始提供了强大的基于注解的缓 ...
- CentOS8.0 Docker Repository
一.硬件软件准备 1.2台服务器或者电脑(使用云服务器1.阿里云 2.百度云各一台) ,系统均为CentOS 8.0 2.分别安装Docker 3.测试镜像准备(准备的是 ...
- 《Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases》论文总结
Aurora总结 说明:本文为论文 <Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relation ...
- 关于 iframe 的小问题若干
我们知道,iframe在传统的MVC项目里是个很常用的东西. 但这玩意用起来有时会有点烦人. 比如说:我有个一个页面套了一个iframe,iframe里面的页面通过a标签来切换.怎么做? <li ...
- 一起学Blazor WebAssembly 开发(2)
上篇文章讲了Blazor的两种模式的区别及各自的使用场景,本篇就开始学习WebAssembly模式,本篇主要学习的是创建项目及认识项目结构: 创建项目 选择Blazor应用 选择WebAssembly ...
- adb连接多个设备时,选择某个设备
在emulator-5554模拟器上安装ebook.apk: adb -s emulator-5554 install ebook.apk 在真机上安装ebook.apk: adb -s HT9BYL ...
- MySQL(四)数据备份与还原
数据备份与还原: 备份:将当前已有的数据或者记录保留 还原:将已经保留的数据恢复到对应的表中 为什么要做备份还原: 1.防止数据丢失:被盗.误操作 2.保护数据的记录 数据备份还原的方式很多:数据表备 ...
- 给Django Admin添加验证码和多次登录尝试限制
Django自带的Admin很好用,但是放到生产环境总还差了点什么= = 看看admin的介绍: Django奉行Python的内置电池哲学.它自带了一系列在Web开发中用于解决常见问题或需求的额外的 ...
- text输入框
https://blog.csdn.net/renhong20121314/article/details/51906555
- 离线安装paramiko
1. 利用yum下载paramiko依赖的rpm软件包 安装yum-utils yum -y install yum-utils yumdownloader python-setuptoolsyumd ...