资讯专栏INFORMATION COLUMN

Hibernate【与Spring整合】

chadLi / 1193人阅读

摘要:常用的配置属性加载映射文件映射到文件夹加载映射文件映射到具体位置我们推荐的就是使用这一种,就可以少了的配置文件了。

前言

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

</>复制代码

  1. com.mysql.jdbc.Driver
  2. jdbc:mysql:///zhongfucheng
  3. root
  4. root
  5. org.hibernate.dialect.MySQL5Dialect
  6. true
  7. true
  8. create
搭建配置环境测试

User

</>复制代码

  1. package bb;
  2. /**
  3. * Created by ozc on 2017/5/15.
  4. */
  5. public class User {
  6. private String name;
  7. private String password;
  8. private int id;
  9. public int getId() {
  10. return id;
  11. }
  12. public void setId(int id) {
  13. this.id = id;
  14. }
  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. public String getPassword() {
  22. return password;
  23. }
  24. public void setPassword(String password) {
  25. this.password = password;
  26. }
  27. @Override
  28. public String toString() {
  29. return "User{" +
  30. "name="" + name + """ +
  31. ", password="" + password + """ +
  32. "}";
  33. }
  34. }

IUser接口

</>复制代码

  1. public interface IUser {
  2. void save();
  3. }

UserDao

</>复制代码

  1. public class UserDao implements IUser {
  2. @Override
  3. public void save() {
  4. }
  5. }

userService

</>复制代码

  1. public class UserService {
  2. private UserDao userDao;
  3. public void save() {
  4. userDao.save();
  5. }
  6. }
测试Spring环境

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

创建UserDao实例--->@Repository

</>复制代码

  1. @Repository
  2. public class UserDao implements IUser {
  3. @Override
  4. public void save() {
  5. }
  6. }

创建userService实例,并注入userDao属性

</>复制代码

  1. @Service
  2. public class UserService {
  3. @Autowired
  4. private UserDao userDao;
  5. public void save() {
  6. userDao.save();
  7. }
  8. }

在Spring配置文件中使用注解扫描器

</>复制代码

测试:成功得到userService对象,并且userService对象含有userDao属性的值

</>复制代码

  1. public class Test2 {
  2. @Test
  3. public void test33() {
  4. ApplicationContext ac = new ClassPathXmlApplicationContext("spring-config.xml");
  5. UserService userService = (UserService) ac.getBean("userService");
  6. System.out.println(userService);
  7. }
  8. }

测试Hibernate环境

映射配置文件

</>复制代码

主配置文件加载映射文件

</>复制代码

创建SessionFactory,Session

</>复制代码

  1. @Repository
  2. public class UserDao implements IUser {
  3. @Override
  4. public void save(User user) {
  5. //得到SessionFactory
  6. SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
  7. //得到Session
  8. Session session = sessionFactory.openSession();
  9. session.beginTransaction();
  10. session.save(user);
  11. session.getTransaction().commit();
  12. session.close();
  13. }
  14. }

测试:

</>复制代码

  1. public class Test2 {
  2. @Test
  3. public void test33() {
  4. ApplicationContext ac = new ClassPathXmlApplicationContext("spring-config.xml");
  5. UserService userService = (UserService) ac.getBean("userService");
  6. userService.save(new User());
  7. }
  8. }

使用Spring创建SessionFactory对象

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

直接加载hibernate主配置文件

</>复制代码

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

</>复制代码

  1. @Repository
  2. public class UserDao implements IUser {
  3. @Autowired
  4. private SessionFactory sessionFactory;
  5. @Override
  6. public void save(User user) {
  7. //得到Session
  8. Session session = sessionFactory.openSession();
  9. session.beginTransaction();
  10. session.save(user);
  11. session.getTransaction().commit();
  12. session.close();
  13. }
  14. }

连接池交给Spring管理

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

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

</>复制代码

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

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

</>复制代码

  1. org.hibernate.dialect.MySQLDialect
  2. true
  3. update
  4. bb/User.hbm.xml

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

Spring管理事务

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

</>复制代码

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

userDao

</>复制代码

  1. @Repository
  2. public class UserDao implements IUser {
  3. @Autowired
  4. private SessionFactory sessionFactory;
  5. @Override
  6. public void save(User user) {
  7. sessionFactory.getCurrentSession().save(user);
  8. }
  9. }

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

</>复制代码

  1. @Service
  2. @Transactional
  3. public class UserService {
  4. @Autowired
  5. private UserDao userDao;
  6. public void save(User user) {
  7. userDao.save(user);
  8. }
  9. }

</>复制代码

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68737.html

相关文章

  • ssh(Spring+Struts2+hibernate)整合

    摘要:需求整合框架做一个保存用户的业务,业务比较简单,重在框架整合。 需求:整合ssh框架做一个保存用户的业务,业务比较简单,重在ssh框架整合。创建数据库和表 CREATE DATABASE ssh01; USE DATABASE; 表由Hibernate创建,可以看配置是否成功 一:导入jar包 Hibernate需要jar Hibernate基本jar mysql驱动 ...

    tulayang 评论0 收藏0
  • 纳税服务系统【总结】

    摘要:要是使用到日历的话,我们想到使用这个日历类上面仅仅是我个人总结的要点,如果有错误的地方还请大家给我指正。 纳税服务系统总结 纳税服务系统是我第一个做得比较大的项目(不同于javaWeb小项目),该项目系统来源于传智Java32期,十天的视频课程(想要视频的同学关注我的公众号就可以直接获取了) 我跟着练习一步一步完成需求,才发觉原来Java是这样用来做网站的,Java有那么多的类库,页面...

    ispring 评论0 收藏0
  • 慕课网_《基于SSH实现员工管理系统之框架整合篇》学习总结

    时间:2017年08月16日星期三说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:无学习源码:https://github.com/zccodere/s... 第一章:课程介绍 1-1 课程介绍 课程目录 1.ssh知识点回顾 2.搭建ssm开发环境 3.struts2整合spring 4.spring整合hibernate 5.案例:使用ssh框架开发...

    icattlecoder 评论0 收藏0
  • springboot整合hibernate和jpa

    摘要:首先我得先提出几个创建的项目的做法一来创建创建之后就能用或来导入这个项目了二先创建项目,在上安装相关的包例如只需引入即可实现热部署下面两个引入为了操作数据库包添 首先我得先提出几个创建springboot的项目的做法: 一、http://start.spring.io/来创建: showImg(https://segmentfault.com/img/bV3jC1?w=1914&h=8...

    smallStone 评论0 收藏0
  • Java3y文章目录导航

    摘要:前言由于写的文章已经是有点多了,为了自己和大家的检索方便,于是我就做了这么一个博客导航。 前言 由于写的文章已经是有点多了,为了自己和大家的检索方便,于是我就做了这么一个博客导航。 由于更新比较频繁,因此隔一段时间才会更新目录导航哦~想要获取最新原创的技术文章欢迎关注我的公众号:Java3y Java3y文章目录导航 Java基础 泛型就这么简单 注解就这么简单 Druid数据库连接池...

    KevinYan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<