最近在学习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&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的配置文件),博主将近期更新
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/16689.html