SSH 项目中 用Hibernate底层 简单的封装DAO层
废话不多少了,主要是使用hibernate的查询方法,自己封装了DAO层,供service来方便使用.
首先:必须要继承的
public class CommonDao extends HibernateDaoSupport
紧接着是要注入必须的数据源:
@Resource
private SessionFactory sessionFactory; @PostConstruct
public void initSessionFactory() {
super.setSessionFactory(sessionFactory);
}
好了,下面就全是简单的方法封装了:
/**
*
* 功能描述: 获取多个结果
*
* @param hql
* @return
*/
public List getManyObjects(String hql) {
return getHibernateTemplate().find(hql);
}
/**
*
* 功能描述: 预编译,带参数,得到多条记录
*
* @param hql
* @param args
* @return
*/
public List getManyObjects(String hql, Object[] args) {
return getHibernateTemplate().find(hql, args);
}
/**
*
* 功能描述: 预编译,带参数,得到一条记录
*
* @param hql
* @param args
* @return
*/
public Object getOneObject(String hql, Object[] args) {
List list = getHibernateTemplate().find(hql, args);
if (list == null || list.size() == 0) {
return null;
} else {
return list.get(0);
}
}
/**
*
* 功能描述: 保存一条记录
*
* @param obj
* @return
*/
public Object save(Object obj) {
return getHibernateTemplate().save(obj);
}
/**
*
* 功能描述: 保存多条记录
*
* @param objs
* @return
*/
public List saveAll(List objs) {
if (objs == null || objs.size() == 0) {
return null;
}
List list = new ArrayList();
for (Object ob : objs) {
list.add(save(ob));
}
return list;
}
/**
*
* 功能描述: 更新一条实体
*
* @param obj
* @return
*/
public void update(Object obj) {
getHibernateTemplate().update(obj);
}
/**
*
* 功能描述: 更新/保存一条实体
*
* @param obj
* @return
*/
public void merge(Object obj) {
getHibernateTemplate().merge(obj);
}
/**
*
* 功能描述: 更新/保存一条实体
*
* @param obj
* @return
*/
public void saveOrUpdate(Object obj) {
getHibernateTemplate().saveOrUpdate(obj);
}
/**
*
* 功能描述: 删除实体
*
* @param obj
*/
public void delete(Object obj) {
getHibernateTemplate().delete(obj);
}
/**
*
* 功能描述:保存集合对象
*
* @param list
*/
public void saveManyObjects(List list) {
if (list == null || list.size() == 0) {
return;
}
for (int i = 0; i < list.size(); i++) {
getHibernateTemplate().save(list.get(i));
}
}
/**
* 功能描述: 执行HQL
*
* @param hql
* @return
*/
public int bulkUpdate(String hql) {
return getHibernateTemplate().bulkUpdate(hql);
}
/**
*
* 功能描述: 执行HQL,带参数
*
* @param hql
* @param params
* @return
*/
public int bulkUpdate(String hql, final Object[] params) {
return getHibernateTemplate().bulkUpdate(hql, params);
}
/**
*
* 功能描述: 执行原生增删改SQL
*
* @param sql
*/
public void executeNativeSqlUpdate(final String sql) {
this.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws SQLException {
session.createSQLQuery(sql).executeUpdate();
return null;
}
});
}
/**
*
* 功能描述: 执行原生增删改SQL 带参数
*
* @param sql
* @param params
*/
public void executeNativeSqlUpdate(final String sql, final Object[] params) {
this.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws SQLException {
Query query = session.createSQLQuery(sql);
if (params != null && params.length > 0) {
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
}
query.executeUpdate();
return null;
}
});
}
/**
*
* 功能描述: 执行原生查询SQL,带参数
*
* @param sql
* @return
*/
public List executeNativeSqlQuery(final String sql, final Object[] params) {
List list = (List) this.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws SQLException {
Query query = session.createSQLQuery(sql);
if (params != null && params.length > 0) {
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
}
return query.list();
}
});
return list;
}
/**
*
* 功能描述: 分页查询
*
* @param sql
* @param firstRow
* @param maxRow
* @return
*/
public List findByPage(final String sql, final int firstRow, final int maxRow) {
return getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws SQLException {
Query q = session.createQuery(sql);
q.setFirstResult(firstRow);
q.setMaxResults(maxRow);
return q.list();
} });
}
/**
*
* 功能描述: 获取总页数
*
* @param sql
* @return
*/
public int findTotal(final String sql) {
Long total = (Long) getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws SQLException {
String countHQL = "select count(1) " + sql;
Query q = session.createQuery(countHQL);
Long total = (Long) q.uniqueResult();
return total;
} });
if (total != null) {
return total.intValue();
} else {
return 0;
}
}
/**
* 根据指定的原生SQL和参数 查询 返回对应的java实体
* @param sql 原生SQL查询语句
* @param params SQL参数数组
* @param clazz 实体类
* @return List
*/
public List executeNativeSqlQueryForClass(final String sql, final Object[] params, final Class clazz) {
List list = (List) this.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createSQLQuery(sql).addEntity(clazz);
if (params != null && params.length > 0) {
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
}
return query.list();
}
});
return list;
}
/**
*
* 功能描述:执行原生sql 查询 返回List<map>的 结构
*
* @param sql
* @return
*/
public List findMapBySql(final String sql) {
return getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws SQLException {
SQLQuery query = session.createSQLQuery(sql);
query.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP);
return query.list();
} });
}
以上就是一些基本的封装方法,可以非常方便的供项目中使用.
SSH 项目中 用Hibernate底层 简单的封装DAO层的更多相关文章
- java项目中ehcache缓存最简单用法
java项目中ehcache缓存最简单用法: 1.下载ehcache-core-2.4.3.jar复制到项目的lib目录下 2.新建ehcache.xml文件,放置在项目src目录下的resour ...
- 在SSH项目中Struts2、Spring、Hibernate分别起到什么作用?
(1)Struts主要起控制作用,Spring主要起解耦作用,Hibernate主要起操作数据作用. (2)Struts2是一个基于MVC设计模式的Web应用框架,在MVC设计模式中Struts2作为 ...
- 在SSH项目中实现分页效果
在实现分页的时候,我使用的是数据库下面的User表,实现的效果是通过分页查询 能够将表中的数据分页显示,点击相关的按钮实现:首页.上一页.下一页.末页的显示 1新建一个dynamic web proj ...
- hessian在ssh项目中的配置
一. 在服务端发布一个web项目 1.创建一个动态的web项目,并导入hessian的jar包 2. 在服务端的crm项目中创建接口 package cn.rodge.crm.service;impo ...
- spring 项目中使用 hibernate validator验证输入参数
1 hibernate validator 官方文档:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_si ...
- vue项目中关于axios的简单使用
axios介绍 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中 官方仓库:https://github.com/axios/axios 中文文档:htt ...
- SSH 项目中 使用websocket 实现网页聊天功能
参考文章 :java使用websocket,并且获取HttpSession,源码分析 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 1.在项 ...
- JAVA项目中公布WebService服务——简单实例
1.在Java项目中公布一个WebService服务: 怎样公布? --JDK1.6中JAX-WS规范定义了怎样公布一个WebService服务. (1)用jdk1.6.0_21以后的版本号公布. ( ...
- vue项目中event bus的简单使用
之前做的一个vue后台管理系统中,需要实现这样一个功能:从列表页点击新建或编辑进入新建.编辑页面,新建.编辑完成后需要关闭当前的新建和编辑tab,而tab的关闭则是由项目中的tag组件控制的, 新建和 ...
随机推荐
- noip 2010 引水入城 贪心 + 搜索
不难分析出如果有解则每个蓄水厂所能覆盖到的干旱城市一定是连续的.否则,中间那些没被覆盖的部分永远都不能被覆盖到. 当然,每个蓄水厂所覆盖的城市有可能不连续,不过既然有解,则一定都是连续的.我们可以开一 ...
- python与图灵机器人交互(ITCHAT版本)
#!/usr/bin/env python#-*- coding:utf-8 -*- @Author : wujf @Time:2018/9/5 17:42import requestsimport ...
- 网络流入门——EK算法
转载:https://www.cnblogs.com/ZJUT-jiangnan/p/3632525.html 网络流的相关定义: 源点:有n个点,有m条有向边,有一个点很特殊,只出不进,叫做源点. ...
- Vue学习之路第十一篇:为页面元素设置class类样式
1.class为页面元素的一个属性,通过前面第五篇的内容可知,操作属性需要使用到v-bind指定(也可简写为 :). 2.先来看一个简单的页面样式内容: <!DOCTYPE html> & ...
- 22 链表中倒数第k个节点(第3章 高质量的代码-代码的鲁棒性)
题目描述: 输入一个链表,输出该链表中倒数第k个结点. 尾节点是倒数第一个节点 测试用例: 功能测试(第k个节点在中间.是头节点.是尾节点) 特殊输入测试(链表头节点是nullptr指针.链表的头 ...
- Problem 5
Problem 5 # Problem_5.py """ 2520 is the smallest number that can be divided by each ...
- Git clone时出现Please make sure you have the correct access rights and the repository exists.问题已解决。
看了好多资料终于搞定了git 中clone命令报错这个问题,废话不多说直接上步骤希望对大家有帮助. 1 删除.ssh文件夹(直接搜索该文件夹)下的known_hosts(手动删除即可,不需要git ...
- CAD 二次开发----- 块
/// <summary> /// 插入一个块参照到CAD图形中 /// </summary> /// <param name="spaceId"&g ...
- poi读取合并单元格
poi读取合并单元格 学习了:http://blog.csdn.net/ycb1689/article/details/9764191 进行了列合并单元格的修正:原来是我自己找错了地方: import ...
- Android 经常使用设计模式(一)
由于项目变更的频繁性,作为一名程序猿,我们须要掌握设计模式的必要性.就不言而喻~~.以下就是一些我自己学习的设计模式总结. 接下来,主要是针对几个比較经常使用模式进行解说,主要是以下几种: 观察者模式 ...