博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate【与Spring整合】
阅读量:7050 次
发布时间:2019-06-28

本文共 5763 字,大约阅读时间需要 19 分钟。

hot3.png

前言

前面已经学习了如何使用Spring与Struts2进行整合,本博文主要讲解如何使用Spring对Hibernate进行整合

Spring和Hibernate整合的关键点:

  • SessionFactory对象交给Spring来创建
  • Hibernate的事务交给Spring进行管理

Spring和Hibernate整合步骤

引入jar包

  • 连接池/数据库驱动包
  • Hibernate相关jar
  • Spring 核心包(5个)
  • Spring aop 包(4个)
  • spring-orm-3.2.5.RELEASE.jar 【spring对hibernate的支持】
  • spring-tx-3.2.5.RELEASE.jar 【事务相关】

 

这里写图片描述

 

配置文件

  • hibernate.cfg.xml
  • bean.xml

bean.xml

hibernate.cfg.xml

com.mysql.jdbc.Driver
jdbc:mysql:///zhongfucheng
root
root
org.hibernate.dialect.MySQL5Dialect
true
true
create

搭建配置环境测试

  • User
package bb;/** * Created by ozc on 2017/5/15. */public class User {    private String name;    private String password;    private int id;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    @Override    public String toString() {        return "User{" +                "name='" + name + '\'' +                ", password='" + password + '\'' +                '}';    }}
  • IUser接口
public interface IUser {    void save();}
  • UserDao
public class UserDao implements IUser {    @Override    public void save() {    }}
  • userService
public class UserService {        private UserDao userDao;    public void save() {        userDao.save();    }}

测试Spring环境

首先,我们为userDao、userService使用Spring来创建对象,以及添加对象的依赖关系,看看Spring的环境是否成功

  • 创建UserDao实例--->
@Repositorypublic class UserDao implements IUser {    @Override    public void save() {    }}
  • 创建userService实例,并注入userDao属性
@Servicepublic class UserService {    @Autowired    private UserDao userDao;    public void save() {        userDao.save();    }}
  • 在Spring配置文件中使用注解扫描器
  • 测试:成功得到userService对象,并且userService对象含有userDao属性的值
public class Test2 {    @Test    public void test33() {        ApplicationContext ac = new ClassPathXmlApplicationContext("spring-config.xml");        UserService userService = (UserService) ac.getBean("userService");        System.out.println(userService);    }}

 

这里写图片描述

 

测试Hibernate环境

  • 映射配置文件
  • 主配置文件加载映射文件
  • 创建SessionFactory,Session
@Repositorypublic class UserDao implements IUser {    @Override    public void save(User user) {        //得到SessionFactory        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();        //得到Session        Session session = sessionFactory.openSession();        session.beginTransaction();        session.save(user);                session.getTransaction().commit();        session.close();    }}
  • 测试:
public class Test2 {    @Test    public void test33() {        ApplicationContext ac = new ClassPathXmlApplicationContext("spring-config.xml");        UserService userService = (UserService) ac.getBean("userService");        userService.save(new User());    }}

 

这里写图片描述

 

使用Spring创建SessionFactory对象

Spring与Hibernate整合的关键点之一就是使用Spring来创建SessionFactory对象。其中又有三种方式来创建SessionFactory

直接加载hibernate主配置文件

那么在userDao中就不用我们自己手动来创建SessionFactory对象了。

@Repositorypublic class UserDao implements IUser {    @Autowired    private SessionFactory sessionFactory;    @Override    public void save(User user) {        //得到Session        Session session = sessionFactory.openSession();        session.beginTransaction();        session.save(user);        session.getTransaction().commit();        session.close();    }}

 

这里写图片描述

 

连接池交给Spring管理

我们知道Hibernate对C3P0的连接池支持度比不上Spring,因此我们可以使用Spring的连接池。因此我们加载Hibernate的主配置文件又使用Spring的数据库连接池

也就是说,一部分配置在hibernate.cfg.xml,一部分配置在Spring文件中

 

这里写图片描述

 

配置文件全写Spring中【推荐】

上面我们一部分是加载Hibernate的主配置文件,一部分是使用Spring配置文件的数据库连接池...这样不好...我们应该在Spring中对其进行同一的管理!

org.hibernate.dialect.MySQLDialect
true
update
bb/User.hbm.xml

我们推荐的就是使用这一种,就可以少了Hibernate的配置文件了。并且容易统一管理。

Spring管理事务

到目前为止,我们是使用Hibernate编程式事务控制管理,Spring与Hibernate整合另一个关键就是使用Spring对Hibernate进行事务管理

值得注意的是:Spring与Hibernate整合,Spring只支持线程的Session,并且不用我们手动配置

 

这里写图片描述

 

userDao

@Repositorypublic class UserDao implements IUser {    @Autowired    private SessionFactory sessionFactory;    @Override    public void save(User user) {        sessionFactory.getCurrentSession().save(user);    }}

userService添加@Transactional注解就是为Hibernate添加了事务管理了。

@Service@Transactionalpublic class UserService {    @Autowired    private UserDao userDao;    public void save(User user) {        userDao.save(user);    }}

如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以关注微信公众号:Java3y

 

转载于:https://my.oschina.net/u/3777556/blog/1632318

你可能感兴趣的文章
关于数字签名简要原理
查看>>
POJ-3565 Ants 空间点对不相交匹配-最小权值匹配
查看>>
第三次月考
查看>>
单例模式的理解与应用
查看>>
springmvc(一)
查看>>
Hibernate与 MyBatis的比较
查看>>
【51NOD-0】1137 矩阵乘法
查看>>
Android使用静默安装时碰见的问题
查看>>
MySQL单机多实例安装并配置主从复制
查看>>
awk调用shell命令的两种方法:system与print
查看>>
网络对抗技术 20164320 王浩 Exp 9 Web安全基础
查看>>
谷歌开源第二代机器学习系统 TensorFlow
查看>>
juqery模板 Templates
查看>>
eclipse 自动创建web.xml
查看>>
python 基础回顾2
查看>>
Servlet 示例
查看>>
十一.单表更新及多表更新
查看>>
深入理解DOM节点类型第三篇——注释节点和文档类型节点
查看>>
32位64位操作系统基本数据类型字节大小
查看>>
linux高级编程day04 笔记
查看>>