一、基础环境
1、Windows10、Java17、Maven3.8.8、Tomcat9.0.76、IDEA2022.3.3
2、已完成Maven项目的创建
2、已完成Struts2、Spring、Hibernate依赖配置
3、已完成实体类创建、Hibernate映射配置、第一种方式的sessionFactory配置,并且以上配置已测试通过
二、框架版本
struts2:2.5.31
spring:5.3.27
hibernate:5.6.15.Final
三、数据源和会话工厂配置
方法一:定义独立的Hibernate配置文件(包括数据源信息的配置和实体类映射文件的引用),由Spring导入并创建会话工厂。
方法二:在Spring配置文件中进行集中配置
1、创建数据库连接属性文件,配置数据库连接信息
2、加载数据库连接属性文件
3、配置数据源dataSource
4、配置会话工厂(包含数据源、实体类映射文件(配置的方式有三种)、hibernateProperties等)
方法一:
1、配置hibernate.cfg.xml
2、导入hibernate.cfg.xml创建会话工厂
方法二:
1、使用C3P0连接池进行配置
1.1、创建数据库连接属性文件,配置数据库连接信息
进入C3P0官网,地址:https://www.mchange.com/projects/c3p0/
下载项目,将项目中的c3p0.properties复制到目标项目中
启用c3p0.properties中的参数
1.2、配置目标项目的applicationContext.xml文件
1.2.1、注释掉方法一的代码
1.2.2、加载数据库连接属性文件、配置数据源、创建会话工厂
代码如下:
<!-- 第二种方式:在Spring配置文件中集中配置数据源和会话工厂 -->
<!-- 配置c3p0连接池:加载数据库属性文件、配置数据源 -->
<context:property-placeholder location="classpath:c3p0.properties" />
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${c3p0.driverClass}"/>
<property name="jdbcUrl" value="${c3p0.jdbcUrl}"/>
<property name="user" value="${c3p0.user}"/>
<property name="password" value="${c3p0.password}"/>
<property name="minPoolSize" value="${c3p0.minPoolSize}"/>
<property name="maxPoolSize" value="${c3p0.maxPoolSize}"/>
</bean>
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 指定实体类映射文件 -->
<property name="mappingResources">
<list>
<value>demo/employee/entity/employee.hbm.xml</value>
</list>
</property>
<!-- hibernate属性配置,如数据库方言、显示实际操作数据库时的SQL、规范SQL排版 -->
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
hibernate.format_sql=true
</value>
</property>
</bean>
1.3、测试配置是否正确
2、使用Hikaricp连接池进行配置
2.1、查看hikaricp在Hibernate中的配置
进入GitHub中的hikaricp项目,地址:https://github.com/brettwooldridge/HikariCP
图中的“com.mysql.jdbc.jdbc2.optional.MysqlDataSource”根据MySQL驱动的版本会有所区别,8.0.33应使用“com.mysql.cj.jdbc.MysqlDataSource”。
2.2、添加数据库属性配置文件database.properties
代码如下:
jdbc.url=jdbc:mysql://192.168.127.128:3306/employees?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=123456
2.3、注释掉c3p0连接池配置,并配置hikaricp
代码如下:
<!-- 配置hikaricp连接池:加载数据库属性文件、配置数据源 -->
<context:property-placeholder location="classpath:database.properties" />
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="poolName" value="springHikariCP" />
<property name="connectionTestQuery" value="SELECT 1" />
<property name="dataSourceClassName" value="com.mysql.cj.jdbc.MysqlDataSource" />
<property name="minimumIdle" value="${jdbc.minimumIdle}" />
<property name="maximumPoolSize" value="${jdbc.maximumPoolSize}" />
<property name="dataSourceProperties">
<props>
<prop key="url">${jdbc.url}</prop>
<prop key="user">${jdbc.username}</prop>
<prop key="password">${jdbc.password}</prop>
</props>
</property>
</bean>
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<constructor-arg ref="hikariConfig" />
</bean>
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 指定实体类映射文件 -->
<property name="mappingResources">
<list>
<value>demo/employee/entity/employee.hbm.xml</value>
</list>
</property>
<!-- hibernate属性配置,如数据库方言、显示实际操作数据库时的SQL、规范SQL排版 -->
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
hibernate.format_sql=true
</value>
</property>
</bean>
2.4、测试配置是否正确
三、解决控制台的标红提示
org.log4j.slf4j.impl.Static加载类失败
在pom.xml文件中引入log4j-slf4j-impl依赖,解决标红
四、配置日志打印
1、在项目resource目录下新建log4j2.xml文件
2、将“HikariCP-dev\src\test\resources\log4j2-test.xml”文件中的内容复制到新建的log4j2.xml文件中
代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
<appenders>
<Console name="Console" target="SYSTEM_ERR">
<PatternLayout pattern="%d{ABSOLUTE_MICROS} [seq%5sn] [%-40.40t] %-5level %-20c{1} - %msg%n"/>
</Console>
</appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</configuration>
3、测试是否生效