最新消息:关注【太平洋学习网】微信公众号,可以获取全套资料,【全套Java基础27天】【JavaEE就业视频4个月】【Android就业视频4个月】

spring hibernate框架整合之HibernateTemplate的简单使用

Javaweb 太平洋学习网 浏览 评论

spring hibernate类似于mybatis,都是一个用来操作数据库的框架,hibernate的优点是不用写任何sql语句,因为用到了HibernateTemplate类,当然了,mybatis有通用mapper,因此大部分增删改查的sql也不需要写,下面来学习下spring hibernate框架的整合。

hibernate框架中有一个默认的hibernate.cfg.xml文件,用来配置mysql或oracle数据库连接信息,但是我们也可以不需要创建hibernate.cfg.xml文件,可以直接在applicationContext.xml文件中提供所有的连接信息,本案例也是。

spring框架与hibernate的优点

Spring框架提供了HibernateTemplate类,所以你不需要再创建配置,BuildSessionFactory,Session,开始与提交事务等那么多的步骤,以前我们操作数据库是这样的,如下是增加一条数据:

//创建configuration对象
Configuration cfg=new Configuration();    
cfg.configure("hibernate.cfg.xml");    
    
//创建seessionFactory 
SessionFactory factory=cfg.buildSessionFactory();    
    
//创建session对象    
Session session=factory.openSession();    
    
//开始创建transaction事务    
Transaction tr=session.beginTransaction();    
        
Employee e1=new Employee(111,"arun",40000); 
//持久化保存一条数据   
session.persist(e1);  
//提交事务之后才生效    
tr.commit();
//关闭事务
session.close();

有了spring与hibernate框架整合之后,事务之类的就不用自己一个个的来管理了,可以在配置文件中做这个事情,上面的代码可以简化成如下:

Employee e1=new Employee(111,"arun",40000);    
hibernateTemplate.save(e1);

HibernateTemplate类中已经封装了这些增删改查的方法,如下表格。

No.方法描述
1)void persist(Object entity)持久化给定的对象
2)Serializable save(Object entity)持久化给定的对象,并返回id
3)void saveOrUpdate(Object entity)持久化或更新给定对象,如果entity对象中包含了id,则默认为更新,否则就是保存对象
4)void update(Object entity)更新给定的对象
5)void delete(Object entity)删除给定的对象,因为对象中有id
6)Object get(Class entityClass, Serializable id)根据给定的id返回持久化对象
7)Object load(Class entityClass, Serializable id)根据给定的id返回持久化对象
8)List loadAll(Class entityClass)返回所有的持久化对象,也就是集合

下面是实现spring hibernate的整合示例,为了便于理解,请看截图,如下:

QQ截图20171221231509.jpg

步骤一:创建一个employee员工数据表,sql语句如下:

CREATE TABLE  "EMP558"   
   (    "ID" NUMBER(10,0) NOT NULL ENABLE,   
    "NAME" VARCHAR2(255 CHAR),   
    "SALARY" FLOAT(126),   
     PRIMARY KEY ("ID") ENABLE  
   )  
/

步骤二:新建Employee员工类,代码如下:

package com.tpyyes;  
  
public class Employee {  
private int id;  
private String name;  
private float salary;  
  
//getters and setters 省略
  
}

步骤三:创建employee.hbm.xml映射文件,这个文件中包含了持久化类的所有字段信息,如下:

<?xml version='1.0' encoding='UTF-8'?>  
<!DOCTYPE hibernate-mapping PUBLIC  
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  
<hibernate-mapping>  
<class name="com.tpyyes.Employee" table="emp558">  
          <id name="id">  
          <generator class="assigned"></generator>  
          </id>  
            
          <property name="name"></property>  
          <property name="salary"></property>  
</class>  
            
</hibernate-mapping>

步骤四:创建EmployeeDao类,该类中使用了HibernateTemplate类的增删改查的方法,用于持久化数据或查询数据,代码如下:

package com.javatpoint;  
import org.springframework.orm.hibernate3.HibernateTemplate;  
import java.util.*;  
public class EmployeeDao {  
HibernateTemplate template;
//set注入将在applicationContext.xml文件中有配置  
public void setTemplate(HibernateTemplate template) {  
    this.template = template;  
}  
//增  
public void saveEmployee(Employee e){  
    template.save(e);  
}  
//改 
public void updateEmployee(Employee e){  
    template.update(e);  
}  
//删  
public void deleteEmployee(Employee e){  
    template.delete(e);  
}  
//根据id查询对象  
public Employee getById(int id){  
    Employee e=(Employee)template.get(Employee.class,id);  
    return e;  
}  
//查询所有对象  
public List<Employee> getEmployees(){  
    List<Employee> list=new ArrayList<Employee>();  
    list=template.loadAll(Employee.class);  
    return list;  
}  
}

步骤4:创建applicationContext.xml文件,该文件用于初始化sql数据库连接,通过注入datasource来创建sessionFactory工厂,最后set注入HibernateTemplate对象,这样在EmployeeDao就可以使用HibernateTemplate对象里面的所有方法了,注入流程如下图所示:

QQ截图20171221232232.jpg

代码如下:

<?xml version="1.0" encoding="UTF-8"?>  
<beans  
    xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:p="http://www.springframework.org/schema/p"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
  
  
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  
        <property name="driverClassName"  value="oracle.jdbc.driver.OracleDriver"></property>  
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"></property>  
        <property name="username" value="system"></property>  
        <property name="password" value="oracle"></property>  
    </bean>  
      
    <bean id="mysessionFactory"  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
        <property name="dataSource" ref="dataSource"></property>  
          
        <property name="mappingResources">  
        <list>  
        <value>employee.hbm.xml</value>  
        </list>  
        </property>  
        <!--hibernate.hbm2ddl.auto表示根据hbm.xml映射文件自动创建表,如果有表了就不会再创建了-->  
        <property name="hibernateProperties">  
            <props>  
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>  
                <prop key="hibernate.hbm2ddl.auto">update</prop>  
                <prop key="hibernate.show_sql">true</prop>  
                  
            </props>  
        </property>  
    </bean>  
      
    <bean id="template" class="org.springframework.orm.hibernate3.HibernateTemplate">  
    <property name="sessionFactory" ref="mysessionFactory"></property>  
    </bean>  
      
    <bean id="d" class="com.tpyyes.EmployeeDao">  
    <property name="template" ref="template"></property>  
    </bean>  
      
      
    </beans>

步骤五:新建InsertTest.java文件,在main方法中测试我们spring与hibernate框架是否整合完成,代码如下:

package com.tpyyes;  
  
import org.springframework.beans.factory.BeanFactory;  
import org.springframework.beans.factory.xml.XmlBeanFactory;  
import org.springframework.core.io.ClassPathResource;  
import org.springframework.core.io.Resource;  
  
public class InsertTest {  
public static void main(String[] args) {  
      
    Resource r=new ClassPathResource("applicationContext.xml");  
    BeanFactory factory=new XmlBeanFactory(r);  
      
    EmployeeDao dao=(EmployeeDao)factory.getBean("d");  
      
    Employee e=new Employee();  
    e.setId(114);  
    e.setName("varun");  
    e.setSalary(50000);  
    //调用dao里面的方法保存数据  
    dao.saveEmployee(e);  
      
}  
}
来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/javaweb/2017/1221/440.html

    与本文相关的文章

    发表我的评论
    取消评论

    表情

    您的回复是我们的动力!

    • 昵称 (必填)

    网友最新评论