- 浏览: 3008911 次
- 性别:
- 来自: 河南
文章分类
- 全部博客 (340)
- Java综合 (26)
- 程序人生 (53)
- RIA-ExtJS专栏 (18)
- RIA-mxGraph专栏 (4)
- RIA-Flex4专栏 (43)
- 框架-Spring专栏 (16)
- 框架-持久化专栏 (22)
- 框架-Struts2专栏 (11)
- 框架-Struts专栏 (12)
- SQL/NOSQL (12)
- 报表/图表 (2)
- 工作流 (5)
- XML专栏 (4)
- 日常报错解决方案 (5)
- Web前端-综合 (12)
- Web/JSP (14)
- Web前端-ajax专栏 (14)
- Web前端-JQuery专栏 (9)
- IDE技巧 (6)
- FILE/IO (14)
- 远程服务调用 (2)
- SSO单点登录 (2)
- 资源分享 (22)
- 云计算 (1)
- 项目管理 (3)
- php专栏 (1)
- Python专栏 (2)
- Linux (1)
- 缓存系统 (1)
- 队列服务器 (1)
- 网络编程 (0)
- Node.js (1)
最新评论
-
hui1989106a:
我的也不能解压,360和好压都试了,都不行
《Spring in Action》完整中文版分享下载 -
temotemo:
这些example有些过时了,官方建议使用HBase-1.0 ...
Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询 -
zy8102:
非常感谢~
HeadFirst系列之七:《深入浅出SQL》原版高清PDF电子书分享下载 -
zy8102:
重命名了一下搞定了
HeadFirst系列之七:《深入浅出SQL》原版高清PDF电子书分享下载 -
zy8102:
为什么下载以后老解压不了呢?
HeadFirst系列之七:《深入浅出SQL》原版高清PDF电子书分享下载
有时候为了为了操作方便,我们时常在spring整合hibernate的WEB项目中省去了用hibernate.cfg.xml的麻烦,将hibernate的信息直接配置在Spring配置文件中
下面的都是针对Spring整合Hibernate(注解方式的hibernate)来说的
SH整合必须包
其中spring必须包spring.jar和common-logging.jar
hibernate必须包hibernate.jar和六个其他必须包
剩下的就是用于数据连接的数据库连接包mysql.jar
用于注解的jpa.jar
用于连接池的c3p0.jar
用于测试的junit.jar
hibernate.cfg.xml和applicationContext.xml原始配置组合方式:
hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--
这个只在DBScriptExport.java的new AnnotationConfiguration().configure()或者
new Configuration().configure();这里面由于生成数据库表,或者通过
config.buildSessionFactory都需要用到下面这四行关于数据库的配置.实际项目中,
如果不适用到硬编码做这两件事,而是通过和Spring配合,那么这四行可以不写
-->
<!--
<property name="hibernate.current_session_context_class">thread</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///test</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
-->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!-- mapping类声明-->
<mapping class="com.javacrazyer.domain.User" />
</session-factory>
</hibernate-configuration>
上面注释其实也没讲清楚,其实就是如果单独的hibernate项目来说,如果涉及到数据库操的任何操作代码,那么你必须配那段被注释掉的数据库连接信息,如果是整合Spring的话,那么就不用配置了,Spring提供了对hibernate支持的SessionFactory可以再注入后获取SESSION,然后你就可以任意去实现数据库操作了
applicationContext.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:aop="http://www.springframework.org/schema/aop"
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/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- 使用C3P0的连接池技术 -->
<bean id="dataSource" destroy-method="close"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql:///test" />
<property name="user" value="root" />
<property name="password" value="root" />
<!-- 指定连接数据库连接池的最大连接数 -->
<property name="maxPoolSize" value="20" />
<!-- 指定连接数据库连接池的最小连接数 -->
<property name="minPoolSize" value="1" />
<!-- 指定连接数据库连接池的初始化连接数 -->
<property name="initialPoolSize" value="1" />
<!-- 指定连接数据库连接池的连接的最大空闲时间 -->
<property name="maxIdleTime" value="20" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<!--指定hibernate配置文件的位置-->
<property name="configLocation" value="classpath:hibernate.cfg.xml" />
<!--
那么这里给sessionFactory注入dataSource的解释:其实就是相当于单独的hibernate项目中使用
config.buildSessionFactory()这样手动构建SessionFactory一样,必须提供有关数据库的参数配
置信息也就是在hibernate.cfg.xm中 配置的数据库信息,这样使用session才能关联上数据库
-->
<property name="dataSource" ref="dataSource" />
</bean>
<!--如果不配置SessionFactory,配置Spring自带的JdbcTemplate也挺好,然后注入到需要用到的类中去-->
<!--
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<description>Config jdbcTemplate</description> <property
name="dataSource" ref="dataSource" /> </bean>
-->
<!--
下面是Hibernate的事务管理器 ,如果是单独spring框架的项目中配置spring事务,那么就没有上边
的sessionFactory而只会有dataSource,那么下面属性就不是sesionFactory而是DataSource了
-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 启用注解方式的声明式事务支持 -->
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- =============================================== -->
<bean id="userDao" class="com.javacrazyer.dao.UserDaoHibernateImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="sf" class="com.javacrazyer.service.ServiceFacade">
<property name="userDao" ref="userDao" />
</bean>
</beans>
当然这个配置中的sessionFactory是针对注解方式的配置的,如果是非注解方式的应该是:org.springframework.orm.hibernate3.LocalSessionFactoryBean
上面关于SessionFactory注释说过了,如果不需要hibernate有关数据库的操作的话,那么就不要结合hibernate框架而是通过Spring自带的JdbcTemplate来进行数据库操作
不要hibernate.cfg.xml,将hibernate基本信息配置在applicatonContext.xm中
applicationContext.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:aop="http://www.springframework.org/schema/aop"
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/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- 使用C3P0的连接池技术 -->
<bean id="dataSource" destroy-method="close"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql:///test" />
<property name="user" value="root" />
<property name="password" value="root" />
<!-- 指定连接数据库连接池的最大连接数 -->
<property name="maxPoolSize" value="20" />
<!-- 指定连接数据库连接池的最小连接数 -->
<property name="minPoolSize" value="1" />
<!-- 指定连接数据库连接池的初始化连接数 -->
<property name="initialPoolSize" value="1" />
<!-- 指定连接数据库连接池的连接的最大空闲时间 -->
<property name="maxIdleTime" value="20" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="format_sql">true</prop>
<prop key="show_sql">true</prop>
<prop key="cache.use_query_cache">true</prop>
<prop key="cache.provider_class">
org.hibernate.cache.HashtableCacheProvider
</prop>
<prop key="cache.provider_class">
org.hibernate.cache.EhCacheProvider
</prop>
</props>
</property>
<!-- 针对xml而非注解方式的资源配置方式一 -->
<!-- <property name="mappingResources"> <list>
<value>com/javacrazyer/domain/user.hbm.xml</value> </list>
</property> -->
<!-- 针对xml而非注解方式的资源配置方式二 -->
<!--<property name="mappingLocations"> <list> <value>
classpath:com/javacrazyer/domain/user.hbm.xml </value> </list>
</property>-->
<property name="annotatedClasses">
<list>
<value>com.javacrazyer.domain.User</value>
</list>
</property>
</bean>
<!--
下面是Hibernate的事务管理器 ,如果是单独spring框架的项目中配置spring事务,那么就没有上边
的sessionFactory而只会有dataSource,那么下面属性就不是sesionFactory而是DataSource了
-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 启用注解方式的声明式事务支持 -->
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- =============================================== -->
<bean id="userDao" class="com.javacrazyer.dao.UserDaoHibernateImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="sf" class="com.javacrazyer.service.ServiceFacade">
<property name="userDao" ref="userDao" />
</bean>
</beans>
关于上面两种配置hbm.xml文件的方式,如果文件有几十个的话,没必要多写出来可以写成通配符的样子,如下
<property name="mappingResources">
<list>
<value>classpath:com/javacrazyer/**/*.hbm.xml</value>
</list>
</property>
注意与第一种方式不同的是applicatonContext.xml中只有sessionFactory发生了变化,数据源依旧注入到里面去,原来该配置hibernate.cfg.xml文件位置的配置现在换成了,众多行与第一种方式中hibernate.cfg.xml中类似的信息配置。
这样来说呢,更加省事些,当然我指的是SH结合的情况下,如果是hibernate单独的项目,必然用到new AnnotationConfiguration.config()就必然需要默认查找src下的hibernate.cfg.xml
用到的User.java
package com.javacrazyer.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="user")
public class User {
@Id
@GeneratedValue
private Long id;
private String username;
private String pwd;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String toString(){
return "id=" + id + ",username=" + username + ",pwd=" + pwd;
}
}
UserDao.java
package com.javacrazyer.dao;
import java.io.Serializable;
import java.util.List;
import com.javacrazyer.domain.User;
public interface UserDao {
void add(User user);
void delete(User user);
void update(User user);
User findById(Serializable id);
List<User> findAll();
}
UserDaoHibernateImpl.java
package com.javacrazyer.dao;
import java.io.Serializable;
import java.util.List;
import org.hibernate.SessionFactory;
import com.javacrazyer.domain.User;
public class UserDaoHibernateImpl implements UserDao {
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public void add(User user) {
this.sessionFactory.getCurrentSession().save(user);
}
public void delete(User user) {
this.sessionFactory.getCurrentSession().delete(user);
}
public List<User> findAll() {
return (List<User>)this.sessionFactory.getCurrentSession().createQuery("from User").list();
}
public User findById(Serializable id) {
return (User)this.sessionFactory.getCurrentSession().load(User.class, id);
}
public void update(User user) {
user = (User)this.sessionFactory.getCurrentSession().merge(user);
}
}
门面服务类ServiceFacade .java
package com.javacrazyer.service;
import java.util.List;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
import com.javacrazyer.dao.UserDao;
import com.javacrazyer.domain.User;
@Transactional(isolation=Isolation.READ_COMMITTED)
public class ServiceFacade {
//依赖的对象:主动去获取
private UserDao userDao;
public ServiceFacade(){}
//构造器
public ServiceFacade(UserDao userDao){
this.userDao = userDao;
}
//set方法
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
public void addUser(User user){
userDao.add(user);
}
@Transactional(readOnly=true)
public User findById(Long id){
return userDao.findById(id);
}
@Transactional(readOnly=true)
public List<User> findAll(){
return userDao.findAll();
}
}
测试类HibernateTest .java
package com.javacrazyer.service.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.javacrazyer.domain.User;
import com.javacrazyer.service.ServiceFacade;
public class HibernateTest {
@Test
public void addUser(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
ServiceFacade sf = (ServiceFacade)context.getBean("sf");
User user = new User();
user.setUsername("test1");
user.setPwd("test1");
sf.addUser(user);
System.out.println(user);
}
}
题外话:
针对第一种方式hibernate.cfg.xml中如果配置了数据库信息的,下面这两个类有必要看下
生成数据库脚本的DBScriptExport .java
package com.javacrazyer.dao;
import java.sql.SQLException;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test;
/**
* 根据对象关系映射文件直接生成数据库表或生成建表的脚本
*
*
*/
public class DBScriptExport {
@Test
public void export2DB() {
// 加载Hibernate的全局配置文件,config()默认传入src下面的hibernat.cfg.xml配置文件
Configuration config = new AnnotationConfiguration().configure();
SchemaExport export = new SchemaExport(config);
export.create(true, true);
}
public static void export2File(String dest) {
Configuration config = new AnnotationConfiguration().configure();
SchemaExport export = new SchemaExport(config);
export.setOutputFile(dest).setDelimiter(";").setFormat(true).create(
true, false);
}
}
用于获取session的 HibernateUtils .java
package com.javacrazyer.dao;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
private static SessionFactory factory;
private HibernateUtils() {}
static {
Configuration cfg = new AnnotationConfiguration().configure();
factory = cfg.buildSessionFactory();
}
public static SessionFactory getSessionFactory() {
return factory;
}
public static Session getSession() {
return factory.getCurrentSession();
}
public static void closeSession(Session session) {
if (session != null) {
if (session.isOpen()) {
session.close();
}
}
}
}
测试类.java
package com.javacrazyer.service.test;
import org.hibernate.classic.Session;
import org.junit.Test;
import com.javacrazyer.dao.HibernateUtils;
import com.javacrazyer.domain.User;
public class HibernateTest {
@Test
public void testAdd(){
//如果是getCurrentSession得配置一些代码
Session session=(Session) HibernateUtils.getSession();
User user = new User();
user.setUsername("test1");
user.setPwd("test1");
session.save(user);
}
}
最后,关于这两种方式,根据个人喜好,我比较爱用第二种
发表评论
-
Spring温习(8)--国际化的支持
2010-11-03 11:07 3786我今天介绍的国际化呢,平时基本上都用不上,我的项目中也从来没用 ... -
Spring温习(7)--有关定时任务Quartz的示例
2010-11-02 23:07 2826实际项目中有关定时任务的使用还是比较普遍的,比如定时做报表,定 ... -
Spring温习(6)--邮件发送实现
2010-10-28 21:55 7672Spring对邮件发送支持的很好,我们只要配置好邮件发送器,写 ... -
Spring温习(5)--CGLIB的动态代理[附AOP内部实现讲解]
2010-10-27 14:55 8881这篇文章紧接着上一篇静态代理和动态代理来说 前言: 到现在 ... -
Spring温习(4)--静态代理和动态代理
2010-10-27 11:27 3338代理模式分为静态代理和动态代理。静态代理就是我们自己定义的代理 ... -
Spring温习(3)--AutoWire自动装配
2010-10-27 09:48 3095在应用中,我们常常使用<ref>标签为JavaBe ... -
Spring温习(2)--IOC容器
2010-10-27 09:10 30481. Spring IoC的依赖注入 1) 使用构造方法来注入 ... -
Spring温习(1)--最基础的示例
2010-10-26 21:37 3492从现在开始,我将从Spring为起点,逐步复习几大框架各方面的 ... -
Spring事务管理的两种方式
2010-10-26 17:27 4029目前项目开发过程中对于Spring的事务管理,主要就这么两种方 ... -
Spring数据源配置的三种方式
2010-10-26 15:25 3781spring数据源配置目前确切的说应该分为:spring容器自 ... -
Spring AOP的两种实现方式
2010-10-26 11:18 5835AOP常用实现方式是一个采用声明的方式来实现,一个采用注解的方 ... -
Spring AOP原理及拦截器
2010-10-26 10:38 147910原理 AOP(Aspect Oriented Pro ... -
在MyEclipse8.5中恢复jpetstore项目
2010-10-22 17:24 2321恢复jpetstore项目的过程1.在myeclipse8.5 ... -
SpringMVC关键问题讲解
2010-10-21 21:31 22923接着上篇文章,大家可能关心的那两个问题 1.control ... -
SpringMVC入门实例及详细讲解
2010-10-21 20:48 215123Spring 框架提供了构建 Web 应用程序的 ...
相关推荐
spring-cloud-starter-gateway下的依赖hibernate-validator-5.0.3.Final.jar
- **配置Spring**:设置Spring的核心配置,包括Bean定义,数据源,事务管理器,以及Hibernate的SessionFactory。 - **配置Hibernate**:配置Hibernate的SessionFactory,实体类的映射文件,以及数据源。 - **使用...
Java J2EE Hibernate Struts Spring Hibernate Together
spring-data-jpa hibernate 版本升级: <spring.version>4.2.5.RELEASE</spring.version> <hibernate.version>5.1.0.Final</hibernate.version> <spring-data-jpa.version>1.10.1.RELEASE</spring-data-jpa....
spring-hibernate.jar
struts-spring-hibernate-_-integration-2.zip
spring.jar spring-aop.jar spring-aop.jar spring-beans.jar spring-hibernate3.jar spring-jdbc.jar spring-struts.jar spring-web.jar
Struts2-Spring4-Hibernate4 XML配置的框架是一个经典的Java Web开发架构,它整合了三个主流的开源框架:Struts2、Spring4和Hibernate4。这个框架的配置主要通过XML文件来完成,同时也可以结合注解的方式进行更加...
在整合struts2.3.7-spring3.0.0-hibernate4.0.0时,发现spring3.0不支持hibernate4.0版本,后来自己整合了两套版本,一个是struts2.3.7-spring3.1.0-hibernate4.0.0,将spring升级,一个是struts2.3.7-spring3.0.0-...
Struts 2.3.25 + spring-4.2.2 + hibernate-5.0.2 Apache Struts Struts 2.3.24.1 has been released on 24 september 2015. http://struts.apache.org/download.cgi#struts23241 spring-framework-4.2.2.RELEASE-...
【标题】"Spring-Struts2-Hibernate-Maven整合教程" 在Java Web开发领域,Spring、Struts2、Hibernate这三大框架的组合,通常被称为SSH(Spring-Struts2-Hibernate),是构建企业级应用的常见选择。Maven作为项目...
《Spring框架中的beans配置文件详解——以spring-beans-3.0.xsd和3.1.xsd为例》 在Spring框架中,`spring-beans`是核心组件之一,它负责管理对象的生命周期和依赖关系。`spring-beans`的配置文件通常以`.xsd`为后缀...
在项目中,Spring MVC的配置文件(如`spring-mvc.xml`)会定义拦截器、视图解析器、以及Controller Bean等。这些配置决定了如何路由请求、如何处理异常,以及如何渲染视图。同时,Spring MVC支持注解驱动的编程,如`...
spring-boot-hibernate5 整合源码
在Myeclipse中开发基于Struts、Hibernate和Spring的项目,首先需要正确配置这三个框架的环境,包括安装Myeclipse、下载相关插件和数据库驱动,然后在项目中添加Struts、Hibernate和Spring的支持。接着,根据项目需求...
这个压缩包文件 "struts-2.5.1-spring-4.2.7-hibernate-5.0.9" 提供了一个整合这三个框架的示例项目,方便开发者直接使用或学习如何将它们集成在一起。 Struts 2 是一个基于 Model-View-Controller (MVC) 架构的...
【Spring-SpringMVC-Hibernate在maven下整合】是一个常见的Java Web开发示例,它展示了如何在Maven项目结构中集成三个核心的Java企业级框架:Spring、SpringMVC和Hibernate。这些框架分别用于控制反转(IoC)、模型-...
在实际开发中,这些库通常包括Spring的核心库(如spring-context、spring-beans)、Spring的数据访问/集成模块(如spring-jdbc、spring-orm)以及Hibernate的主库和相关的JDBC驱动等。 **步骤1:设置项目结构** 在...
spring-context-3.2.4.RELEASE.jar spring-core-3.2.4.RELEASE.jar spring-beans-3.2.4.RELEASE.jar spring-test-3.2.4.RELEASE.jar spring-web-3.2.4.RELEASE.jar spring-aop-3.2.4.RELEASE.jar spring-webmvc-...
通过对Spring-ORM-Hibernate4源码的阅读和研究,我们可以更好地理解这两个框架是如何协同工作的,以及如何优化和定制它们以适应特定的项目需求。这个源码库为开发者提供了一手的学习材料,有助于提升我们在企业级...