废话不多少了,主要是使用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层的更多相关文章

  1. java项目中ehcache缓存最简单用法

      java项目中ehcache缓存最简单用法: 1.下载ehcache-core-2.4.3.jar复制到项目的lib目录下 2.新建ehcache.xml文件,放置在项目src目录下的resour ...

  2. 在SSH项目中Struts2、Spring、Hibernate分别起到什么作用?

    (1)Struts主要起控制作用,Spring主要起解耦作用,Hibernate主要起操作数据作用. (2)Struts2是一个基于MVC设计模式的Web应用框架,在MVC设计模式中Struts2作为 ...

  3. 在SSH项目中实现分页效果

    在实现分页的时候,我使用的是数据库下面的User表,实现的效果是通过分页查询 能够将表中的数据分页显示,点击相关的按钮实现:首页.上一页.下一页.末页的显示 1新建一个dynamic web proj ...

  4. hessian在ssh项目中的配置

    一. 在服务端发布一个web项目 1.创建一个动态的web项目,并导入hessian的jar包 2. 在服务端的crm项目中创建接口 package cn.rodge.crm.service;impo ...

  5. spring 项目中使用 hibernate validator验证输入参数

    1 hibernate validator 官方文档:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_si ...

  6. vue项目中关于axios的简单使用

    axios介绍 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中 官方仓库:https://github.com/axios/axios 中文文档:htt ...

  7. SSH 项目中 使用websocket 实现网页聊天功能

    参考文章  :java使用websocket,并且获取HttpSession,源码分析    http://www.cnblogs.com/zhuxiaojie/p/6238826.html 1.在项 ...

  8. JAVA项目中公布WebService服务——简单实例

    1.在Java项目中公布一个WebService服务: 怎样公布? --JDK1.6中JAX-WS规范定义了怎样公布一个WebService服务. (1)用jdk1.6.0_21以后的版本号公布. ( ...

  9. vue项目中event bus的简单使用

    之前做的一个vue后台管理系统中,需要实现这样一个功能:从列表页点击新建或编辑进入新建.编辑页面,新建.编辑完成后需要关闭当前的新建和编辑tab,而tab的关闭则是由项目中的tag组件控制的, 新建和 ...

随机推荐

  1. 2 Selenium3.0+Python3.6环境搭建

    [说明] 再次搭建一次环境,是因为遇到怎么都打不开IE的问题了,环境信息为:Selenium3.0+Python3.6+win7+ie10 [搭建步骤] 1.下载Python3.6,并点击安装和配置环 ...

  2. 微信App支付:微信支付的appid,appsecret,商户号mch_id,微信交易支付密钥(mch_key)在哪里查看

    1-1) 查看微信支付 appid 的方法 微信支付使用的 appid, 是微信服务号的 appid, 需要你登录微信服务号后台, 在 开发-基本配置/开发者ID(AppID) 中查看微信支付 app ...

  3. centos7常见的操作

    centos7的网络IP地址配置文件在  /etc/sysconfig/network-scripts 文件夹下, 查看当前网卡名称 ip ad li ens33网卡对应的配置文件为ifcfg-ens ...

  4. 路飞学城Python-Day53

    01-jquery的介绍 JS在做项目或者是实现功能的时候,用JS去操作DOM元素非常复杂,代码量大,重复性代码也多 多个元素使用for循环遍历也是非常麻烦的,对于JS使用来说加大了难度 jQuery ...

  5. AM335X用RGB888连接LCD如何以16位色彩模式显示图片

    在AM335x中,在连接显示屏的时候,存在一个问题.这个在am335x Sillicon Errata已经提到过 在RGB888模式中   而对于RGB565模式的硬件连接 不难看出,这个RGB是反的 ...

  6. 序列模型(2)-----循环神经网络RNN

    一.RNN的作用和粗略介绍: RNN可解决的问题: 训练样本输入是连续的序列,且序列的长短不一,比如基于时间的序列:一段段连续的语音,一段段连续的手写文字.这些序列比较长,且长度不一,比较难直接的拆分 ...

  7. Python笔记13------pandas作图

    1.pandas可以用来画DataFrame和Series的图 如: import numpy as npimport matplotlib.pyplot as pltimport pandas as ...

  8. python之异常处理模块

    一 . python 内置的异常类 在程序运行过程中,如果出现错误,python解释器会创建一个异常对象,并抛出给系统运行时.即程序终止正常执行流程,转而执行异常处理流程. 在某种特殊条件下,代码中也 ...

  9. 小松之LINUX 驱动学习笔记(开篇)

    时间对每个人都是公平的,就看你怎么对待他.每天多努力一点,未来就会轻松一点.作为一名北漂,感受着首都的压力,也曾萌生过逃离北上广的想法,但是,最后我最终还是选择留下来,随着年龄的增长,我已经没有那么多 ...

  10. 【ACM-ICPC 2018 南京赛区网络预赛 A】An Olympian Math Problem

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 估计试几个就会发现答案总是n-1吧. 队友给的证明 [代码] #include <bits/stdc++.h> #def ...