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

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。

  1. <properties>
  2. <!-- 统一源码的编码方式 -->
  3. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  4. <!-- 统一各个框架版本 -->
  5. <struts.version>2.5.10</struts.version>
  6. <spring.version>4.3.8.RELEASE</spring.version>
  7. <hibernate.version>5.1.7.Final</hibernate.version>
  8. </properties>
  9.  
  10. <!-- Spring整合ORM框架依赖 -->
  11. <dependency>
  12. <groupId>org.springframework</groupId>
  13. <artifactId>spring-orm</artifactId>
  14. <version>${spring.version}</version>
  15. </dependency>
  16. <!-- Hibernate 核心依赖 -->
  17. <dependency>
  18. <groupId>org.hibernate</groupId>
  19. <artifactId>hibernate-core</artifactId>
  20. <version>${hibernate.version}</version>
  21. </dependency>
  22. <!-- MySQL 依赖 -->
  23. <dependency>
  24. <groupId>mysql</groupId>
  25. <artifactId>mysql-connector-java</artifactId>
  26. <version>5.1.42</version>
  27. </dependency>
  28. <!-- C3P0 依赖 -->
  29. <dependency>
  30. <groupId>com.mchange</groupId>
  31. <artifactId>c3p0</artifactId>
  32. <version>0.9.5</version>
  33. </dependency>

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

  1. package org.ssh.product.model;
  2.  
  3. import javax.persistence.Column;
  4. import javax.persistence.Entity;
  5. import javax.persistence.GeneratedValue;
  6. import javax.persistence.Id;
  7.  
  8. import org.hibernate.annotations.GenericGenerator;
  9.  
  10. @Entity
  11. public class Product {
  12.  
  13. @Id
  14. @GeneratedValue(generator = "pid")
  15. @GenericGenerator(name = "pid", strategy = "native")
  16. private int pid;// 商品ID
  17. @Column(length = 100)
  18. private String pname;// 商品名称
  19. private double price;// 商品价格
  20.  
  21. public int getPid() {
  22. return pid;
  23. }
  24. public void setPid(int pid) {
  25. this.pid = pid;
  26. }
  27. public String getPname() {
  28. return pname;
  29. }
  30. public void setPname(String pname) {
  31. this.pname = pname;
  32. }
  33. public double getPrice() {
  34. return price;
  35. }
  36. public void setPrice(double price) {
  37. this.price = price;
  38. }
  39.  
  40. }

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

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

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

  1. <!-- 引入属性文件 -->
  2. <context:property-placeholder location="classpath:jdbc.properties"/>
  3.  
  4. <!-- 配置C3P0连接池 -->
  5. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  6. <!-- 数据库连接相关信息 -->
  7. <property name="jdbcUrl" value="${jdbc.url}"/>
  8. <property name="driverClass" value="${jdbc.driverClass}"/>
  9. <property name="user" value="${jdbc.username}"/>
  10. <property name="password" value="${jdbc.password}"/>
  11. </bean>
  12.  
  13. <!-- 配置Hibernate的SessionFactory -->
  14. <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
  15. <!-- 注入连接池 -->
  16. <property name="dataSource" ref="dataSource"/>
  17. <!-- 配置Hibernate属性 -->
  18. <property name="hibernateProperties">
  19. <props>
  20. <prop key="hibernate.show_sql">true</prop><!-- 是否展示SQL -->
  21. <prop key="hibernate.hbm2ddl.auto">update</prop><!-- 是否自动创建表结构 -->
  22. <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
  23. </props>
  24. </property>
  25. <!-- 扫描并加载注解过的实体类 -->
  26. <property name="packagesToScan" value="org.ssh.*.model"/>
  27. </bean>

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

  1. package org.ssh.product.dao;
  2.  
  3. import org.ssh.product.model.Product;
  4.  
  5. /**
  6. * 商品操作-持久层接口
  7. *
  8. */
  9. public interface ProductDao {
  10.  
  11. void saveProduct(Product product);
  12.  
  13. }

  

  1. package org.ssh.product.dao.impl;
  2.  
  3. import org.springframework.stereotype.Repository;
  4. import org.ssh.product.dao.ProductDao;
  5. import org.ssh.product.model.Product;
  6.  
  7. /**
  8. * 商品信息-服务层实现
  9. *
  10. */
  11. @Repository
  12. public class ProductDaoImpl implements ProductDao {
  13.  
  14. @Override
  15. public void saveProduct(Product product) {
  16.  
  17. }
  18.  
  19. }

  

  1. package org.ssh.product.service;
  2.  
  3. import org.ssh.product.model.Product;
  4.  
  5. /**
  6. * 商品操作-服务层接口
  7. *
  8. */
  9. public interface ProductService {
  10.  
  11. void saveProduct(Product product);
  12.  
  13. }

  

  1. package org.ssh.product.service.impl;
  2.  
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Service;
  5. import org.ssh.product.dao.ProductDao;
  6. import org.ssh.product.model.Product;
  7. import org.ssh.product.service.ProductService;
  8.  
  9. @Service
  10. public class ProductServiceImpl implements ProductService {
  11.  
  12. @Autowired
  13. private ProductDao productDao;
  14.  
  15. @Override
  16. public void saveProduct(Product product) {
  17.  
  18. productDao.saveProduct(product);
  19.  
  20. }
  21.  
  22. }

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

  1. <!-- AspectJ依赖 -->
  2. <dependency>
  3. <groupId>org.aspectj</groupId>
  4. <artifactId>aspectjweaver</artifactId>
  5. <version>1.8.10</version>
  6. </dependency>

  

  1. <!-- 配置事务管理器 -->
  2. <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
  3. <!-- 注入SessionFactory -->
  4. <property name="sessionFactory" ref="sessionFactory"/>
  5. </bean>
  6.  
  7. <!-- 配置事务增强 -->
  8. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  9. <tx:attributes>
  10. <!-- 配置需要进行事务管理的方法,和事务传播行为 -->
  11. <tx:method name="save*" propagation="REQUIRED"/>
  12. <tx:method name="update*" propagation="REQUIRED"/>
  13. <tx:method name="delete*" propagation="REQUIRED"/>
  14. </tx:attributes>
  15. </tx:advice>
  16.  
  17. <!-- 配置切面 -->
  18. <aop:config>
  19. <!-- 配置切入点
  20. * org.ssh.service.*+.*(..)
  21. *:表示方法的作用域,*表示所有
  22. org.ssh.service.*:表示org.ssh.service下的任何包
  23. org.ssh.service.*+:表示org.ssh.service下的任何包及其子包
  24. *(..):*表示任何方法,(..)表示方法的任何参数
  25. -->
  26. <aop:pointcut expression="execution(* org.ssh.*.service.*+.*(..))" id="pointcut"/>
  27. <!-- 适配切入点和事务增强 -->
  28. <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
  29. </aop:config>

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

  1. public Product() {
  2.  
  3. }
  4.  
  5. public Product(String pname, double price) {
  6.  
  7. this.pname = pname;
  8. this.price = price;
  9.  
  10. }

  3.8 修改ProductAction.java

  1. package org.ssh.product.action;
  2.  
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.context.annotation.Scope;
  5. import org.springframework.stereotype.Controller;
  6. import org.ssh.product.model.Product;
  7. import org.ssh.product.service.ProductService;
  8.  
  9. import com.opensymphony.xwork2.ActionSupport;
  10.  
  11. /**
  12. * 商品操作-控制层
  13. *
  14. */
  15. @Controller
  16. @Scope("prototype")
  17. public class ProductAction extends ActionSupport {
  18.  
  19. private static final long serialVersionUID = 1L;
  20.  
  21. @Autowired
  22. private ProductService productService;
  23.  
  24. private String pname;
  25. private double price;
  26.  
  27. /**
  28. * 保存商品操作
  29. *
  30. * @return
  31. */
  32. public String saveProduct() {
  33.  
  34. Product product = new Product(pname, price);
  35. productService.saveProduct(product);
  36.  
  37. this.addActionMessage("保存成功...");
  38. return SUCCESS;
  39.  
  40. }
  41.  
  42. public String getPname() {
  43. return pname;
  44. }
  45.  
  46. public void setPname(String pname) {
  47. this.pname = pname;
  48. }
  49.  
  50. public double getPrice() {
  51. return price;
  52. }
  53.  
  54. public void setPrice(double price) {
  55. this.price = price;
  56. }
  57.  
  58. @Override
  59. public void validate() {
  60.  
  61. if(pname == null || "".equals(pname.trim())) {
  62. this.addFieldError("pname", "商品名称不能为空");
  63. }
  64.  
  65. }
  66.  
  67. }

  3.9 修改ProductDaoImpl.java

  1. package org.ssh.product.dao.impl;
  2.  
  3. import org.hibernate.SessionFactory;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.orm.hibernate5.HibernateTemplate;
  6. import org.springframework.stereotype.Repository;
  7. import org.ssh.product.dao.ProductDao;
  8. import org.ssh.product.model.Product;
  9.  
  10. /**
  11. * 商品信息-服务层实现
  12. *
  13. */
  14. @Repository
  15. public class ProductDaoImpl implements ProductDao {
  16.  
  17. private HibernateTemplate template;
  18.  
  19. @Autowired
  20. public ProductDaoImpl(SessionFactory sessionFactory) {
  21.  
  22. template = new HibernateTemplate(sessionFactory);
  23.  
  24. }
  25.  
  26. @Override
  27. public void saveProduct(Product product) {
  28.  
  29. template.save(product);
  30.  
  31. }
  32.  
  33. }

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

  1. 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. Git 使用指南(cmd + gui)

    git 使用简易指南http://www.bootcss.com/p/git-guide/ Git版本控制使用方法入门教程http://www.uml.org.cn/pzgl/201204285.as ...

  2. AC日记——斐波那契数列 洛谷 P1962

    斐波那契数列 思路: 矩阵快速幂: 来,上代码: #include <cstdio> #include <cstring> #include <iostream> ...

  3. CSS变量使用解析

    很早直接就了解到CSS变量相关的内容,奈何之前使用价值不高(很多主流浏览器不兼容) 最近发现主流浏览器都已经支持了这一变化 这一重要的变化,可能会让你发现,原生CSS从此变的异常强大~,下面看一下如何 ...

  4. asp.net core 身份认证/权限管理系统简介及简单案例

    如今的网站大多数都离不开账号注册及用户管理,而这些功能就是通常说的身份验证.这些常见功能微软都为我们做了封装,我们只要利用.net core提供的一些工具就可以很方便的搭建适用于大部分应用的权限管理系 ...

  5. 2018 ICPC 徐州邀请赛 总结

    Day 0 上午在高铁里面,很困但是睡不着…… 中午到矿大报道. 食堂饭菜不错,有西瓜,就是有点辣. 下午热身赛,D题队友想了个假算法……GG. 评测机摸底考试正常进行. 热身赛之后精疲力尽,赶到宾馆 ...

  6. 测试工具APPScan安装与使用教程

  7. luogu P1091 合唱队形

    题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2, ...

  8. [CTSC2018]假面(概率DP)

    考场上以为CTSC的概率期望题都不可做,连暴力都没写直接爆零. 结果出来发现全场70以上,大部分AC,少于70的好像极少,感觉血亏. 设a[i][j]表示到当前为止第i个人的血量为j的概率(注意特判血 ...

  9. Mysql insert without auto-increase when duplicate

    INSERT INTO video_tag_all(tagname,ctime) FROM video_tag_all WHERE (SELECT last_insert_id(id) FROM vi ...

  10. microsoft-sql-server release-notes

    https://docs.microsoft.com/en-us/sql/release-notes/microsoft-sql-server