废话不多少了,主要是使用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. Kinect安装与配置(openNI2)

    原文链接:http://blog.csdn.net/chenxin_130/article/details/8580636 简介 最近OpenNI2的推出,小斤也要多给博客除除草了,并在闲暇之余做一些 ...

  2. 杭电1159 Common Subsequence【最长公共子序列】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 解题思路:任意先给出两个字符串 abcfbc abfcab,用dp[i][j]来记录当前最长的子 ...

  3. 关于table排版

    colspan和rowspan这两个属性用于创建特殊的表格. colspan是“column span(跨列)”的缩写.colspan属性用在td标签中,用来指定单元格横向跨越的列数:   在浏览器中 ...

  4. JS 100内与7相关的数

    var s =""; for(var i=0;i;i++) { if(i%7 == 0 ){ s += i+","; } else if((i-7)%10 == ...

  5. 【leecode】宝石与石头

    给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头. S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石. J 中的字母不重复,J 和 S中的所有字符都是字母 ...

  6. HDU2035 - 人见人爱A^B

    求A^B的最后三位数表示的整数.  说明:A^B的含义是"A的B次方" Input 输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=1 ...

  7. 【LibreOJ 6278】 数列分块入门 2 (分块)

    题目原址 给出一个长为n的数列,以及n个操作,操作涉及区间加法,询问区间内小于某个值x的元素个数. code: #include<cstdio> #include<iostream& ...

  8. jenkins 新增节点的3种方式

    1.通过ssh建立节点(在节点机子上要安装好jdk) (1)通过用户+密码建立ssh连接 (2)通过用户+密钥建立连接 2.通过jnlp,javaweb的方式连接 (1)创建好节点 (2)在节点的机子 ...

  9. [using_microsoft_infopath_2010]Chapter12 管理监视InfoPath表单服务

    本章概要: 1.在SharePoint中心控制台管理InfoPath设置 2.分析监视浏览器表单开考虑潜在性能问题 3.最小化回发数据

  10. 【基础训练】HDOJ2032杨辉三角

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWEdzaWxlbmNl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...