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

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

前言

前面已经学习了如何使用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实例--->@Repository
@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

更多的文章可往:

转载地址:http://argol.baihongyu.com/

你可能感兴趣的文章
java.util.Date、java.sql.Date、Time、Timestamp
查看>>
从CentOS风波谈起:Linux企业版如何选择?
查看>>
安装zabbix2.4.8遇到的一些错误
查看>>
Linux:在终端中查看图片和电影
查看>>
我的友情链接
查看>>
位运算实现整数加法
查看>>
实现级联查询
查看>>
js时钟
查看>>
java字符 字符串
查看>>
iterator (迭代器)的应用的用法(一)
查看>>
Java 接口代理
查看>>
关于treeView1_AfterSelect方法中节点的使用(代码介绍)
查看>>
ORA-16009: invalid redo transport destination
查看>>
Oracle 12c ORA-01516: nonexistent log file, data file, or temporary file "10"
查看>>
一对一映射的三种方式以及对lazyload的特别关注
查看>>
麦进斗:magento如何安装子主题
查看>>
Stack Based Windows Buffer Overflow Tutorial
查看>>
单双链表,通过指针变动交换相邻元素
查看>>
redhat中设置环境变量PATH的方法
查看>>
在bootstrap的modal中使用popover和tooltip
查看>>