1、使用Spring的IOC容器,将对象之间的依赖关系交给Spring,可以降低组件之间的耦合性,可以更专注于应用逻辑。同时可以提供众多服务,数据库事务管理,WS等。

2、Hibernate是对JDBC的轻量级的对象封装,是一个独立的对象持久化对象。

1)对象/关系数据库映射(ORM)

它使用时只需要操纵对象,使开发更对象化,抛弃了数据库中心的思想,完全的面向对象思想。

2) 事务Transaction(org.hibernate.Transaction)

应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短。它通过抽象将应用从底层具体的JDBC、JTA以及CORBA事务隔离开。某些情况下,一个Session之内可能包含多个Transaction对象。尽管是否使用该对象是可选的,但无论是使用底层的API还是使用Transaction对象,事务边界的开启与关闭是必不可少的。

3)简洁的HQL编程。

将上述两个框架结合起来实现对数据库的操作将继承两个框架的优点。

3、Spring与Hibernate框架整合

1)创建一个bean与与之对应的bean.hbm.xml文件,使用Hibernate的ORM对数据库表进行设置。

bean:

package com.ruijie.bean;public class Person {private int id;private String name;private String password;public int getId() {return this.id;}public void setId(int id) {this.id = id;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public String getPassword() {return this.password;}public void setPassword(String password) {this.password = password;}}

Person.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.ruijie.bean"><class name="Person" table="person"><id name="id" type="integer"><generator class="identity"></generator></id><property name="name" length="20" not-null="true"></property><property name="password" length="20" not-null="true"></property></class></hibernate-mapping>

2)面对接口编程。创建一个接口操作数据库,并实现。

PersonServer:

public interface PersonServer {public abstract void save(Person person);public abstract void update(Person person);public abstract Person getPerson(int id);public abstract List<Person> getAllPerson();public abstract void delete(int id);}

实现类:

@Transactional
public class PersonServerImpl implements PersonServer {private SessionFactory sessionFactory;public void save(Person person){sessionFactory.getCurrentSession().persist(person);}public void update(Person person){sessionFactory.getCurrentSession().merge(person);}@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)public Person getPerson(int personid){return (Person)sessionFactory.getCurrentSession().get(Person.class, personid);}public void delete(int personid){sessionFactory.getCurrentSession().delete(sessionFactory.getCurrentSession().load(Person.class, personid));}@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)@SuppressWarnings("unchecked")public List<Person> getAllPerson(){       return sessionFactory.getCurrentSession().createQuery("from Person").list();}public SessionFactory getSessionFactory() {return this.sessionFactory;}public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}}

3)配置beans.xml文件,配置bean和数据库源等。

<?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:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"><!-- 设置datasource --><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="url" value="jdbc:sqlserver://192.168.54.31:1433;DatabaseName=testdb"/><property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/><property name="username" value="sa"/><property name="password" value="shyfzx@163"/><!-- 连接池启动时的初始值 --><!--  <property name="initialSize" value="1"/>连接池的最大值<property name="maxActive" value="500"/>最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止<property name="maxIdle" value="2"/>最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请<property name="minIdle" value="1"/> --></bean><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mappingResources"><list><value>com/ruijie/bean/Person.hbm.xml</value></list></property><property name="hibernateProperties"><value>hibernate.dialect=org.hibernate.dialect.SQLServerDialect</value></property></bean><bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"/></bean><tx:annotation-driven transaction-manager="txManager"/><bean id="personService" class="com.ruijie.server.impl.PersonServerImpl"><property name="sessionFactory" ref="sessionFactory"/></bean>
</beans> 

4)编写测试用例测试。

public class PersonServerTest {private Logger logger = Logger.getLogger(this.getClass().getName());private static PersonServer personServer;@BeforeClasspublic static void setupBean(){ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");personServer = (PersonServer) context.getBean("personService");}@Testpublic void testSave() {logger.debug("开始插入数据");Person person = new Person();person.setName("ruijie");person.setPassword("awgagwg");personServer.save(person);logger.debug("数据插入成功");}@Testpublic void testUpdate(){Person person = new Person();person.setId(7);person.setName("李四");person.setPassword("wgeage");personServer.update(person );}@Testpublic void testDelete(){personServer.delete(7);}@Testpublic void testGetPerson(){Person person = personServer.getPerson(6);System.out.println("姓名:"+person.getName()+",密码:"+person.getPassword());}@Testpublic void testGetAllPerson(){List<Person> persons = personServer.getAllPerson();for (Person person : persons) {System.out.println("姓名:"+person.getName()+",密码:"+person.getPassword());}}
}

一个小小的demo: SpringHibernateDemo

Spring与Hibernate结合使用相关推荐

  1. 【spring框架】spring整合hibernate初步

    spring与hibernate做整合的时候,首先我们要获得sessionFactory. 我们一般只需要操作一个sessionFactory,也就是一个"单例",这一点很适合交给 ...

  2. Spring MVC + Hibernate JPA + Bootstrap 搭建的博客系统

    Spring MVC + Hibernate JPA + Bootstrap 搭建的博客系统 Demo 相关阅读: 1.Spring MVC+Hibernate JPA+ Bootstrap 搭建的博 ...

  3. Spring+SpringMvc+Hibernate 框架搭建

    2019独角兽企业重金招聘Python工程师标准>>> 框架篇:Spring+SpringMVC+hibernate整合开发 一.建立项目 1.新建一个空项目project 相当于e ...

  4. 在Spring、Hibernate中使用Ehcache缓存

    前一篇http://blog.csdn.net/ibm_hoojo/article/details/7739181介绍了Ehcache整合Spring缓存,使用页面.对象缓存:这里将介绍在Hibern ...

  5. 【Spring】Spring系列6之Spring整合Hibernate

    6.Spring整合Hibernate 6.1.准备工作 6.2.示例 com.xcloud.entities.book com.xcloud.dao.book com.xcloud.service. ...

  6. Spring整合Hibernate图文步骤

    工具:myeclipse9.0 Spring版本:2.5.6 Hibernate版本:3 昨天花了一下午时间把Spring和Hibernate整合到了一起,今天做一个笔记. 首先建立java Proj ...

  7. spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)

    今天是spring的最后一节课,这节课老师讲了spring与hibernate整合完成增删改查的操作,这是很重要的一节课,这也是第一次真正的实现spring结合Hibernate和数据库连接上,下面是 ...

  8. Spring与Hibernate两种组合方式

    Spring与Hibernate大致有两种组合方式,主要区别是一种是在Hibernate中的hibernate.cfg.xml中配置数据源,一种是借助Spring的jdbc方式在Spring的appl ...

  9. 使用IDEA整合spring4+spring mvc+hibernate

    配置文件  spring-mvc.xml 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans ...

  10. Spring + Struts + Hibernate联合开发(多对一关系)

    一.项目搭建的整体效果: 1.建立好项目后,需要再建立两个单独的源文件夹,分别为test和config 在config下分别建立struts,spring和hibernate三个文件夹,以便分别放这三 ...

最新文章

  1. 微信小程序扫描二维码
  2. vsftp配置日志及其启用本地时间
  3. ConcurrentHashMap 原理解析
  4. VTK:PolyData之NullPoint
  5. sql server常用性能计数器
  6. 冒泡和快速排序的时间复杂度_三分钟快速记住冒泡排序算法
  7. Intro.js轻松搞定页面引导流程
  8. 直男不懂女人心?10953 条数据告诉你女王节送什么口红色号!
  9. Apache服务安全加固及Apache优化
  10. python怎么把图片变成字符_用Python把图片变成字符画
  11. kettle中止是怎么用的_抖音dou+怎么投?抖加怎么投有效?这样投性价比最高
  12. SQL SERVER 和ACCESS/excel的数据导入导出
  13. c++中char类型在内存中的表示以及取值范围
  14. 前端学习之路Electron——全局注册、注销快捷键
  15. python项目源码和注解_python源代码和注释 - 随笔分类 - 秦朗的天空 - 博客园
  16. 肯德基中国门店将限时发售植物肉汉堡
  17. 插上U盘没反应/U盘不显示/显示U盘图标但是不显示盘符
  18. 将git项目提交到其他的git仓库
  19. ps字体安装快捷安装方法
  20. 计算机图形学 第6章 三维变换与投影

热门文章

  1. 启明智显分享| 2.4寸旋钮串口屏在健身器材上的应用
  2. 【iMX6ULL】触觉 imx6ull开发板交叉编译环境搭建
  3. Csharp: Winform 顏色選擇器 Color convert RGB and RGB convert Color
  4. Oracle学习笔记:a inner join b与from a,b where a.x=b.x的差异
  5. 国行iphone第一次安装APP网络状况
  6. Python 学习笔记10
  7. java实现串的匹配和替换
  8. Git:常用命令(二)
  9. 《信息存储理论》笔记
  10. 有服务器风扇声音对胎儿有影响吗,大噪音对胎儿的影响