【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

回到顶部