分别介绍了Sping和Hibernate,以下是将它们整合到一块去了。

  一、Hibernate内容

1.创建PO类。

package cn.tgb.domain;

//User实体
public class User {
private Integer id;
private String username;
private String password; public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

2.编写User.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping>
<class name="cn.tgb.domain.User" table="t_user">
<id name="id">
<generator class="native"></generator>
</id>
<property name="username"></property>
<property name="password"></property>
</class>
</hibernate-mapping>

3.编写Hibernate.cfg.xml

<?

xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<session-factory>
<!-- #1核心四项 -->
<property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="hibernate.connection.url">jdbc:sqlserver://localhost:1433; DatabaseName=hibernate02</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password">123456</property> <!-- #2设置方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property> <!-- #3 sql -->
<!-- * 输出sql-->
<property name="hibernate.show_sql">true</property>
<!-- * 格式化sql -->
<property name="hibernate.format_sql">true</property>
<!-- * 是否创建表 -->
<property name="hibernate.hbm2ddl.auto">update</property> <!-- #4整合c3p0 -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> <!-- #5 web项目6.0 取消bean校验 -->
<property name="javax.persistence.validation.mode">none</property> <!-- #6加入映射文件 -->
<mapping resource="cn/tgb/domain/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>

    二、Spring内容

1.Dao实现类:使用HibernateTemplate对PO类进行操作。

package cn.tgb.dao.impl;

import java.util.List;

import org.springframework.orm.hibernate3.HibernateTemplate;

import cn.tgb.dao.UserDao;
import cn.tgb.domain.User; public class UserDaoImpl implements UserDao{ //使用hibernateTemplate对PO类进行操作
private HibernateTemplate hibernateTemplate;
//提供set方法
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
} @Override
public void save(User user) {
this.hibernateTemplate.save(user);
} @Override
public void update(User user) {
this.hibernateTemplate.update(user);
} @Override
public void delete(User user) {
this.hibernateTemplate.delete(user);
} @Override
public User findById(Integer uid) {
return this.hibernateTemplate.get(User.class, uid);
} @Override
public List<User> findAllUser() {
return this.hibernateTemplate.find("from User");
} }

2.Service实现类:直接使用dao层,通过spring tx管理事务

package cn.tgb.service.impl;

import java.util.List;

import cn.tgb.dao.UserDao;
import cn.tgb.domain.User;
import cn.tgb.service.UserService; public class UserServiceImpl implements UserService{
//引入UserDao
private UserDao userDao;
//提供set方法
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
} @Override
public void addUser(User user) {
this.userDao.save(user);
} @Override
public void updateUser(User user) {
this.userDao.update(user);
} @Override
public void deleteUser(User user) {
this.userDao.delete(user);
} @Override
public User findUserById(Integer uid) {
return this.userDao.findById(uid);
} @Override
public List<User> findAllUser() {
return this.userDao.findAllUser();
} }

3.配置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:context="http://www.springframework.org/schema/context"
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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- #1配置sessionFactory,
通过LocalSessionFactoryBean载入配置获得SessionFactory
--> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- #1.1确定配置文件的位置 -->
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
</bean>
<!-- #2 hibernateTemplate -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<!-- 须要使用sessionFactory获得session,操作PO对象 -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- #3 dao -->
<bean id="userDao" class="cn.tgb.dao.impl.UserDaoImpl">
<property name="hibernateTemplate" ref="hibernateTemplate"></property>
</bean>
<!-- #4 service -->
<bean id="userService" class="cn.tgb.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean> <!-- #5 事务管理 -->
<!-- #5.1事务管理器 -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!-- 必须确定sessionFactory。 从而获得session,再获得事务 -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean> <!-- #5.2事务通知(增强),对指定目标方法进行增强 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="add*"/>
<tx:method name="update*"/>
<tx:method name="delete*"/>
<tx:method name="find*" read-only="true"/>
</tx:attributes>
</tx:advice> <!-- #5.3使用aop生成代理,进行增强 -->
<aop:config>
<!-- 确定切入点 -->
<aop:pointcut expression="execution(* cn.tgb.service..*.*(..))" id="txPointCut"/>
<!-- 声明切面 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
</aop:config>
</beans>

至此,Spring和Hibernate就算整合好了。以下编写一个測试类測试下。

package cn.tgb.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.tgb.domain.User;
import cn.tgb.service.UserService; public class TestApp {
public static void main(String[] args) { //1.创建建用户
User user = new User();
user.setUsername("jiangxiao");
user.setPassword("123"); //2.获取Sping配置文件
String xmlPathString="applicationContext.xml";
ApplicationContext applicationContext= new ClassPathXmlApplicationContext(xmlPathString); //3.通过Ioc获得UserService
UserService userService = (UserService) applicationContext.getBean("userService"); //4.运行加入用户操作
userService.addUser(user);
}
}

分析总结:

这张思维导图大概介绍了一下配置文件的配置内容和载入过程,当中蓝色的云朵部分是Spring整合Hibernate的内容。

程序执行时。通过载入配置文件,便将程序中全部的配置信息都载入了。假设有个扩展改动什么的也方便。

日后会继续介绍它们两个与Struts的整合。

sh_Spring整合Hibernate的更多相关文章

  1. 【Java EE 学习 53】【Spring学习第五天】【Spring整合Hibernate】【Spring整合Hibernate、Struts2】【问题:整合hibernate之后事务不能回滚】

    一.Spring整合Hibernate 1.如果一个DAO 类继承了HibernateDaoSupport,只需要在spring配置文件中注入SessionFactory就可以了:如果一个DAO类没有 ...

  2. spring整合hibernate的详细步骤

    Spring整合hibernate需要整合些什么? 由IOC容器来生成hibernate的sessionFactory. 让hibernate使用spring的声明式事务 整合步骤: 加入hibern ...

  3. spring整合hibernate

    spring整合hibernate包括三部分:hibernate的配置.hibernate核心对象交给spring管理.事务由AOP控制 好处: 由java代码进行配置,摆脱硬编码,连接数据库等信息更 ...

  4. spring 整合hibernate

    1. Spring 整合 Hibernate 整合什么 ? 1). 有 IOC 容器来管理 Hibernate 的 SessionFactory2). 让 Hibernate 使用上 Spring 的 ...

  5. Spring整合Hibernate。。。。

    环境搭建,在eclipse中导入spring和hibernate框架的插件,和导入所有使用到的架包 首先,hibernate的创建: 建立两个封装类,其中封装了数据库中表的属性,这儿只写属性,gett ...

  6. Spring 整合 Hibernate

    Spring 整合 Hibernate •Spring 支持大多数流行的 ORM 框架, 包括 Hibernate JDO, TopLink, Ibatis 和 JPA. •Spring 对这些 OR ...

  7. 使用Spring整合Hibernate,并实现对数据表的增、删、改、查的功能

    1.1 问题 使用Spring整合Hibernate,并实现资费表的增.删.改.查. 1.2 方案 Spring整合Hibernate的步骤: 1.3 步骤 实现此案例需要按照如下步骤进行. 采用的环 ...

  8. Spring整合Hibernate详细步骤

    阅读目录 一.概述 二.整合步骤 回到顶部 一.概述 Spring整合Hibernate有什么好处? 1.由IOC容器来管理Hibernate的SessionFactory 2.让Hibernate使 ...

  9. Spring学习7-Spring整合Hibernate

    一.Springl为什么要整合Hibernate   二者的整合主要是把hibernate中核心的一些类型交给spring管理,这些类型主要包括sessionFactory. transactionM ...

随机推荐

  1. [转]查看Linux版本信息

    一.查看Linux内核版本命令(两种方法): 1.cat /proc/version [root@S-CentOS home]# cat /proc/version Linux version 2.6 ...

  2. Ubuntu搭建Http服务器用于下载Ubuntu文件

    首先安装Apache $ sudo apt-get install apache2 Apache2的默认访问端口为80,当端口被占用时需要更改其访问端口 进入apache2的安装目录  /etc/ap ...

  3. 【bzoj3439】Kpm的MC密码 可持久化Trie树

    题目描述 背景 想Kpm当年为了防止别人随便进入他的MC,给他的PC设了各种奇怪的密码和验证问题(不要问我他是怎么设的...),于是乎,他现在理所当然地忘记了密码,只能来解答那些神奇的身份验证问题了. ...

  4. VK Cup 2016 - Qualification Round 1——B. Chat Order(试手stack+map)

    B. Chat Order time limit per test 3 seconds memory limit per test 256 megabytes input standard input ...

  5. linux--bash: redis-server: 未找到命令

    linux 安装redis过程中出现了异常,make不通过,异常如下: [root@localhost redis-2.8.3]# make cd src && make all ma ...

  6. bzoj 2961 共点圆 cdq+凸包+三分

    题目大意 两种操作 1)插入一个过原点的圆 2)询问一个点是否在所有的圆中 分析 在圆中则在半径范围内 设圆心 \(x,y\) 查询点\(x_0,y_0\) 则\(\sqrt{(x-x_0)^2+(y ...

  7. Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80

    ubuntu上安装Apache2时出现错误 Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0: ...

  8. 数据结构自己实现——stack

    #define StackSize 100 typedef char DataType; class stack { public: DataType data[StackSize]; int top ...

  9. p标签注意事项

    <p> 哈哈,我是一个段落哦! <div id="box">我是一个萌萌的div</div> </p> 这样写的后果: 注意: p标 ...

  10. 无法安装64位版本的visio/office,因为在您的PC上找到了以下32位程序的解决办法

    解决方案:按下win+R键,打开运行,输入regedit,打开注册表,依次定位到 HKEY_CLASSES_ROOT\Installer\Products,展开Products后  将这些“00005 ...