Spring4 整合 Hibernate3 基本使用(通过注入 SessionFactory)

步骤 1 :导入 Maven 依赖

1、Spring4 的模块

spring-core、spring-context、spring-beans、spring-jdbc、spring-orm、spring-tx、spring-test

具体的 maven 配置,可以到 Maven Repository: Search/Browse/Explore http://mvnrepository.com/ 中查询,这里为了节约篇幅就不粘贴出来了。

2、mysql 驱动

mysql-connector-java

3、hibernate3

这一节我们集成 Hibernate3,我们将在将来的文章中介绍如何集成 Hibernate4。

org.hibernate

hibernate-core

3.6.10.Final

4、Druid 数据源

druid

5、javassist

这是 Hibernate 的依赖包。

org.javassist

javassist

3.20.0-GA

6、aspectjweaver

(Spring AOP 依赖)

org.aspectj

aspectjweaver

1.8.7

步骤 2 :编写 beans 核心配置文件

0、基本配置

1、配置数据源

2、配置 SessionFactory

创建 Spring 的 SessionFactory 工厂 ,如果使用的是 Annotation 的方式,不能使用 LocalSessionFactoryBean ,而应该使用 org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean 。

com.liwei.model

org.hibernate.dialect.MySQLDialect

true

update

false

注意:我们集成 Hibernate3 使用的类是 org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean。

3、配置和事务相关

配置 Spring 事务处理,只有配置了事务处理之后, Spring 才能有效的管理事务。

(1)配置事务管理器

注意: 注意,这里要根据不同的持久化框架选择不同的事务管理器 。

(2)配置事务通知

步骤 3:编写实体类

为实体类添加 Hibernate 的 Annotation 或者 hbm 文件。

并且添加标准化的 JPA 注解。

Table(name = "t_group")

@Entity

public class Group {

private Integer id;

private String name;

@GeneratedValue

@Id

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

步骤4:编写基于 Hibernate 的 DAO 层

注意:我们这里 Hibernate3 持久化的操作是通过依赖注入了 SessionFactory 来完成的。所以我们在每个 DAO 层都要依赖注入 SessionFactory ,通过 SessionFactory 的 getCurrentSession() 方法来完成对实体类的操作。

即 1、在相应的 DAO 中注入相应的 SessionFactory(补充说明 SessionFactory 有很多种,根据集成的持久化框架和版本所决定);

2、如果通过 Spring 来管理相应的 SessionFactory,不再使用 factory.openSession() 开启 session ,而应该是用 facotry.getCurrentSession 来打开 Session ,这个 Session 就会被 Spring 所管理,此时开发人员不用进行事务控制,也不用关闭 Session ,全部由 Spring 容器来完成。

我们的问题:所有的 DAO 层类都要依赖注入 SessionFactory ,然后再获得 Session ,重复代码太多了。

解决方案:编写一个 DAO 层的基类,所有的 DAO 层类都继承这个基类就可以了。

@Repository(value="groupHibernateDao")

public class GroupHibernateDao {

private SessionFactory sessionFactory;

public SessionFactory getSessionFactory() {

return sessionFactory;

}

@Autowired

public void setSessionFactory(SessionFactory sessionFactory) {

this.sessionFactory = sessionFactory;

}

public Session getSession(){

return sessionFactory.getCurrentSession();

}

public void groupAdd(Group group){

getSession().save(group);

System.out.println(group.getId());

}

}

步骤5:编写测试方法:

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(value = {"classpath:beans.xml"})

public class HibernateSpringTest {

@Autowired

private GroupHibernateDao groupHibernateDao;

@Test

public void testAdd() {

Group group = new Group();

group.setName("技术研发部");

groupHibernateDao.groupAdd(group);

User user =new User("liwei","123456","李威威");

user.setGroup(group);

userHibernateDao.add(user);

}

}

进一步研究

我们需要把 DAO 层抽象成接口,这样我们可以添加不同的实现。

public interface IGroupDao {

public void add(Group group);

public Group load(int id);

}

public interface IUserDao {

public void add(User user);

public void update(User user);

public void delete(User user);

public User load(int id);

public List list(String hql, Object[] params);

}

此时实现类的声明部分变为:

@Repository(value="groupHibernateDao")

public class GroupHibernateDao implements IGroupDao{

@Repository

public class UserHibernateDao implements IUserDao{

上面我们指出了每一个 DAO 层都要注入 SessionFactory,我们可以写一个基类 BaseDao 完成依赖注入。

public class BaseDao {

private SessionFactory sessionFactory;

public SessionFactory getSessionFactory() {

return sessionFactory;

}

@Autowired

public void setSessionFactory(SessionFactory sessionFactory) {

this.sessionFactory = sessionFactory;

}

// 获取 Session,注意:没有使用 openSession() ,使用 getCurrentSession()才能被 Spring 管理

public Session getSession(){

return sessionFactory.getCurrentSession();

}

}

此时实现类的声明部分变为:

@Repository(value="groupHibernateDao")

public class GroupHibernateDao extends BaseDao implements IGroupDao{

@Repository

public class UserHibernateDao extends BaseDao implements IUserDao{

源码可以在下面的网址中下载:

weimingge14/Spring4IntegrationHibernate3: 使用 Spring4 集成 Hibernate3 的基础配置 https://github.com/weimingge14/Spring4IntegrationHibernate3

hibernate4 mysql配置文件_Spring4 整合 Hibernate3 基本使用(通过注入 SessionFactory)相关推荐

  1. hibernate4 mysql配置文件_Hibernate的数据库连接信息配置文件hibernate.properties与hibernate.cfg.xml 区别...

    Hibernate的数据库连接信息配置文件hibernate.properties与hibernate.cfg.xml 区别 一.问题提出 测试运行一个"MyEclipse2014.Stru ...

  2. hibernate整合mysql配置文件_springboot整合hibernate配置

    添加sprngboot依赖<?xml  version="1.0" encoding="UTF-8"?> xmlns:xsi="http: ...

  3. Spring4 整合 Hibernate3 基本使用(通过注入 SessionFactory)

    Spring4 整合 Hibernate3 基本使用(通过注入 SessionFactory) Spring4 整合 Hibernate3 基本使用通过注入 SessionFactory 步骤 1 导 ...

  4. 整合Hibernate3.x

    As of Spring 3.0, Spring requires Hibernate 3.2 or later. Hibernate 3和Hibernate 4有一些区别,所以对于spring而已, ...

  5. java读取mysql配置文件_Linux运维:MySQL读写分离解决方案

    一次性付费进群,长期免费索取教程,没有付费教程. 进微信群回复公众号:微信群:QQ群:460500587  教程列表 见微信公众号底部菜单 |  本文底部有推荐书籍  微信公众号:计算机与网络安全 I ...

  6. web服务器 linux+apache+tomcat+mysql+jsp+php 整合安装

    2019独角兽企业重金招聘Python工程师标准>>> web服务器 linux+apache+tomcat+mysql+jsp+php 整合安装 自己的安装过程,以前发表在新浪博客 ...

  7. SSM框架整合:各种配置文件的整合和详解

    SSM框架整合:各种配置文件的整合和详解 前言 学习了ssm框架的整合之后,对于数量众多的配置文件,和各种不同的配置方式感到甚是头疼,接下来教给大家一个清晰明白的配置,分门别类的配置不同的xml文件. ...

  8. SUSE Linux 11里Nginx+Resin+JSP+Memcached+MySQL安装配置整合

    服务器运维与网站架构|Linux运维|X研究 let's face reality,loyalty to an ideal! 首页 Linux Nginx Security Shell 服务器架构 互 ...

  9. mysql 配置文件绑定ip_(三)设置mysql允许外部IP连接的解决方法及遇到的坑说明...

    用命令查询端口情况:netstat -an | grep LISTEN 发现mysql用到3306这个端口,只能被127.0.0.1访问(0.0.0.0的就是每个IP都有的服务,写明哪个IP的就是绑定 ...

最新文章

  1. 第二十四章:页面导航(六)
  2. Ubuntu下 安装 window 虚拟机
  3. Enthought Canopy中第三方软件包的安装(package manager中不含的包)
  4. 解决: cp -rf 命令中参数 -f 失效 ( 依旧要手动确认 )
  5. java对焦_【Camera】手机相机自动对焦的3种方式及原理
  6. UI设计灵感|如果你想设计一款有趣的状态提示,看这里OOPS!
  7. OpenMP变量的私有与共享
  8. R_地图上的热力气泡图
  9. NetSetMan Pro(ip快速切换工具)官方中文版V5.1.0 | 电脑ip切换软件下载
  10. 输出英文字母ch在英文字母表中的位置
  11. linux mint卸载桌面环境,在Linux Mint 19/Ubuntu 18.04系统上安装Deepin桌面环境的方法
  12. # 将日期的符串(Sat Mar 21 08:00:00 CST 2020 )转换为指定字符串日期(yyyy-MM-dd HH:mm:ss)
  13. 添加或修改Kindle图书封面
  14. 详解 Jenkins 自动化部署平台
  15. Rita Hayworth and Shawshank Redemption
  16. 滨江学院c语言期中考试试题,南信大滨江学院linux期末作业.doc
  17. AF Haf tuning <4>
  18. 码、候选码、主键、主属性
  19. 学习篇 | 浮点数的表示规则
  20. matlab验证dtft移位性质,数字信号处理教程:MATLAB释义与实现(第2版)

热门文章

  1. 爱,请在来得及的时候说出口
  2. HttpMessageConverter 消息转换器
  3. 中国中药配方颗粒行业竞争状况分析与投资前景展望研究报告2022-2027年版
  4. 网络精通-VLAN的高级配置之基于IP地址划分VLAN
  5. 什么是信息集成(Information Integration)
  6. Arm和Unity联合推出:适用于移动应用程序的3D美术优化-[5]光照
  7. 蓝桥杯|基本数学运算|高效|常用二进制运算|素数火箭版|n次方火箭版|全排列|(二)
  8. React中如何使用ref
  9. 随笔一计:微信h5支付商家存在未配置的参数xxx
  10. python gpu并行计算_【Python - GPU】基于Python的GPU加速并行计算 -- pyCUDA