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. .Net Core 读取文件中文乱码

    首先,要知道.Net Core和.Net Framework两个环境下很多东西是不同的,接下来要说的这个就是其中一个. Encoding.Default,在  .NET Framework 中,Def ...

  2. PyQt5基础控件

    QLabel标签 功能:在界面上显示文字.图片.链接等 接口: 方法 描述 setText() 设置显示的内容 setAlignment() 设置文字对齐方式 setToolTip() 设置提示信息 ...

  3. MVC + EFCore 项目实战 - 数仓管理系统6 – 数据源管理上--使用view component完成卡片列表

    上次课程我们完成了菜单的配置和开发里程碑的划定. 按照计划,我们先来开发数据仓库管理中的数据源管理(对应菜单为:数据仓库管理 / 数据源),首批支持的数据源是SQL SERVER数据库. 一.数据源管 ...

  4. 深入探究JVM之内存结构及字符串常量池

    前言 Java作为一种平台无关性的语言,其主要依靠于Java虚拟机--JVM,我们写好的代码会被编译成class文件,再由JVM进行加载.解析.执行,而JVM有统一的规范,所以我们不需要像C++那样需 ...

  5. 疑难杂症1-去掉网站里的特殊编码&#65279

    编辑器:Visual Studio 2019项目框架:Net Core 3.1 + AutoFac 特殊符号&#65279,这是编码UTF-8 + BOM的特殊标记,是隐藏的,但是会被浏览器翻 ...

  6. flask下直接展示mysql数据库 字段

    在工作中,会导出一份mysql的html来查看,用的是就是路过秋天大神的那个工具,所以想自己用那个样式直接在后端写一个页面做展示! 前端页面 from flask import Flask,reque ...

  7. ~~网络编程(四):socket套接字~~

    进击のpython ***** 网络编程--socket socket的中文意思叫做套接字,socket方法其实也叫套接字方法 我们研究过TCP/UDP协议,但是要是让我们自己搭建,就十分困难了 而这 ...

  8. Nginx安全优化与性能调优

    目录 Nginx基本安全优化 隐藏Nginx软件版本号信息 更改源码隐藏Nginx软件名及版本号 修改Nginx服务的默认用户 修改参数优化Nginx服务性能 优化Nginx服务的worker进程数 ...

  9. 【Laravel】使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能

    一.安装配置 使用Composer安装依赖: composer require maatwebsite/excel 发布配置(可选): php artisan vendor:publish --pro ...

  10. AI大有可为:NAIE平台助力垃圾分类

    摘要:生活垃圾的分类和处理是目前整个社会都在关注的热点,如何对生活垃圾进行简洁高效的分类与检测对垃圾的运输处理至关重要.AI技术在垃圾分类中的应用成为了关注焦点. 如今AI已经是这个时代智能的代名词了 ...