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();
            }

        });
    }

以上就是一些基本的封装方法,可以非常方便的供项目中使用.

时间: 2024-11-08 07:24:04

SSH 项目中 用Hibernate底层 简单的封装DAO层的相关文章

在SSH项目中实现分页效果

在实现分页的时候,我使用的是数据库下面的User表,实现的效果是通过分页查询 能够将表中的数据分页显示,点击相关的按钮实现:首页.上一页.下一页.末页的显示 1新建一个dynamic web project项目 ,导入SSH项目所需要的jar antlr-2.7.7.jar c3p0-0.9.5.2.jar classmate-1.3.0.jar com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.apache.comm

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

1 hibernate validator 官方文档:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/ 在 springboot 项目中 spring-boot-starter-web 已经包含了 hibernate-validator 可以直接使用.否则需要在 maven 依赖中添加依赖项. <dependency> <groupId>org.hibernate.valid

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

参考文章  :java使用websocket,并且获取HttpSession,源码分析    http://www.cnblogs.com/zhuxiaojie/p/6238826.html 1.在项目中引入依赖 websocket遵循了javaee规范,所以需要引入javaee的包 1 <dependency> 2 <groupId>javax.websocket</groupId> 3 <artifactId>javax.websocket-api<

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

1.在Java项目中公布一个WebService服务: 怎样公布? --JDK1.6中JAX-WS规范定义了怎样公布一个WebService服务. (1)用jdk1.6.0_21以后的版本号公布. (2)与Web服务相关的类,都位于Javax.jws.*包中 @WebService--此注解用在类上指定将此类公布成一个WebService: EndPoint--此类为端点服务类,当中publish()方法用于将一个已经加入了@WebService注解对象绑定到一个地址的port上,用于公布. 2

JAVA项目中发布WebService服务——简单实例

1,在Java项目中发布一个WebService服务: 如何发布? --JDK1.6中JAX-WS规范定义了如何发布一个WebService服务: (1)用jdk1.6.0_21以后的版本发布: (2)与Web服务相关的类,都位于Javax.jws.*包中 @WebService--此注解用在类上指定将此类发布成一个WebService: EndPoint--此类为端点服务类,其中publish()方法用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上,用于发布. 2,例子

029医疗项目-模块三:药品供应商目录模块——Dao层:基本的查询语句的编写

我们安装显示的要求: 我们能看到显示的目录里面有:供货企业的名字(这个数据来自于供货商的表[usergys]),流水号,通用名,剂型(这些都来自药品信息表),供货的状态(这个呢在gysypml_control中其实就是一个数字1或者0,但是我们要显示的是正常或者暂停 啊,这样的话这个信息就要查找数据字典表dictinfo才能达到这个功能的 ).... 所以我们在查上面要显示的内容的时候:要关联的表有 gysypml, usergys, gysypml_control, ypxx,dictinfo

非WEB项目中引入Hibernate Validator

前言: 网上一些朋友分享了关于hibernate-validator的使用方法,但是不是缺少关联库信息,就是提供的参考代码中缺少自定类. 希望我这一篇博客能够让你顺利的跑出预期的结果. 如果有错,可以给我留言. 英文好的朋友可以参考官网的getting started. http://hibernate.org/validator/documentation/getting-started/ 一.环境 hibernate-validator库必须运行的JDK版本为1.6及以上. 二.hibern

Eclipse中在web项目中添加hibernate

创建web项目 创建一个web项目,FirstHibernatePro 创建数据库连接 创建一个数据库连接,这里使用的是Mysql数据库:window-->show View-->Data Source Explorer,然后在Database Connections右键 New,选择Mysql,然后去添加自己的数据库连接,并且添加详细的配置和加入相应的数据库驱动包 然后选择ok,开始测试自己的数据库连接,最后finish如果Database Source Exploer中出现了自己的数据库以

maven项目中 org.hibernate.MappingNotFoundException: resource:**.hbm.xml not found问题的解决方案

刚开始学习Maven,学习过程中遇到了很多问题,尤其是使用Eclipse创建Maven工程,真TM蛋疼... 按照网上的教程创建了一个Maven项目,看一下项目结构: 请注意,我的配置文件没有放到src/main/resource文件夹下. 结果运行之后就会报错: org.hibernate.MappingNotFoundException: resource:**.hbm.xml not found. 网上查了半天资料,原来对于Maven工程,编译的工作是由Maven程序来完成的,而Maven