王富贵之旅游吧-day02-log

王富贵之旅游吧-day01-log

日志管理模块的设计说明

本模块主要是实现用户的行为日志信息
(例如谁在什么时间地点执行了什么操作,访问了那些方法,传递了那些参数)

功能实现

日志模块的添加功能实现
关键代码实现
entity:
package com.db.pj.sys.entity;

import lombok.Data;

import java.io.Serializable;
import java.util.Date;

@Data
public class SysLog implements Serializable {

   private Integer id;
   private String username;
   private String operation;
   private String method;
   private String params;
   private Long time;
   private String ip;
   private Date createdTime;
}

dao层 : SysLogDao
int insertObject(SysLog sysLog);
mapper: SysLogDaoMapper.xml
   <insert id="insertObject">
       insert into sys_logs(username,operation,method,params,time,ip,createdTime)
       values(
           #{username},#{operation},#{method},#{params},#{time},#{ip},#{createdTime}
       )
   </insert>
service层:SysLogService
void saveObject(SysLog sysLog);
SysLogServiceImpl.class
/**
    * 添加日志信息
    * @param sysLog
    */
   @Override
   public void saveObject(SysLog sysLog) {
       sysLogDao.insertObject(sysLog);
   }
自定义注解
package com.db.pj.common.annotation;


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface RequiredLog {
    String operation() default "";
}

实现切面类
package com.db.pj.sys.service.impl;

import com.db.pj.common.exception.ServiceException;
import com.db.pj.common.vo.PageObject;
import com.db.pj.sys.dao.SysLogDao;
import com.db.pj.sys.entity.SysLog;
import com.db.pj.sys.service.SysLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class SysLogServiceImpl implements SysLogService {

    @Autowired
    private SysLogDao sysLogDao;

    /**
     * 这个是根据用户名和当前页码值进行查询的方法
     * @param username
     * @param pageCurrent
     * @return
     */
    @Override
    public PageObject<SysLog> findPageObjects(String username, Integer pageCurrent) {

        //1.验证参数的合法性
        //1.1 验证页码值的合法性
        if( pageCurrent==null || pageCurrent<1){
            throw new IllegalArgumentException("查询的页码值参数不正确奥");
        }
        //2.给予套件查询总记录数
        //2.1执行查询
        long rowCount = sysLogDao.getRowCount(username);

        //3.查询当前页面的数据记录
        Integer pageSize = 8;
        Integer startIndex = (pageCurrent-1)*pageSize;
        List<SysLog> records = sysLogDao.findPageObjects(username, startIndex, pageSize);

        //4.封装当前页信息
        PageObject<SysLog> pageObject = new PageObject<SysLog>(pageCurrent,pageSize,rowCount,records);
        return pageObject;
    }


    /**
     * 这个是根据id的值进行删除相应的记录的方法
     * @param ids
     * @return
     */
    @Override
    public int doDeleteObjects(Integer... ids) {

        // 参数校验
        if( ids==null || ids.length==0){
            throw new IllegalArgumentException("要删除的参数为空奥");
        }
        //执行方法
        int rows ;
        try{
            rows = sysLogDao.doDeleteObjects(ids);
        }catch (Exception e){
            //告知后台维护人员报错信息
            throw new ServiceException("调用Dao层根据id删除记录方法异常,请尽快处理");
        }
        //对删除的之后返回的参数进行校验
        if(rows == 0){
            throw new ServiceException("记录可能已经不存在了");
        }
        return rows;
    }

    /**
     * 添加日志信息
     * @param sysLog
     */
    @Override
    public void saveObject(SysLog sysLog) {
        sysLogDao.insertObject(sysLog);
    }
}

异常集

如果是bindException

在这里插入图片描述

  1. 查看xml文件和类名的包路径是否相同
  2. 查看xml中的id值是否和方法名相同
  3. 查看xml中的sql语句中的参数是否和方法中对应的参数名字相同
  4. 检测映射文件的路径与application.properties或者application.yml中的配置是否一致。
  5. 以上都没有问题时,检测你的类和映射文件是否正常编译。

如果是不能创建bean 异常在这里插入图片描述

  1. 查看是否添加了相应的注解@Mapper @Service
  2. 检测key的名字写的是否正确。
  3. 以上都正确,要检测是否编译了。

反射异常

在这里插入图片描述

1.映射文件中动态sql中使用的参数在接口方法中没有使用@Param注解修饰
2.假如使用了注解修饰还要检测名字是否一致。
说明:当动态sql的参数在接口中没有使用@Param注解修饰,还可以借助_parameter这个变量获取参数的值(mybatis中的一种规范)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值