使用IntelliJ IDEA进行SSH整合(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36798272/article/details/88318426

最近在学习SSH框架,趁着刚学完这三个框架,已经迫不及待的进行了整合,让我们开始吧!

运行环境:
IDE: IntelliJ IDEA 2018.3
Java version: 1.8
Java EE version:java EE 7
Application Server: Tomcat 8.5.31
Web Application version: 3.1
Database: MySQL 8.0

第一步:创建web项目,引入jar包

Struts2的jar包:

struts-2.3.24\apps\struts2-blank\WEB-INF\lib*.jar
asm-3.3.jar
asm-commons-3.3.jar
asm-tree-3.3.jar
commons-fileupload-1.3.1.jar
commons-io-2.2.jar
commons-lang3-3.2.jar
freemarker-2.3.22.jar
javassist-3.11.0.GA.jar
log4j-api-2.2.jar
log4j-core-2.2.jar
ognl-3.0.6.jar
struts2-core-2.3.24.jar
xwork-core-2.3.24.jar

Hibernate的jar包:

hibernate-release-5.0.7.Final\lib\required*.jar
antlr-2.7.7.jar
dom4j-1.6.1.jar
geronimo-jta_1.1_spec-1.1.1.jar
hibernate-commons-annotations-5.0.1.Final.jar
hibernate-core-5.0.7.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-2.0.0.Final.jar
javassist-3.18.1-GA.jar
jboss-logging-3.3.0.Final.jar

MySQL驱动:

mysql-connector-java-8.0.11.jar

日志记录:

log4j-1.2.16.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.7.2.jar

使用C3P0连接池:

c3p0-0.9.2.1.jar
hibernate-c3p0-5.0.7.Final.jar
mchange-commons-java-0.2.3.4.jar
注意:Struts2和Hibernate都引入了一个相同的jar包(javassist包),删除一个.Log4j重复没事

Spring的jar包

IOC的开发

spring-beans-4.2.4.RELEASE.jar
spring-context-4.2.4.RELEASE.jar
spring-core-4.2.4.RELEASE.jar
spring-expression-4.2.4.RELEASE.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
com.springsource.org.apache.log4j-1.2.15.jar

AOP的开发:

com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
spring-aop-4.2.4.RELEASE.jar
spring-aspects-4.2.4.RELEASE.jar

JDBC模板的开发:

spring-jdbc-4.2.4.RELEASE.jar
spring-tx-4.2.4.RELEASE.jar

事务管理:

spring-tx-4.2.4.RELEASE.jar

整合web项目的开发:

spring-web-4.2.4.RELEASE.jar

整合单元测试的开发:

spring-test-4.2.4.RELEASE.jar

整合hibernate的开发:

spring-orm-4.2.4.RELEASE.jar

来一张全家福 (还有一个struts2-spring-plugin-2.3.24.jar是Struts2的整合Spring的开发包)
在这里插入图片描述

第二步:引入配置文件

Struts的配置文件

web.xml

在这里插入图片描述

struts.xml

在这里插入图片描述

Hibernate的配置文件

hibernate.cfg.xml

在这里插入图片描述
代码如下:

<hibernate-configuration>
    <session-factory>
        <!-- 连接数据库的基本参数 -->
        <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sunz?useSSL=false&amp;serverTimezone=Asia/Shanghai</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">password</property>
        <!-- 配置Hibernate的方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>

        <!-- 可选配置================== -->
        <!-- 打印SQL -->
        <property name="hibernate.show_sql">true</property>
        <!-- 格式化SQL -->
        <property name="hibernate.format_sql">true</property>
        <!-- 自动建表 -->
        <property name="hibernate.hbm2ddl.auto">update</property>

        <!-- 配置session绑定本地线程,ssh整合不需要,事务交由spring处理 -->
        <!--<property name="hibernate.current_session_context_class">thread</property>-->

        <!-- 配置C3P0连接池 -->
        <property name="connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
        <!--在连接池中可用的数据库连接的最少数目 -->
        <property name="c3p0.min_size">5</property>
        <!--在连接池中所有数据库连接的最大数目  -->
        <property name="c3p0.max_size">20</property>
        <!--设定数据库连接的过期时间,以秒为单位,
        如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
        <property name="c3p0.timeout">120</property>
        <!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->
        <property name="c3p0.idle_test_period">3000</property>

        <!-- 引入映射文件的位置 -->

    </session-factory>
</hibernate-configuration>
映射文件:

创建Customer.java实体类和Customer.hbm.xml映射文件
在这里插入图片描述
Customer.java源码如下:
在这里插入图片描述

package com.sunz.ssh.domain;
/**
 * 客户管理的实体
 * @author sunz
 *Create database ssh1;
Use ssh1;
CREATE TABLE `cst_customer` (
  `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
  `cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)',
  `cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源',
  `cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业',
  `cust_level` varchar(32) DEFAULT NULL COMMENT '客户级别',
  `cust_phone` varchar(64) DEFAULT NULL COMMENT '固定电话',
  `cust_mobile` varchar(16) DEFAULT NULL COMMENT '移动电话',
  PRIMARY KEY (`cust_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

 */
public class Customer {
   private Long cust_id;
   private String cust_name;
   private String cust_source;
   private String cust_industry;
   private String cust_level;
   private String cust_phone;
   private String cust_mobile;
   public Long getCust_id() {
      return cust_id;
   }
   public void setCust_id(Long cust_id) {
      this.cust_id = cust_id;
   }
   public String getCust_name() {
      return cust_name;
   }
   public void setCust_name(String cust_name) {
      this.cust_name = cust_name;
   }
   public String getCust_source() {
      return cust_source;
   }
   public void setCust_source(String cust_source) {
      this.cust_source = cust_source;
   }
   public String getCust_industry() {
      return cust_industry;
   }
   public void setCust_industry(String cust_industry) {
      this.cust_industry = cust_industry;
   }
   public String getCust_level() {
      return cust_level;
   }
   public void setCust_level(String cust_level) {
      this.cust_level = cust_level;
   }
   public String getCust_phone() {
      return cust_phone;
   }
   public void setCust_phone(String cust_phone) {
      this.cust_phone = cust_phone;
   }
   public String getCust_mobile() {
      return cust_mobile;
   }
   public void setCust_mobile(String cust_mobile) {
      this.cust_mobile = cust_mobile;
   }

   @Override
   public String toString() {
      return "Customer{" +
            "cust_id=" + cust_id +
            ", cust_name='" + cust_name + '\'' +
            ", cust_source='" + cust_source + '\'' +
            ", cust_industry='" + cust_industry + '\'' +
            ", cust_level='" + cust_level + '\'' +
            ", cust_phone='" + cust_phone + '\'' +
            ", cust_mobile='" + cust_mobile + '\'' +
            '}';
   }
}
Customer.hbm.xml源码如下:

在这里插入图片描述

在hibernate.cfg.xml中引入映射文件的位置

在这里插入图片描述

Spring的配置文件

在src目录下创建applicationContext.xml

在这里插入图片描述

在web.xml中加入以下代码

在这里插入图片描述

日志记录

在src目录下创建log4j.properties,代码如下
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c\:mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###
# error warn info debug trace
log4j.rootLogger= info, stdout

第三步:创建包结构

在这里插入图片描述

第四步:创建相关类

目前项目整体目录结构:

在这里插入图片描述

第五步:编写index.jsp

在这里插入图片描述

第六步:Spring整合Struts2:Action交给Spring管理。

编写CustomerAction类:

在这里插入图片描述

引入插件包
引入struts-spring-plugin.jar(之前引入过就不用引了)

在这里插入图片描述

在applicationContext.xml中加入如下代码:

在这里插入图片描述

在struts.xml中配置Action:

在这里插入图片描述

第七步:Service调用DAO

将DAO交给Spring管理

在这里插入图片描述

在Service注入DAO

在这里插入图片描述
在这里插入图片描述

第八步:Spring整合Hibernate框架

Spring和Hibernate整合
在Spring的配置文件中,引入Hibernate的配置的信息

在这里插入图片描述

在Spring和Hibernate整合后,Spring提供了一个Hibernate的模板类简化Hibernate开发。
改写DAO继承HibernateDaoSupport

在这里插入图片描述

配置的时候在DAO中直接注入SessionFactory

在这里插入图片描述

在DAO中使用Hibernate的模板完成保存操作

在这里插入图片描述

第九步:配置Spring的事务管理

在applicationContext.xml配置事务管理器

在这里插入图片描述

在applicationContext.xml开启注解事务

在这里插入图片描述

在业务层使用注解

在这里插入图片描述

第十步:启动服务器,进入index页面

在这里插入图片描述

第十一步:填入信息并提交,观察控制台与数据库变化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试正常,整合成功!

扩展:将hibernate的配置交给Spring管理(将不使用hibernate的配置文件),博主将近期更新

猜你喜欢

转载自blog.csdn.net/qq_36798272/article/details/88318426