目录:
在 pom.xml
文件中导入 Spring 的坐标依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
一、创建Webapp项目
在 IDEA 中根据 “maven-archetype-webapp” 模板创建 Webapp 项目:
创建基本项目结构:
在 src/main/resources 目录下新建一个 spring-config.xml
文件作为 Spring 的配置文件:
<?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">
<!-- Spring配置内容 -->
</beans>
二、加载properties文件
2.1、新建properties文件
在 src/main/resources 目录下新建一个配置数据库连接信息的配置文件 jdbc.properties
:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/spring_db
jdbc.username=root
jdbc.password=root
或者也可以把等号换成冒号:
jdbc.driver:com.mysql.jdbc.Driver
jdbc.url:jdbc:mysql://127.0.0.1:3306/spring_db?useSSL=false&setUnicode=true&characterEncoding=utf8
jdbc.username:root
jdbc.password:root
2.2、指定要加载的properties文件
在 Spring 的 XML 配置文件中加载指定 properties 文件,写法有多种:
-
加载资源路径(src/main/java/resources)下指定的一个 properties 文件:
<context:property-placeholder location="classpath:jdbc.properties"/>
-
也可以加载资源路径下的多个 properties 文件:
<context:property-placeholder location="classpath:jdbc.properties,classpath:jdbc2.properties"/>
-
使用通配符加载 properties 文件:在资源路径或 jar 包中搜索并加载所有 properties 文件
<context:property-placeholder location="classpath*:*.properties"/>
再加上 system-properties-mode="NEVER"
,表示 Spring 容器在解析 properties 配置文件时,不使用系统属性来替换配置文件中的属性,从而避免系统属性对配置产生影响:
<context:property-placeholder location="classpath:*.properties" system-properties-mode="NEVER"/>
2.3、读取properties文件属性值的方式
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
三、数据源对象(以Druid为例)
3.1、导入Druid数据源依赖坐标
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.22</version>
</dependency>
3.2、在XML文件中配置数据源对象为Spring管理的Bean
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<!-- 使用属性占位符 ${} 读取 properties 文件中的属性 -->
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!-- 初始连接数 -->
<property name="initialSize" value="10"/>
<!-- 最大连接池数量 -->
<property name="maxActive" value="100"/>
<!--
超时时间
设置为-1时,如果没有可用连接,连接池会一直无限期等待,直到获取到连接为止。
如果设置为N(毫秒),则连接池会等待N毫秒,等待不到,则抛出异常
-->
<property name="maxWait" value="-1"/>
</bean>
四、整合MyBatis
4.1、导入依赖坐标
<!-- spring-jdbc -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>6.1.4</version>
</dependency>
<!-- mybatis -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.16</version>
</dependency>
<!-- mybatis-spring -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.3</version>
</dependency>
<!-- mysql -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
4.2、配置SqlSessionFactoryBean
SqlSessionFactoryBean
是 Spring 与 MyBatis 集成时使用的一个关键类,它实现了 Spring 的 FactoryBean<SqlSessionFactory>
接口,用于创建 SqlSessionFactory
对象。
<!-- 配置 SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据源,dataSource是在前面配置的数据库连接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 从类路径下加载在mybatis/mappers包和它的子包中所有的MyBatis映射器XML文件 -->
<property name="mapperLocations" value="classpath*:com/wlplove/dao/*.xml"/>
<!-- 为Java类型设置简短的名称,从而在MyBatis的映射器文件中直接使用这个名称,而不需要写完整的类名 -->
<property name="typeAliasesPackage" value="com.wlplove.domain"/>
<!-- 通过configLocation属性指定mybatis配置文件路径,不加入这个属性则使用Spring中的配置 -->
<!-- <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>-->
<!--MyBbatis配置 -->
<property name="configuration">
<bean class="org.apache.ibatis.session.Configuration">
<property name="mapUnderscoreToCamelCase" value="true"/>
<property name="cacheEna bled" value="true"/>
<property name="defaultExecutorType" value="SIMPLE"/>
<!-- 指定MyBatis所用日志的具体实现 -->
<property name="logImpl" value="org.apache.ibatis.logging.log4j2.Log4j2Impl"/>
</bean>
</property>
</bean>
4.3、配置MapperScannerConfigurer
MapperScannerConfigurer
是 Spring 框架中用于整合 MyBatis 的一个配置类,它可以扫描指定包下的 Mapper 接口,并将它们的实现类自动注入到 Spring IoC 容器中。
<bean name="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- basePackage属性指定自动扫描Mapper接口所在的包 -->
<property name="basePackage" value="com.wlplove.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
五、整合Junit
导入 Junit 和 spring-test 的依赖坐标:
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.10.2</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
新建一个测试类:
// 在 JUnit 5 中集成 Spring 功能,如果是Junit4则换成@RunWith(SpringJunit4ClassRunner.class)
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = SpringConfig.class)
public class SpringTest {
@Autowired
private UserMapper userMapper;
@Test
public void test() {
User user = userMapper.select();
}
}
六、整合Log4j
导入 Log4j 的依赖坐标:
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.23.1</version>
</dependency>
在 "src/main/java/resources" 下新建一个 Log4j 的配置文件 Log4j2.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Configuration 具有 Appenders 和 Loggers 这两种子节点,每个子节点可以定义多个 -->
<configuration>
<!-- Appender节点,具有 Console(控制台)、File(文件)、RoolingFile(滚动文件)这三种类型的子节点 -->
<Appenders>
<!-- 输出日志信息到控制台 -->
<Console name="console" target="SYSTEM_OUT">
<!--指定控制日志输出的格式-->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss SSS} [%t] %-3level %logger{1024} - %msg%n"/>
</Console>
<!-- File 节点用来定义输出到指定位置的文件的 Appender,会将所有内容写入到同一个文件中 -->
<!-- append属性设置写入新的日志时是追加在原内容后面,还是清除所有内容之后再写入 -->
<!-- <File name="allLog" fileName="logs/AlliInOne.log" append="true">-->
<!-- <ThresholdFilter level="ALL" onMatch="ACCEPT" onMismatch="DENY"/>-->
<!-- <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5p %c{9.9.9.1}(%L) %m%n"/>-->
<!-- </File>-->
<!-- RollingFile 节点,将日志写入文件,但是允许日志文件根据时间或大小进行滚动,从而避免单个文件过大 -->
<!-- fileName 生成的初始日志文件 -->
<RollingFile name="rollingFileInfo" fileName="logs/${date:yyyy-MM}/log-info-${date:yyyy-MM-dd}.log" filePattern="logs/${date:yyyy-MM}/log-info-%d{yyyy-MM-dd}-%i.log">
<!-- ThresholdFilter 只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- PatternLayout 指定控制日志输出的格式,不设置默认为:%m%n -->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss SSS} [%t] %-3level %logger{1024} - %msg%n"/>
<!-- Policies 滚动策略 -->
<Policies>
<!-- 按时间滚动 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!-- 按大小滚动 -->
<SizeBasedTriggeringPolicy size="10MB"/>
</Policies>
<!-- DefaultRolloverStrategy 设置一个文件下保存的日志文件数量,不设置则默认为同一文件夹下7个文件,超过这个数量后,最老的文件将被删除 -->
<DefaultRolloverStrategy max="20"/>
</RollingFile>
</Appenders>
<!-- 在 Loggers 中引入上面定义好的 Appender -->
<loggers>
<!-- level指定日志级别,从低到高的优先级:
ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
-->
<!-- 设置org.mybatis包下的日志只打印WARN及以上级别 -->
<Logger name="org.mybatis" level="WARN" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="rollingFileInfo"/>
</Logger>
<!-- 设置org.springframework包下的日志只打印WARN及以上级别 -->
<Logger name="org.springframework" level="WARN" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="rollingFileInfo"/>
</Logger>
<root level="DEBUG">
<appender-ref ref="console"/>
<appender-ref ref="rollingFileInfo"/>
</root>
</loggers>
</configuration>
Log4j 配置文件详解:彻底掌握Log4j2 - 蚂蚁小哥 - 博客园
修改 Spring 配置中的 SqlSessionFactoryBean
,修改 MyBatis 使用的日志框架为 Log4j2:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据源,dataSource 是在前面配置的数据库连接池-->
<property name="dataSource" ref="dataSource"/>
<!--从类路径下加载在 mybatis/mappers 包和它的子包中所有的 MyBatis 映射器 XML 文件-->
<property name="mapperLocations" value="classpath*:com/wlplove/dao/*.xml"/>
<!-- 给包下的所有对象起一个别名,用这个别名直接引用,不需要再加包名 -->
<property name="typeAliasesPackage" value="com.wlplove.entity"/>
<!-- MyBbatis 配置 -->
<property name="configuration">
<bean class="org.apache.ibatis.session.Configuration">
<!-- 指定 MyBatis 所用日志的具体实现 -->
<property name="logImpl" value="org.apache.ibatis.logging.log4j2.Log4j2Impl"/>
</bean>
</property>
</bean>
评论 (0)