废话不多少了,主要是使用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. chrome模拟微信

    这里有一个模拟器,既可以设置模拟很多型号的手机设备,也可以伪造你想要的HTTP_USER_AGENT.选择USER_AGENT,选other,微信的HTTP_USER_AGENT是: 在iPhone下 ...

  2. JeeSite 4.0 规划(二)

    ==== 点击放大查看 ==== ==== 点击放大查看 ====

  3. Robot Framework(二)测试数据语法

    2.1.1文件和目录 测试数据的层次结构安排如下: 测试数据在测试数据文件中创建. 测试数据文件会自动创建一个包含该文件中的测试数据的测试套件. 包含测试数据文件的目录构成了更高级别的测试套件.这样的 ...

  4. 5G开启百亿“机器人”时代 安全与标准仍待统一

    5G开启百亿“机器人”时代 安全与标准仍待统一 5G将会给物联网产业带来滚雪球效应,这将是数以百亿计“机器人”之间的网络. 在5G的助推下,物联网应用正在加速落地. 6月12日,CES Asia 20 ...

  5. eclipse tomcat发布路径在哪?

  6. VS Code中编写html(5) 标签的布局设置

    1  <!--首先在div中添加四个span标签--> <div> <!--span*4+tab--> <!--span{span$}*4--> < ...

  7. hibernate简单集合映射和获取

    简单集合映射(可以直接获取) // javabean设计 public class User { private int userId; private String userName; // 一个用 ...

  8. C语言提高 (4) 第四天 数组与数组作为参数时的数组指针

    1昨日回顾 const int 和 int const是一样的 const char *p;值不变 char * const p; 指针不能变 编译器对参数的退化: 第三种模型: 三级指针 三级指针局 ...

  9. 实验二:1、输出“Hello Word!”;2、测试主方法 的输入参数。3、总结

    一.输出:“Hello Word!” 1.新建java项目:点击File->New->Java Project.在project name一栏中输入自己所要创建的项目名称,点击Finish ...

  10. join()与os.path.join()的用法

    join:连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符)连接生成一个新的字符串 os.path.join():  将多个路径组合后返回 一.函数说明 1.join()函数 语法:‘ ...