【SpringBootAOP记录用户操作日志】1.集成mybatis基础框架
在Spring框架中,使用AOP配合自定义注解可以方便的实现用户操作的监控。首先搭建一个基本的Spring Boot Web环境开启Spring Boot,然后引入必要依赖:
<dependency> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--常用工具类 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
创建记录日志的数据库表
CREATE TABLE `sys_oper_log` ( `oper_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT "日志主键",
`title` varchar(50) COLLATE utf8_bin DEFAULT "" COMMENT "模块标题",
`business_type` int(2) DEFAULT "0" COMMENT "业务类型(0其它 1新增 2修改 3删除)",
`method` varchar(100) COLLATE utf8_bin DEFAULT "" COMMENT "方法名称",
`request_method` varchar(10) COLLATE utf8_bin DEFAULT "" COMMENT "请求方式",
`operator_type` int(1) DEFAULT "0" COMMENT "操作类别(0其它 1后台用户 2手机端用户)",
`oper_name` varchar(50) COLLATE utf8_bin DEFAULT "" COMMENT "操作人员",
`dept_name` varchar(50) COLLATE utf8_bin DEFAULT "" COMMENT "部门名称",
`oper_url` varchar(255) COLLATE utf8_bin DEFAULT "" COMMENT "请求URL",
`oper_ip` varchar(50) COLLATE utf8_bin DEFAULT "" COMMENT "主机地址",
`oper_location` varchar(255) COLLATE utf8_bin DEFAULT "" COMMENT "操作地点",
`oper_param` varchar(2000) COLLATE utf8_bin DEFAULT "" COMMENT "请求参数",
`json_result` varchar(2000) COLLATE utf8_bin DEFAULT "" COMMENT "返回参数",
`status` int(1) DEFAULT "0" COMMENT "操作状态(0正常 1异常)",
`error_msg` varchar(2000) COLLATE utf8_bin DEFAULT "" COMMENT "错误消息",
`oper_time` datetime DEFAULT NULL COMMENT "操作时间",
PRIMARY KEY (`oper_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT="操作日志记录";
配置application.yml数据库连接
server: port: 8080
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/aoplog?useUnicode=yes&characterEncoding=UTF-8&useSSL=false
username: root
password: 123456
新建实体类domain文件夹
SysOperLog.java
import lombok.Data;
import java.util.Date;
/**
* 操作日志记录表 oper_log
*
* @author hekang
*/
@Data
public class SysOperLog
{
private static final long serialVersionUID = 1L;
/** 日志主键 */
private Long operId;
/** 操作模块 */
private String title;
/** 业务类型(0其它 1新增 2修改 3删除) */
private Integer businessType;
/** 业务类型数组 */
private Integer[] businessTypes;
/** 请求方法 */
private String method;
/** 请求方式 */
private String requestMethod;
/** 操作类别(0其它 1后台用户 2手机端用户) */
private Integer operatorType;
/** 操作人员 */
private String operName;
/** 部门名称 */
private String deptName;
/** 请求url */
private String operUrl;
/** 操作地址 */
private String operIp;
/** 操作地点 */
private String operLocation;
/** 请求参数 */
private String operParam;
/** 返回参数 */
private String jsonResult;
/** 操作状态(0正常 1异常) */
private Integer status;
/** 错误消息 */
private String errorMsg;
/** 操作时间 */
private Date operTime;
}
如果没有@Data注解请在IDEA里安装lombok插件
新建service接口类
package com.exception.exceptiondemo.service;import com.aoplog.springbootaoplog.domain.SysOperLog;
import java.util.List;
/**
* 操作日志 服务层
*
* @author hekang
*/
public interface ISysOperLogService
{
/**
* 新增操作日志
*
* @param operLog 操作日志对象
*/
public void insertOperlog(SysOperLog operLog);
/**
* 查询系统操作日志集合
*
* @param operLog 操作日志对象
* @return 操作日志集合
*/
public List<SysOperLog> selectOperLogList(SysOperLog operLog);
/**
* 查询操作日志详细
*
* @param operId 操作ID
* @return 操作日志对象
*/
public SysOperLog selectOperLogById(Long operId);
/**
* 清空操作日志
*/
public void cleanOperLog();
}
新建service接口实现类
import com.aoplog.springbootaoplog.domain.SysOperLog;
import com.aoplog.springbootaoplog.mapper.SysOperLogMapper;
import com.aoplog.springbootaoplog.service.ISysOperLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 操作日志 服务层处理
*
* @author hekang
*/
@Service
public class SysOperLogServiceImpl implements ISysOperLogService
{
@Autowired
private SysOperLogMapper operLogMapper;
/**
* 新增操作日志
*
* @param operLog 操作日志对象
*/
@Override
public void insertOperlog(SysOperLog operLog)
{
operLogMapper.insertOperlog(operLog);
}
/**
* 查询系统操作日志集合
*
* @param operLog 操作日志对象
* @return 操作日志集合
*/
@Override
public List<SysOperLog> selectOperLogList(SysOperLog operLog)
{
return operLogMapper.selectOperLogList(operLog);
}
/**
* 查询操作日志详细
*
* @param operId 操作ID
* @return 操作日志对象
*/
@Override
public SysOperLog selectOperLogById(Long operId)
{
return operLogMapper.selectOperLogById(operId);
}
/**
* 清空操作日志
*/
@Override
public void cleanOperLog()
{
operLogMapper.cleanOperLog();
}
}
新建mapper接口类
import com.aoplog.springbootaoplog.domain.SysOperLog;
import java.util.List;
/**
* 操作日志 数据层
*
* @author hekang
*/
public interface SysOperLogMapper
{
/**
* 新增操作日志
*
* @param operLog 操作日志对象
*/
public void insertOperlog(SysOperLog operLog);
/**
* 查询系统操作日志集合
*
* @param operLog 操作日志对象
* @return 操作日志集合
*/
public List<SysOperLog> selectOperLogList(SysOperLog operLog);
/**
* 查询操作日志详细
*
* @param operId 操作ID
* @return 操作日志对象
*/
public SysOperLog selectOperLogById(Long operId);
/**
* 清空操作日志
*/
public void cleanOperLog();
}
创建SQL的mapper文件
<?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.aoplog.springbootaoplog.mapper.SysOperLogMapper">
<resultMap type="SysOperLog" id="SysOperLogResult">
<id property="operId" column="oper_id" />
<result property="title" column="title" />
<result property="businessType" column="business_type" />
<result property="method" column="method" />
<result property="requestMethod" column="request_method" />
<result property="operatorType" column="operator_type" />
<result property="operName" column="oper_name" />
<result property="deptName" column="dept_name" />
<result property="operUrl" column="oper_url" />
<result property="operIp" column="oper_ip" />
<result property="operLocation" column="oper_location" />
<result property="operParam" column="oper_param" />
<result property="jsonResult" column="json_result" />
<result property="status" column="status" />
<result property="errorMsg" column="error_msg" />
<result property="operTime" column="oper_time" />
</resultMap>
<sql id="selectOperLogVo">
select oper_id, title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, oper_time
from sys_oper_log
</sql>
<insert id="insertOperlog" parameterType="SysOperLog">
insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, oper_time)
values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName}, #{operUrl}, #{operIp}, #{operLocation}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, sysdate())
</insert>
<select id="selectOperLogList" parameterType="SysOperLog" resultMap="SysOperLogResult">
<include refid="selectOperLogVo"/>
<where>
<if test="title != null and title != """>
AND title like concat("%", #{title}, "%")
</if>
<if test="businessType != null">
AND business_type = #{businessType}
</if>
<if test="businessTypes != null and businessTypes.length > 0">
AND business_type in
<foreach collection="businessTypes" item="businessType" open="(" separator="," close=")">
#{businessType}
</foreach>
</if>
<if test="status != null">
AND status = #{status}
</if>
<if test="operName != null and operName != """>
AND oper_name like concat("%", #{operName}, "%")
</if>
</where>
</select>
<select id="selectOperLogById" parameterType="Long" resultMap="SysOperLogResult">
<include refid="selectOperLogVo"/>
where oper_id = #{operId}
</select>
<update id="cleanOperLog">
truncate table sys_oper_log
</update>
</mapper>
这里新建文件夹的时候要注意不能这样创建:
这样先新建mapper在新建子目录system
新建mybatis配置文件
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="cacheEnabled" value="true" /> <!-- 全局映射器启用缓存 -->
<setting name="useGeneratedKeys" value="true" /> <!-- 允许 JDBC 支持自动生成主键 -->
<setting name="defaultExecutorType" value="REUSE" /> <!-- 配置默认的执行器 -->
<setting name="logImpl" value="SLF4J" /> <!-- 指定 MyBatis 所用日志的具体实现 -->
<!-- <setting name="mapUnderscoreToCamelCase" value="true"/> 驼峰式命名 -->
</settings>
</configuration>
配置注解到启动类SpringBootAopLogApplication
@MapperScan("com.aoplog.**.mapper")
在application.yml配置mybatis扫描目录
mybatis: type-aliases-package: com.aoplog.springbootaoplog.domain
configLocation: classpath:mybatis/mybatis-config.xml
mapperLocations: classpath*:mapper/**/*Mapper.xml
新建SysOperLogController
import com.aoplog.springbootaoplog.domain.SysOperLog;import com.aoplog.springbootaoplog.service.ISysOperLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class SysOperLogController {
@Autowired
private ISysOperLogService iSysOperLogService;
/**
* 查询全部日志
*
* @return
*/
@GetMapping("/api/operLog")
public List<SysOperLog> selectOperLogList() {
return this.iSysOperLogService.selectOperLogList(null);
}
}
启动项目:http://127.0.0.1:8080/api/operLog
以上是 【SpringBootAOP记录用户操作日志】1.集成mybatis基础框架 的全部内容, 来源链接: utcz.com/z/512206.html