getHibernateTemplate()方法

如何使用getHibernateTemplate()方法

一、getHibernateTemplate()方法介绍:

getHibernateTemplate()是Hibernate为了简化相关的增删改查操作,而封装了数据库的一些例行通用操作,可以直接使用,以此来提升开发效率。但是是由Spring整合Hibernate的时候才用到的,由Spring对Hibernate相关的操作对象进行封装。且DAO层实现类必须继承HibernateDaoSupport。如下代码:

public class DepartmentDaoImpl  extends HibernateDaoSupport implements DepartmentDao {

    /**
     * 总的记录数
     */
    public int findCount() {
        String hql="select count(*) from Department";
        List<Long> list = this.getHibernateTemplate().find(hql);
        if (list.size() > 0) {
            return list.get(0).intValue();
        }
        return 0;
    }

Spring注入Hibernate相关配置文件:

<!-- 配置Dao层的类 -->
<bean id="departmentDao" class="com.employee.dao.impl.DepartmentDaoImpl">
<!-- 注入sessionFactory -->
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="employeeDao" class="com.employee.dao.impl.EmployeeDaoImpl">
<!-- 注入sessionFactory -->
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- 配置transaction事务管理器 -->
<bean name="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <!-- 注入sessionFactory -->
    <property name="sessionFactory" ref="sessionFactory"/>
</bean> 
<!-- 开启注解事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

就不需要如下单独配置

  Configuration cfg = new Configuration();
        cfg.configure("hibernate.cfg.xml"); // 读取指定的主配置文件
        sessionFactory = cfg.buildSessionFactory(); // 根据配置生成Session工厂
        User user = new User();
        user.setName("张三");
        Session session = sessionFactory.openSession(); // 打开一个新的Session
        Transaction tx = session.beginTransaction(); // 开启事务
        session.save(user);
        tx.commit(); // 提交事务
        session.close(); // 关闭Session,释放资源(不一定是真正的关闭)

二、getHibernateTemplate()常用的方法

1、getHibernateTemplate方法介绍

  • 关于find*方法:

    这里写图片描述

  • 关于get*的方法:
    这里写图片描述

  • 关于update*的方法:
    这里写图片描述

  • 关于get*的方法:
    这里写图片描述

  • 关于save*的方法:
    这里写图片描述

  • 关于delete*的方法
    这里写图片描述

2、常用方法总结

(1)使用get/load通过主键id获取单条数据

 /**
 * 通过id查一个部门的信息:查询的did必须为主键
  */
    public void finById(Integer did) {
        this.getHibernateTemplate().get(Department.class, did);

    }

    public void finById(Integer did) {
        this.getHibernateTemplate().get(Department.class, did);

    }

(2)find查询

  • find(String queryString):返回hql查询结果

String hql = "select count(*) from User";
List<Long> list = this.getHibernateTemplate().find(hql);  
  • find(String queryString , Object value):返回Object对象集合
//查询User中name为Lijian的对象
String hql1 = "select from User where name='Lijian'";
//模糊查询
String hql2 = "select from User where name like %jian%";
List<User> list = this.getHibernateTemplate().find(hql1); 
List<User> list1 = this.getHibernateTemplate().find(hql2);
  • find(String queryString, Object[] values); :返回所有符合查询条件的Object对象集合
/*
*查询帐号为Lijian,密码为123的User实体对象
*/
String hql= "from User where name='Lijian' and password='123'";   
this.getHibernateTemplate().find(hql, new String[]{"Lijian", "123"}); 
  • findByExample(Object exampleEntity):通过实例查找,直到实例的属性所有匹配位置返回list

  • findByExample(Object exampleEntity, int firstResult, int maxResults):功能同上,但是其中参数firstResult与maxResult意思为:从firstResult起总共maxResult个Object对象

/*
* 符合的条件:User帐号为Lijian,密码为123
* 两个条件必须是同时的,相当于sql语句中的and:
* select User from where name='Lijian' and password='123' 
*/
    User u=new  User();        
    u.setPassword("123" );          
    u.setName("Lijian" );        
    List<User> list = this .getHibernateTemplate().findByExample(u);  
  • findByNamedParam(String queryString , String paramName , Object value):返回parmName为value的hql查询结果
  • findByNamedParam(String queryString , String[] paramName , Object[] value) :同上,参数为数组,对象值也为数组
/*
* 返回name为Lijian的User对象条数(hql查询结果为记录条数)
* 类似于sql语句中通配符?,后面传入参数值
* select count(*) from User where name=?
*/

    String queryString = "select count(*) from User where name=:myName"      
    String paramName= "myName";             
    String value= "Lijian";    
    this .getHibernateTemplate().findByNamedParam(queryString, paramName, value); 
/*
* 返回name为Lijian,password为123的User对象条数(hql查询结果为记录条数)
* 
*/
    String queryString = "select count(*) from User where name=:myName and password=:myPassword"      
    String[] paramName= new String[]{"myName", "myPassword"};             
    String[] value= new String[]{"Lijian", "123"};    
    this .getHibernateTemplate().findByNamedParam(queryString, paramName, value);  

  • findByValueBean(String queryString , Object value):先定义一个ValueBean,其中的属性与hql参数对应一致,随后将ValueBean作为vlaue参数传入
    //定义ValueBean
    ValueBean valueBean= new ValueBean();   
              valueBean.setMyName("Lijian");  
              valueBean.setMyPasswrod("123");   

    String queryString= "from User where name=:myName and u.password=:myPassword";    
    //将定义的ValueBean作为参数传入,也就是传递了MyName与MyPassword两个值
    this.getHibernateTemplate().findByValueBean(queryString , valueBean);   

(3)delete方法

  • void delete(Object entity):删除指定持久化实例

  • deleteAll(Collection entities):删除集合内全部持久化类实例

(4)save方法

  • save(Object entity):保存新的实例
  • saveOrUpdate(Object entity):根据实例状态,选择保存或者更新
  • 15
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值