© 版权声明:本文为博主原创文章,转载请注明出处

1.搭建环境

  Spring:4.3.8.RELEASE

  Hibernate:5.1.7.Final

  MySQL:5.7.17

  注意:其他版本在某些特性的使用上可能稍微存在差别

2.准备工作

  本文是在上一篇博文《Maven环境下搭建SSH框架之Spring整合Struts2》的基础上继续搭建的。还未进行Spring整合Struts2的可以去搭建后再阅读本文。

  Maven环境下搭建SSH框架之Spring整合Struts2:http://www.cnblogs.com/jinjiyese153/p/6964074.html

3.Spring整合Hibernate

  整合内容:此整合是将Hibernate的配置文件hibernate.cfg.xml整合到Spring的配置文件中,并且利用Spring的面向切面(AOP)功能对Hibernate事务进行统一管理。

  3.1 首先引入Hibernate的核心jar包,MySQL的驱动,还有Spring整合ORM框架所需的spring-orm.jar,以及C3P0连接池所需jar。

<properties>
<!-- 统一源码的编码方式 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 统一各个框架版本 -->
<struts.version>2.5.10</struts.version>
<spring.version>4.3.8.RELEASE</spring.version>
<hibernate.version>5.1.7.Final</hibernate.version>
</properties> <!-- Spring整合ORM框架依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Hibernate 核心依赖 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- MySQL 依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.42</version>
</dependency>
<!-- C3P0 依赖 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5</version>
</dependency>

  3.2 给实体类Product.java添加注解,表明与表的映射关系

package org.ssh.product.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id; import org.hibernate.annotations.GenericGenerator; @Entity
public class Product { @Id
@GeneratedValue(generator = "pid")
@GenericGenerator(name = "pid", strategy = "native")
private int pid;// 商品ID
@Column(length = 100)
private String pname;// 商品名称
private double price;// 商品价格 public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
} }

  3.3 添加jdbc.properties文件,声明数据库连接相关信息

jdbc.url=jdbc:mysql:///ssh?useSSL=true&characterEncoding=UTF-8
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.username=root
jdbc.password=***

  3.4 在applicationContext.xml中配置C3P0连接池,并将Hibernate的配置文件hibernate.cfg.xml中的相关信息整合到Spring的配置文件applicationContext.xml中

<!-- 引入属性文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置C3P0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 数据库连接相关信息 -->
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="driverClass" value="${jdbc.driverClass}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean> <!-- 配置Hibernate的SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 注入连接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 配置Hibernate属性 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop><!-- 是否展示SQL -->
<prop key="hibernate.hbm2ddl.auto">update</prop><!-- 是否自动创建表结构 -->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
</props>
</property>
<!-- 扫描并加载注解过的实体类 -->
<property name="packagesToScan" value="org.ssh.*.model"/>
</bean>

  3.5 创建ProductService.java、ProductServiceImpl.java、ProductDao.java、ProductDaoImpl.java文件,并添加相应注解

package org.ssh.product.dao;

import org.ssh.product.model.Product;

/**
* 商品操作-持久层接口
*
*/
public interface ProductDao { void saveProduct(Product product); }

  

package org.ssh.product.dao.impl;

import org.springframework.stereotype.Repository;
import org.ssh.product.dao.ProductDao;
import org.ssh.product.model.Product; /**
* 商品信息-服务层实现
*
*/
@Repository
public class ProductDaoImpl implements ProductDao { @Override
public void saveProduct(Product product) { } }

  

package org.ssh.product.service;

import org.ssh.product.model.Product;

/**
* 商品操作-服务层接口
*
*/
public interface ProductService { void saveProduct(Product product); }

  

package org.ssh.product.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.ssh.product.dao.ProductDao;
import org.ssh.product.model.Product;
import org.ssh.product.service.ProductService; @Service
public class ProductServiceImpl implements ProductService { @Autowired
private ProductDao productDao; @Override
public void saveProduct(Product product) { productDao.saveProduct(product); } }

  3.6 添加事务控制,本处使用基于AspectJ的xml声明式事务,控制更加灵活。因此需要添加aspectjweaver.jar包

<!-- AspectJ依赖 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.10</version>
</dependency>

  

<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<!-- 注入SessionFactory -->
<property name="sessionFactory" ref="sessionFactory"/>
</bean> <!-- 配置事务增强 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 配置需要进行事务管理的方法,和事务传播行为 -->
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice> <!-- 配置切面 -->
<aop:config>
<!-- 配置切入点
* org.ssh.service.*+.*(..)
*:表示方法的作用域,*表示所有
org.ssh.service.*:表示org.ssh.service下的任何包
org.ssh.service.*+:表示org.ssh.service下的任何包及其子包
*(..):*表示任何方法,(..)表示方法的任何参数
-->
<aop:pointcut expression="execution(* org.ssh.*.service.*+.*(..))" id="pointcut"/>
<!-- 适配切入点和事务增强 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
</aop:config>

  3.7 修改Product.java,添加两个构造方法

public Product() {

}

public Product(String pname, double price) {

	this.pname = pname;
this.price = price; }

  3.8 修改ProductAction.java

package org.ssh.product.action;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.ssh.product.model.Product;
import org.ssh.product.service.ProductService; import com.opensymphony.xwork2.ActionSupport; /**
* 商品操作-控制层
*
*/
@Controller
@Scope("prototype")
public class ProductAction extends ActionSupport { private static final long serialVersionUID = 1L; @Autowired
private ProductService productService; private String pname;
private double price; /**
* 保存商品操作
*
* @return
*/
public String saveProduct() { Product product = new Product(pname, price);
productService.saveProduct(product); this.addActionMessage("保存成功...");
return SUCCESS; } public String getPname() {
return pname;
} public void setPname(String pname) {
this.pname = pname;
} public double getPrice() {
return price;
} public void setPrice(double price) {
this.price = price;
} @Override
public void validate() { if(pname == null || "".equals(pname.trim())) {
this.addFieldError("pname", "商品名称不能为空");
} } }

  3.9 修改ProductDaoImpl.java

package org.ssh.product.dao.impl;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateTemplate;
import org.springframework.stereotype.Repository;
import org.ssh.product.dao.ProductDao;
import org.ssh.product.model.Product; /**
* 商品信息-服务层实现
*
*/
@Repository
public class ProductDaoImpl implements ProductDao { private HibernateTemplate template; @Autowired
public ProductDaoImpl(SessionFactory sessionFactory) { template = new HibernateTemplate(sessionFactory); } @Override
public void saveProduct(Product product) { template.save(product); } }

  3.10 手动在MySQL数据库中创建ssh数据库

create database ssh default character set utf8;

  3.11 启动项目

    1) 首页

    2)自动创建的表

    3)新增商品

    4)数据库信息

Maven环境下搭建SSH框架之Spring整合Hibernate的更多相关文章

  1. Maven环境下搭建SSH框架之Spring整合Struts2

    © 版权声明:本文为博主原创文章,转载请注明出处 1.搭建环境 Struts2:2.5.10 Spring:4.3.8.RELEASE 注意:其他版本在某些特性的使用上可能稍微存在差别 2.准备工作 ...

  2. Maven环境下搭建SSH框架

    © 版权声明:本文为博主原创文章,转载请注明出处 1.搭建环境 Maven:3.3.9 Struts2:2.5.10 Spring:4.3.8.RELEASE Hibernate:5.1.7.Fina ...

  3. ssh框架中spring整合hibernate的配置文件模板(带详细注释)

    applicationContext.xml的配置文件模板 <?xml version="1.0" encoding="UTF-8"?> <b ...

  4. Eclipse搭建SSH框架(Struts2+Spring+Hibernate)

    见识少的我经过一天多的研究才知道,在MyEclipse中搭好的框架的配置文件和jar包是通用的.接下来——亮剑! 工具:Eclipse+Tomcat+Mysql 一.先在Eclipse中配置好Tomc ...

  5. SSH框架之Spring+Struts2+Hibernate整合篇

    回顾 -Hibernate框架 ORM: 对象关系映射.把数据库表和JavaBean通过映射的配置文件映射起来, 操作JavaBean对象,通过映射的配置文件生成SQL语句,自动执行.操作数据库. 1 ...

  6. Spring学习8-用MyEclipse搭建SSH框架 Struts Spring Hibernate

    1.new一个web project. 2.右键项目,为项目添加Struts支持. 点击Finish.src目录下多了struts.xml配置文件. 3.使用MyEclipse DataBase Ex ...

  7. 用MyEclipse搭建SSH框架(Struts2 Spring Hibernate)

    1.new一个web project. 2.右键项目,为项目添加Struts支持. 点击Finish.src目录下多了struts.xml配置文件. 3.使用MyEclipse DataBase Ex ...

  8. Eclipse搭建SSH(Struts2+Spring+Hibernate)框架教程

    | 版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 确实,刚创博客,对于这个陌生的东西还是有些许淡然.这是我的第一篇博文,希望能给你们有帮助,这就是我最大的乐趣! 好了下面进入正题: SS ...

  9. Java之基于Eclipse搭建SSH框架(下)

    在上篇博客里,我简介了Tomcat滴配置与Struts2滴搭建,假设对这个还不会滴童鞋去看一下我滴上篇博客<Java之基于Eclipse搭建SSH框架(上)>.今天我们接着上篇博客滴内容. ...

随机推荐

  1. Weblogic 监控工具汇总及简介

    https://blog.csdn.net/hualusiyu/article/details/39608637

  2. HDU 1171.Big Event in HDU-动态规划0-1背包

    Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  3. 51nod 1202 不同子序列个数 [计数DP]

    1202 子序列个数 题目来源: 福州大学 OJ 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 子序列的定义:对于一个序列a=a[1],a[2],.. ...

  4. web通信 长连接、长轮询

    http://www.cnblogs.com/hoojo/p/longPolling_comet_jquery_iframe_ajax.html

  5. Xamarin XAML语言教程构建进度条ProgressBar

    Xamarin XAML语言教程构建进度条ProgressBar Xamarin XAML语言教程构建进度条ProgressBar,ProgressBar被称为进度条,它类似于没有滑块的滑块控件.进度 ...

  6. highcharts 图例详解

    highcharts 图例 tooltip: {                                           },                      legend: { ...

  7. How to: Launch the Debugger Automatically

    Sometimes, you may need to debug the startup code for an application that is launched by another pro ...

  8. mysql truncate drop delete的区别

    以下讨论,针对于mysql数据库. 为什么会想到这个问题呢? 因为项目中需要清除数据库的数据,而且需要实现自增的主键从0开始计数.所以想到总结一个几个常用的删除语法的差异. 可以做一个测试 建一个带有 ...

  9. Spring: aop自动标注时出现 “0 formal unbound in pointcut"

    异常代码信息: org.springframework.beans.factory.BeanCreationException: Error creating bean with name forma ...

  10. Hive 性能调优

    避免执行MR select * or select field1,field2 limit 10 where语句中只有分区字段或该表的本地字段 使用本地set hive.exec.mode.local ...