阅读本文前,请先学习完成我的上一篇文章。上一篇文章地址
IDEA搭建spring boot项目四:AOP+log4j打日志。_cunRenJi的博客-CSDN博客
mybatis简介
略
一、pom.xml中添加mybatis相关依赖并重载项目
此时的pom.xml文件内容
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.jicr</groupId>
<artifactId>springbootTest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springbootTest</name>
<description>springbootTest</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--排除logging,使用log4j需要-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--处理json相关依赖-->
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<classifier>jdk15</classifier>
<version>2.4</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--aop切面,用来存储日志-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<version>2.6.2</version>
</dependency>
<!--特别是字符串操作方法,基本数值方法,对象反射,并发,创建和序列化以及系统属性。此外,它还包含对java.util.Date的基本增强-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
<!--使用log4j2打日志-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<version>2.6.2</version>
</dependency>
<!--Java持久化接口,提供数据库实体类使用的注解-->
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0.2</version>
</dependency>
<!--连接数据库相关依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
二、创建mysql数据库表以备用
-- auto-generated definition
create table logs
(
seq varchar(50) not null comment '流水号'
primary key,
server_code varchar(20) not null comment '服务编码',
server_name varchar(100) null comment '服务名称',
head_req_date date null comment '请求日期',
head_req_time varchar(20) null comment '请求时间',
head_req_organ varchar(50) null comment '请求方名称',
req_content varchar(4000) null comment '请求报文',
head_rsp_date date null comment '响应日期',
head_rsp_time varchar(20) null comment '响应时间',
rsp_content varchar(4000) null comment '响应内容'
)
comment '日志存储表';
使用idea连接数据库(用navicat也行)
三、在resources目录下创建3个yml文件,分别在开发,测试,生产时使用
事实上这三个文件需要在项目开始创建application.yml文件时就创建,application.yml文件用来配置公共信息,其他3个文件配置不同阶段所需不同的配置信息。
在application.yml文件中配置寻找对应阶段的yml文件。
application.yml文件内容
# 数据源
spring:
profiles:
active: dev #通过设置此项来寻找对应yml文件
application:
name: springbootTestApp #应用名称
servlet:
multipart:
enabled: true
max-file-size: 100MB
max-request-size: 100MB
logging:
config: classpath:log4j2.xml
level:
com:
kj:
sbkj:
dao: debug
在application-dev.yml文件中配置数据库信息
application-dev.yml文件内容
server:
port: 8088
servlet:
encoding:
charset: UTF-8
enabled: true
force: true
context-path:
address: localhost
spring:
datasource:
#开发环境
url: jdbc:mysql://localhost:3306/springbootdatabase?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
# driverClassName: oracle.jdbc.driver.OracleDriver
# url: jdbc:oracle:thin:@(DESCRIPTION=(ENABLE=BROKEN)(LOAD_BALANCE=off)(FAILOVER=on)(ADDRESS_LIST = (ADDRESS=(PROTOCOL=tcp)(HOST=10.0.0.23)(PORT=11521))(ADDRESS=(PROTOCOL=tcp)(HOST=10.0.0.34)(PORT=11521))(ADDRESS=(PROTOCOL=tcp)(HOST=10.0.0.32)(PORT=11521))(ADDRESS=(PROTOCOL=tcp)(HOST=10.0.0.33)(PORT=11521)))(CONNECT_DATA=(SERVICE_NAME=bdpdb0_yen00128_01.ccb.com)(FAILOVER_MODE=(TYPE=select)(METHOD=basic))(server=dedicated)))
# username: testimage
# password: DBCS_image2020
# type: com.alibaba.druid.pool.DruidDataSource
# 初始化大小,最小,最大
initialSize: 5
minIdle: 5
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache,并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters: stat,wall,log4j
# 合并多个DruidDataSource的监控数据
useGlobalDataSourceStat: true
四、model目录下创建table目录,进入创建数据库表对应的实体类Logs.java
Logs.java文件内容
package com.jicr.springboottest.model.table;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
@Entity
@Data
@Table(name = "logs") //表名
public class Logs {
//流水号
@Id
@Column(name = "seq", length = 50, nullable = false)//nullable表示是否为空,不设置默认true可以为空,若希望不为空,则此字段赋值false
private String seq;
//服务编码
@Column(name = "server_code", length = 20)
private String serverCode;
//服务名称
@Column(name = "server_name", length = 100)
private String serverName;
//请求日期
@Column(name = "head_req_date")
private Date headReqDate;
//请求时间
@Column(name = "head_req_time", length = 20)
private String headReqTime;
//请求方名称
@Column(name = "head_req_organ", length = 50)
private String headReqOrgan;
//请求报文
@Column(name = "req_content", length = 4000)
private String reqContent;
//响应日期
@Column(name = "head_rsp_date")
private Date headRspDate;
//响应时间
@Column(name = "head_rsp_time", length = 20)
private String headRspTime;
//响应内容
@Column(name = "rsp_content", length = 4000)
private String rspContent;
}
五、resources目录下创建LogsMapper.xml文件
LogsMapper.xml文件内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jicr.springboottest.dao.LogsMapper">
<resultMap id="BaseResultMap" type="com.jicr.springboottest.model.table.Logs">
<id column="seq" jdbcType="VARCHAR" property="seq"/>
<result column="server_code" jdbcType="VARCHAR" property="serverCode"/>
<result column="server_name" jdbcType="VARCHAR" property="serverName"/>
<result column="head_req_date" jdbcType="DATE" property="headReqDate"/>
<result column="head_req_time" jdbcType="VARCHAR" property="headReqTime"/>
<result column="head_req_organ" jdbcType="VARCHAR" property="headReqOrgan"/>
<result column="req_content" jdbcType="VARCHAR" property="reqContent"/>
<result column="head_rsp_date" jdbcType="DATE" property="headRspDate"/>
<result column="head_rsp_time" jdbcType="VARCHAR" property="headRspTime"/>
<result column="rsp_content" jdbcType="VARCHAR" property="rspContent"/>
</resultMap>
<select id="selectByServerCode" parameterType="java.lang.String" resultMap="BaseResultMap">
select *
from logs
where seq = #{seq,jdbcType=VARCHAR}
</select>
<insert id="insertOne" keyProperty="seq" useGeneratedKeys="true" parameterType="com.jicr.springboottest.model.table.Logs">
insert into logs(seq, server_code, server_name, head_req_date, head_req_time, head_req_organ, req_content,
head_rsp_date, head_rsp_time, rsp_content)
values (#{seq,jdbcType=VARCHAR}, #{serverCode,jdbcType=VARCHAR}, #{serverName,jdbcType=VARCHAR},
#{headReqDate,jdbcType=DATE}, #{headReqTime,jdbcType=VARCHAR}, #{headReqOrgan,jdbcType=VARCHAR},
#{reqContent,jdbcType=VARCHAR}, #{headRspDate,jdbcType=DATE}, #{headRspTime,jdbcType=VARCHAR},
#{rspContent,jdbcType=VARCHAR})
</insert>
<update id="updateOne" parameterType="com.jicr.springboottest.model.table.Logs">
update logs
<set>
<if test="seq != null">seq = #{seq,jdbcType=VARCHAR},</if>
<if test="serverCode != null">server_code = #{serverCode,jdbcType=VARCHAR},</if>
<if test="serverName != null">server_name = #{serverName,jdbcType=VARCHAR},</if>
<if test="headReqDate != null">head_req_date = #{headReqDate,jdbcType=DATE},</if>
<if test="headReqTime != null">head_req_time = #{headReqTime,jdbcType=VARCHAR},</if>
<if test="headReqOrgan != null">head_req_organ = #{headReqOrgan,jdbcType=VARCHAR},</if>
<if test="reqContent != null">req_content = #{reqContent,jdbcType=VARCHAR},</if>
<if test="headRspDate != null">head_rsp_date = #{headRspDate,jdbcType=DATE},</if>
<if test="headRspTime != null">head_rsp_time = #{headRspTime,jdbcType=VARCHAR},</if>
<if test="rspContent != null">rsp_content = #{rspContent,jdbcType=VARCHAR},</if>
</set>
where seq = #{seq,jdbcType=VARCHAR}
</update>
</mapper>
六、dao目录下创建LogsMapper.java接口
LogsMapper.java接口内容
package com.jicr.springboottest.dao;
import com.jicr.springboottest.model.table.Logs;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface LogsMapper {
Logs selectByServerCode(@Param("seq") String seq);
Boolean updateOne(Logs Logs);
Boolean insertOne(Logs Logs);
}
注意LogsMapper.java接口与LogsMapper.xml文件对应关系