Mybatis 日志(Log4j2)

news2024/11/28 15:51:58

之前我们介绍了使用JDK Log、Apache Commons Logging打印Mybatis运行时的日志;本篇我们介绍使用Log4j2打印Mybatis运行时的日志。

如何您对Mybatis中使用JDK Log、Apache Commons Logging打印Mybatis运行时的日志不太了解,可以参考:

Mybatis 日志(JDK Log)icon-default.png?t=N7T8https://blog.csdn.net/m1729339749/article/details/132565362Mybatis 日志(Apache Commons Logging)icon-default.png?t=N7T8https://blog.csdn.net/m1729339749/article/details/133266537

一、添加依赖

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.5</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.49</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.20.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.20.0</version>
</dependency>

二、配置Mybatis

在mybatis-config.xml文件中配置logImpl

<?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="logImpl" value="LOG4J2"/>
    </settings>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="org.gjt.mm.mysql.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/demo?useUnicode=true&amp;useSSL=false&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="horse"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

在配置文件中,我们配置了logImpl,值配置成了LOG4J2,代表的是使用Log4j2提供的日志系统

三、Log4j2日志配置

1、log4j2.component.properties

在resources目录下新建log4j2.component.properties配置文件

log4j.configurationFile=log4j2.properties

log4j.configurationFile用于指定log4j2的配置文件

2、log4j2.properties

在resources目录下新建log4j2.properties配置文件

status = ERROR

logger.action.name = cn.horse.demo.UserInfoMapper
logger.action.level = debug

log4j2.properties配置文件中配置了日志的级别

四、启动程序

1、准备数据

-- 如果数据库不存在则创建数据库
CREATE DATABASE IF NOT EXISTS demo DEFAULT CHARSET utf8;
-- 切换数据库
USE demo;
-- 创建用户表
CREATE TABLE IF NOT EXISTS T_USER(
  ID INT PRIMARY KEY,
  USERNAME VARCHAR(32) NOT NULL,
  AGE INT NOT NULL
);
-- 插入用户数据
INSERT INTO T_USER(ID, USERNAME, AGE)
VALUES(1, '张三', 20),(2, '李四', 22),(3, '王五', 24);

2、StatementUtils类

在cn.horse.demo下新建StatementUtils类

StatementUtils类:

package cn.horse.demo;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;
import java.util.List;
import java.util.Objects;

public abstract class StatementUtils {

    public static void find(String statement, Object parameter) {
        // 读取mybatis配置文件
        InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("mybatis-config.xml");
        // 根据配置创建SqlSession工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                .build(inputStream);

        SqlSession sqlSession = null;
        try {
            // 创建SqlSession
            sqlSession = sqlSessionFactory.openSession();
            // 查询用户列表
            List<UserInfo> userInfoList = sqlSession.selectList(statement, parameter);
            for (UserInfo userInfo: userInfoList) {
                System.out.println(userInfo);
            }
        } finally {
            // 关闭会话
            if(Objects.nonNull(sqlSession)) {
                sqlSession.close();
            }
        }
    }
}

3、UserInfo类

在cn.horse.demo下新建UserInfo类

UserInfo类:

package cn.horse.demo;

public class UserInfo {

    private Integer id;
    private String name;
    private Integer age;

    @Override
    public String toString() {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append('{');
        stringBuilder.append("id: " + this.id);
        stringBuilder.append(", ");
        stringBuilder.append("name: " + this.name);
        stringBuilder.append(", ");
        stringBuilder.append("age: " + this.age);
        stringBuilder.append('}');
        return stringBuilder.toString();
    }
}

4、UserInfoMapper配置

在resources下新建demo目录,在目录下新建UserInfoMapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.horse.demo.UserInfoMapper">

    <select id="findByAge" resultType="cn.horse.demo.UserInfo">
        SELECT
            ID,
            USERNAME name,
            AGE
        FROM T_USER
        WHERE AGE > #{age}
    </select>
</mapper>

在mybatis-config.xml文件中引入UserInfoMapper.xml配置文件

<mappers>
    <mapper resource="demo/UserInfoMapper.xml" />
</mappers>

5、启动程序

package cn.horse.demo;

public class Main {
    public static void main(String[] args) {
        System.setProperty("java.util.logging.config.class", "cn.horse.demo.JdkLogConfig");
        StatementUtils.find("cn.horse.demo.UserInfoMapper.findByAge", 21);
    }
}

执行的结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1041923.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用群晖实现Videostation电影的大容量存储及分享教程

文章目录 1.使用环境要求2.制作视频分享链接3.制作永久固定视频分享链接 李哥和他的女朋友是一对甜蜜的情侣&#xff0c;但不幸的是&#xff0c;由于工作原因&#xff0c;他们目前分隔两地&#xff0c;无法常常亲密相伴。 这个距离让李哥特别怀念和女朋友一起在电影院观看电影的…

zabbix6.0监控磁盘IO

客户端配置 配置参数 [rootora19c zabbix]# pwd /usr/local/zabbix/etc/ [rootora19c zabbix]# vim zabbix_agentd.conf UnsafeUserParameters1配置UI监控conf文件 [rootora19c zabbix_agentd.d]# pwd /usr/local/zabbix/etc/zabbix_agentd.d/ [rootora19c zabbix_agentd.d…

大数据Flink(八十六):DML:Group 聚合和Over 聚合

文章目录 DML:Group 聚合和Over 聚合 一、DML:Group 聚合

CasaOS:一个docker容器应用的可视化Portal

CasaOS 官网声称他是一个家庭云操作系统&#xff0c;但我实际使用后感觉称之为“docker容器的可视化Portal”更合适。因为它本身不具备IAAS、PAAS、或SAAS的开箱即用能力&#xff0c;更像是一个把OS上的docker Container集中管理并展示的索引目录&#xff0c;各个docker Contai…

点成分享丨水浴设备在食品理化特性研究中的应用

木薯粉拯救“一麦难求” 近年来&#xff0c;随着全球人口增长、城市化进程的加快及人们饮食习惯的改变&#xff0c;以小麦为原料的食品成为了人们的“热门主食”&#xff0c;但实际每年产出的小麦不足以满足人们与日俱增的需求。为了解决这一问题&#xff0c;人们开始寻找小麦…

CTF_BUUCTF_Reverse解题_04内涵的软件

题目地址&#xff1a;BUUCTF在线评测 拿到文件&#xff0c;运行&#xff0c;狗&#xff01;&#xff01;&#xff01; 不管回答Y还是N&#xff0c;程序都最终会一闪而过 上PE 32位C没壳 上IDA 32 F5反汇编一下&#xff1a; 直接发现Y和N&#xff0c; 看到有if判断语…

安科瑞医用隔离电源系统在江苏某医院项目中的应用

安科瑞 崔丽洁 江苏摘要&#xff1a;介绍该三级乙等综合医院采用安科瑞医用隔离电源系统&#xff0c;使用分体配电柜安装方式&#xff0c;从而实现将TN系统转化为IT系统&#xff0c;以及系统绝缘情况监测。 1、概述 该医院占地面积4.2万平方米&#xff0c;建筑面积7.14万平方米…

【C语言】通讯录

目录 一、关于通讯录 二、代码逻辑 三、通讯录实现 1.菜单设计 2.逻辑主要功能设计 3.增加联系人功能实现 4.显示全部联系人信息 5.删除联系人 6.查找联系人 7.修改联系人信息 8.对联系人进行排序 9.一键清空所有联系人 四、完整源码 test.c contact.c contact.…

新版WordPress系统文章自动采集插件/Auto Post pro完美运行版/多线程采集(wp自动采集)

源码介绍&#xff1a; 最新版WordPress系统文章自动采集插件&#xff0c;它是一款帮助用户提供方便快捷的文章自动采集方案的插件。WordPress自动采集插件&#xff0c;让内容采集变得高效便捷。作为Auto Post pro完美运行版&#xff0c;这里分享的是WordPress文章采集插件Auto…

【Vue3】v-model

v-model 基本用法 prop: modelValue 事件&#xff1a;update:modelValue <!-- App.vue --><template><div><h1>我是父组件</h1><div>isShow: {{ isShow }}</div><div><button click"isShow !isShow">开关&…

Java 华为真题-出租车计费

需求 程序员小明打了一辆出租车去上班。出于职业敏感&#xff0c;他注意到这辆出租车的计费表有点问题&#xff0c;总是偏大。 出租车司机解释说他不喜欢数字4&#xff0c;所以改装了计费表&#xff0c;任何数字位置遇到数字4就直接跳过&#xff0c;其余功能都正常。 比如&…

未曾想象!AIGC席卷之下,版权法律界竟手足无措?

人工智能生成内容&#xff08;AIGC&#xff09;的惊人崛起&#xff0c;标志着我们正步入一片前所未有的创作之境。美国纽约&#xff0c;销售员布雷特希克勒&#xff08;Brett Schickler&#xff09;通过与对话机器人ChatGPT的交流&#xff0c;仅用数小时便完成了一本名为《聪明…

KSG互信息估计器的原理详细推导(Kraskov, 2004)

KSG Estimators KSG估计器是Kraskov在2004年提出的互信息估计器&#xff0c;其原文过于简略&#xff0c;我参考大量文献对细节进行了补充。原文位置&#xff1a;[https://arxiv.org/pdf/cond-mat/0305641.pdf] KSG估计的基本方法是首先对互信息进行如下分解 (1) I ( X , Y )…

纽扣电池16CRF1700.15,16CFR1700.20,ANSI C18.3M如何申请?

随着科技的发展&#xff0c;纽扣电池被广泛应用于小型电子产品&#xff0c;如计算器、电子手表、玩具、医疗设备等。由于其体积小&#xff0c;易于拆卸&#xff0c;也造成了儿童误吞的潜在风险。因此&#xff0c;对于纽扣电池的认证和包装&#xff0c;各国均有相应的规定。 在美…

磁盘占用率100% 的优化方案

1.禁用不必要的系统服务 右键点击此电脑&#xff0c;打开管理 打开服务 寻找SysMain 右键属性 》 禁用 》 停止 》 应用 SysMain的作用&#xff1a;当开机后&#xff0c;windows会加载大量的应用程序预加载到内存中&#xff0c;会在后台预加载数据&#xff08;如果是旧版本win…

概率深度学习建模数据不确定性

https://zhuanlan.zhihu.com/p/568912284理解论文 What uncertainties do we need in Bayesian deep learning for computer vision? &#xff08;NeurIPS 2017) [1]中的数据不确定性建模&#xff0c;并给出公式推导。论文[1]指出不确定性uncertainty分为随机不确定性(aleator…

【算法与数据结构】JavaScript实现十大排序算法(一)

文章目录 关于排序算法冒泡排序选择排序插入排序希尔排序归并排序 关于排序算法 稳定排序&#xff1a; 在排序过程中具有相同键值的元素&#xff0c;在排序之后仍然保持相对的原始顺序。意思就是说&#xff0c;现在有两个元素a和b&#xff0c;a排在b的前面&#xff0c;且ab&…

linux通过time命令统计代码编译时间

首先编写一个编译脚本 build.sh 内容如下&#xff1a; 然后执行time sh build.sh 编译完成后输出三个时间 time sh xxx.sh # 会返回3个时间数据 (1) real&#xff1a;从进程 ls 开始执行到完成所耗费的 CPU 总时间。该时间包括 ls 进程执行时实际使用的 CPU 时间&#xff0c;…

影刀自动化采集底层逻辑

hello,大家好&#xff0c;这里是【玩数据的诡途】 接上回 <我的影刀故事> 今天给大家介绍一下整个采集的底层逻辑&#xff0c;包括业务流程自动化也是基于这一套基础逻辑进行展开的&#xff0c;顺便带大家熟悉一下影刀&#xff0c;既然叫影刀系列了&#xff0c;那后续一些…

怕客户跑单?这套上市制造企业都在使的订单管理方案你一定要看看

随着我国工业和科技的不断发展&#xff0c;越来越多的制造业企业出现订单管理问题&#xff0c;比如订单交期延误、缺乏预警能力等等&#xff0c;轻则客户跑单&#xff0c;重则影响品牌声誉。 其实这些问题都是因为制造企业的订单全流程无法打通、订单信息不能可视化、无法实时监…