由于Spring和Hibernate处于不同的层次,Spring关心的是业务逻辑之间的组合关系,Spring提供了对他们的强大的管理能力,而Hibernate完成了OR的映射,使开发人员不用再去关心SQL语句,直接与对象打交道。将Hibernate做完映射之后的对象交给Spring来管理是再合适不过的事情了,Spring也同时提供了对Hibernate的SessionFactory的集成功能。所以spring+hibernate整合对我们实际开发是非常有必要的。Spring整合hibernate有多种方式,我用的只是其中的一种,我这种不需要hibernate的配置文件,直接配置我们的beans.xml里了。下面我们具体来看一下:
首先我们先把需要的实体类定义出来,我这里定义的是:
Users.java:
public class Users {
private int id;
private String name;
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;
}
}
这里我们整合spring+hibernate主要是来整合的细节,业务逻辑和分层在此就忽略不计了,我直接把所有的东西都写在了test类里面了。
下面我们来看一下我们的beans.xml的配置,我们先把代码贴出来,然后再下面一点点的深入详解:
Beans.xml:
<?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:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
">
//配置数据库相关信息,配置数据源,它将会被注入到sessionfactory中
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<propertyname="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="url"
value="jdbc:sqlserver://localhost:1433; DatabaseName=test" />
<property name="username" value="sa"></property>
<property name="password" value="123456"></property>
</bean>
//构建sessionfactory的bean,为把sessionfactory注入到dao层构建bean
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
lazy-init="false">
//注入datasource,给sessionfactoryBean内setdatasource提供数据源
<property name="dataSource">
<ref bean="dataSource" />
</property>
//加载实体类的配置文件
<property name="mappingResources">
<list>
<value>com/bzu/test/Users.hbm.xml</value>
<value>com/bzu/test/Log.hbm.xml</value>
</list>
</property>
//设置hibernate的属性,相当于hibernate.cfg.xml中的设置属性
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
<prop key="hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
//把sessionfactory注入dao层
<bean id="test" class="com.bzu.test.test" lazy-init="false">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
</beans>
通过上面的注释我想大家应该大体对这个配置文件明白些了吧。其实这个也很好理解,大体思路就是首先写一个datasource的bean,这个bean主要是为hibernate提供数据源,大家肯定可以想到这个数据源将会被注入到sessionfactory里面,因为构建sessionfactory肯定会需要到这个数据源的信息。
下一步我们在写一个sessionfactory的bean,这个bean将被我们用在注入到dao层,进行数据库操作,当然,他还需要一些属性进行注入,比如我们刚才写的datasource,除了这个之外我们还需要配置我们的实体,spring给我们提供了hbm文件和实体类等多种配置方法。Hbm文件配置我们这样写:
<property name="mappingResources">
<list>
<value>com/bzu/test/Users.hbm.xml</value>
<value>com/bzu/test/Log.hbm.xml</value>
</list>
</property>
属性值为mappingResources,这个属性值是一个list,我们可以配置他的value,把我们的配置文件一个个的加入进来。如果你没有写配置文件,而是以注解的方式配置的实体类,你当然也可以以实体类的形式加到这里来:你可以以下方式进行配置:把属性的name设置成annotatedClasses
<property name="annotatedClasses">
<list>
<value>com.bzu.model.User</value>
<value>com.bzu.model.Log</value>
</list>
</property>
说完配置sessionfactory的的实体,下一步我们还要配置hibernate的的一些属性,比如创建数据库表的方式、数据库方言等。设置hibernate的属性,我们用hibernateProperties来配置,配置方式,上面代码已经很清楚的写到了,在这就不赘述了。
好了,配置完sessionfactory这个bean,下一步我们就要把sessionfactory注入到我们的dao层进行数据库操作了。这一步就比较简单了,相信大家能看懂上面的代码。
看完配置文件,接下来我们就要来测试一下来,试试能不能用hibernate对我们的数据库进行访问了。具体来看一下代码:
package com.bzu.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.transaction.annotation.Transactional;
public class test {
private static SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(
"beans.xml");
Session session = sessionFactory.openSession();
// ((SessionFactory) ctx.getBean("sessionFactory")).openSession();
Users user = new Users();
user.setName("nihao");
session.save(user);
}
}
大家可以清楚的看到,上面的内容很简单,我们写具体的架构的东西,直接把sessionfactory注入到了test类了,当然了,我们实际开发应用中不会手动的去加载beans.xml的,这里主要是为了测试,测试一下:
打印出sql语句:
Hibernate:insertintousers(name)values(?)
好了,基本上我们这个hibernate+spring整合的差不多了。但在调试这个程序的时候还是出了点小差错,最后弄了半天才发现错误所在,我刚开始写的时候,是把main里面的操作都抽出一个方法了,然后再main方法中我是这样调用的newTest().sava(user),直接就出事了。异常的原因就是我new出来的test的对象就不受spring容器管理了,所以在调用save方法时根本sessionfactory就没有被注入进去,所以希望大家注意这一点。
分享到:
相关推荐
java程序员-从笨鸟到菜鸟.pdf
### Java程序员成长之路——从菜鸟到笨鸟 #### 一、引言 《Java程序员由菜鸟到笨鸟》是一本由曹胜欢编写的书籍,旨在帮助初学者掌握Java编程的基础知识,并逐步进阶至更高级的应用场景。本书不仅适合初学者作为...
曹胜欢在《JAVA程序员 从笨鸟到菜鸟.pdf》中分享了他个人学习Java的经历,从迷茫到逐渐成长的过程。他强调了自学的重要性,并鼓励初学者不要怕走弯路,同时希望自己的经验可以帮助到同样在学习Java的初学者。 2. ...
### Java程序员从笨鸟到菜鸟 #### 一、开发环境搭建与基本语法 ##### 开发环境搭建 在开始Java的学习之前,首先需要搭建一个合适的开发环境。这通常涉及到以下步骤: 1. **JDK(Java Development Kit)安装**:...
Java程序员的成长之路是一个充满挑战与探索的过程,从初学者到熟练掌握各项技能,需要系统性的学习和实践。"Java程序员由菜鸟到笨鸟学习文档"就是这样一个旨在帮助初入Java世界的学习者逐步进阶的资源。它覆盖了从...
资源名称:《Java程序员-从笨鸟到菜鸟》PDF 下载资源目录:作者简介:..........................................................................................................................................
java程序员由菜鸟到笨鸟 一本值得java程序员看的书籍 给大家分享一下 喜欢的评个好评 谢谢
Spring + Hibernate + Struts Src源码 QQ:afa1588@qq.com Email: kfu_lufazhan@126.com 博客: www.vipaspx.com 此项目已经获取项目专利,本实例代码仅限于学习和交流之用. 已经获取实例源代码的朋友,请不要进行...
根据提供的文件信息,“Java程序员由菜鸟到笨鸟”是一本旨在帮助初学者成长为合格Java开发者的书籍。本书作者为曹胜欢,发布日期为2018年3月19日。下面将从多个角度对本书涉及的重要知识点进行概述。 ### 一、Java...
根据提供的文件信息,“Java程序员由菜鸟到笨鸟”是一本旨在帮助初学者成长为合格Java开发者的书籍。本书作者为曹胜欢,发布日期为2018年3月17日。以下是从该书的标题、描述以及部分可能包含的内容中提炼出的关键...
45-Struts+Hibernate完成分页笔记 46-Spring入门 47Spring_IOC(下)笔记 47-Spring_IOC-v(上)笔记 48Spring_AOP笔记 49-Spring_JDBC模板笔记 50-Spring_Struts、Hibernate支持笔记 51-52使用Struts + Spring + ...