一、基础环境
1、Windows10、Java17、Maven3.8.8、Tomcat9.0.76、IDEA2022.3.3
2、已完成Maven项目的创建
二、框架版本
struts2:2.5.31
spring:5.3.27
hibernate:5.6.15.Final
三、通过Maven集成SSH框架所需的依赖
1、添加组件版本参数,代码如下:
<properties>
<spring.version>5.3.27</spring.version>
<struts2.version>2.5.31</struts2.version>
<log4j2.version>2.20.0</log4j2.version>
<hibernate.version>5.6.15.Final</hibernate.version>
<hikariCP.version>5.0.1</hikariCP.version>
<mysqldriver.version>8.0.33</mysqldriver.version>
</properties>
2、添加依赖管理,通过dependencyManagement管理依赖,子项目用到的依赖将继承于父项目依赖对应的版本,代码如下:
<!-- 管理依赖依赖信息 -->
<dependencyManagement>
<dependencies>
<!-- spring-framework-bom -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>${spring.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- struts2-bom -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-bom</artifactId>
<version>${struts2.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- log4j-bom -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-bom</artifactId>
<version>${log4j2.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
3、添加项目所用到的依赖,代码如下:
<!-- 项目需要的依赖 -->
<dependencies>
<!-- Spring dependency start -->
<!-- spring-context 应用上下文,包含core、beans、aop、expression、spring-jcl -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<!-- spring-orm 持久层框架支持 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
</dependency>
<!-- spring-aspects AOP事务管理 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
<!-- Spring dependency end -->
<!-- Struts2 dependency start -->
<!-- Struts2 核心 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
</dependency>
<!-- Struts2-spring 插件 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
</dependency>
<!-- Struts2-json 插件 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
</dependency>
<!-- Struts2 dependency end -->
<!-- Hibernate dependency start -->
<!-- Hibernate 核心 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- 这里列出两种主流连接池,可根据需要任选一种 -->
<!-- c3p0 连接池 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- hikaricp 连接池 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-hikaricp</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- Hibernate dependency end -->
<!-- log4j dependency start -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</dependency>
<!-- log4j dependency end -->
<!-- servlet-api Servlet规范-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- servlet-api JSP标签库-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>${mysqldriver.version}</version>
</dependency>
<!-- junit 测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
3.1、引入 Struts2 依赖可参考Struts官网
地址:https://struts.apache.org/
依次点击:“DOCUMENTATION”→“Getting Started”→“How To Create A Struts 2 Web Application”
或者直接访问地址:https://struts.apache.org/getting-started/how-to-create-a-struts2-web-application
四、实体类创建与Hibernate映射配置
1、创建实体类,实体类属性的Getter and Setter
代码省略。
2、配置实体类相应的映射文件employee.hbm.xml
“employee.hbm.xml”文件的配置可参考“https://hibernate.org/dtd/”页面的“hibernate-mapping-3.0.dtd”文件。
代码如下:
<?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实体类映射 -->
<hibernate-mapping package="demo.employee.entity">
<!-- 类名称与表名称映射 -->
<class name="Employee" table="employees">
<!-- emp_no属性与表主键列映射 -->
<id name="emp_no" column="emp_no">
<generator class="increment"></generator>
</id>
<!-- 类其它属性与表其它列名映射。若类的属性和表的列名一致,可以不用设置column -->
<property name="first_name" column="first_name"></property>
<property name="last_name" column="last_name"></property>
<property name="gender" column="gender"></property>
<property name="birth_date" column="birth_date"></property>
<property name="hire_date" column="hire_date"></property>
</class>
</hibernate-mapping>
3、配置hibernate-configuration配置文件,包含数据源的配置、映射文件的引用
“hibernate.cfg.xml”文件的配置可参考“https://hibernate.org/dtd/”页面的“hibernate-configuration-3.0.dtd”文件。
代码如下:
<?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配置 -->
<hibernate-configuration>
<!-- session-factory属性设置、映射文件的引用 -->
<session-factory>
<!-- 数据库连接信息 -->
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://192.168.127.128:3306/employees</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<!-- 数据库方言,这里设置的是MySQl -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 显示实际操作数据库时的SQL -->
<property name="hibernate.show_sql">true</property>
<!-- 规范SQL排版,方便查看 -->
<property name="hibernate.format_sql">true</property>
<!-- 引用实体类映射文件 -->
<mapping resource="demo/employee/entity/employee.hbm.xml" />
</session-factory>
</hibernate-configuration>
4、在pom.xml文件中添加配置,保证扫描到实体类及映射文件
代码如下:
<!-- 配置resources扫描实体类及其映射文件 -->
<resources>
<resource>
<filtering>false</filtering>
<directory>src/main/java</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
5、将sessionFactory注入到Spring容器中
5.1、配置参考spring官网
官网地址:https://spring.io/
依次点击:“Projects”→“SpringFrameWork”→“Data Access”→“Data Access”→“Object Relational Mapping (ORM) Data Access”→“Hibernate”
或者直接访问地址:https://docs.spring.io/spring-framework/reference/data-access/orm/hibernate.html
5.2、使用applicationContext.xml配置的方式(第一种方式:使用hibernate.cfg.xml配置文件),此种方式在实际的开发中不会使用(可略过)。
新建“applicationContext.xml”,在Spring容器中注入sessionFactory,通过configLocation指定hibernate.cfg.xml文件路径,将文件中的配置信息注入到sessionFactory中:
代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--第一种方式:使用hibernate.cfg.xml配置文件-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
</bean>
</beans>
五、测试
1、创建测试类“SessionFactoryTest”,执行测试代码:
代码如下:
public class SessionFactoryTest {
@Test
public void test_01(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
SessionFactory sessionFactory = applicationContext.getBean(SessionFactory.class);
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
List<Employee> list = session.createQuery("from Employee where first_name = 'Saniya'").setMaxResults(2).list();
list.forEach(x -> System.out.println(x.getEmp_no() + ":" + x.getFirst_name() + " " + x.getLast_name()));
tx.commit();
session.close();
}
}
2、测试结果: