• Mybatis 日志(Apache Commons Logging)


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

    如何您对Mybatis中使用JDK Log不太了解,可以参考:

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

    一、添加依赖

    1. <dependency>
    2. <groupId>org.mybatisgroupId>
    3. <artifactId>mybatisartifactId>
    4. <version>3.4.5version>
    5. dependency>
    6. <dependency>
    7. <groupId>mysqlgroupId>
    8. <artifactId>mysql-connector-javaartifactId>
    9. <version>5.1.49version>
    10. dependency>
    11. <dependency>
    12. <groupId>commons-logginggroupId>
    13. <artifactId>commons-loggingartifactId>
    14. <version>1.2version>
    15. dependency>

    二、配置Mybatis

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

    1. "1.0" encoding="UTF-8" ?>
    2. configuration
    3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
    5. <configuration>
    6. <settings>
    7. <setting name="logImpl" value="COMMONS_LOGGING"/>
    8. settings>
    9. <environments default="development">
    10. <environment id="development">
    11. <transactionManager type="JDBC"/>
    12. <dataSource type="POOLED">
    13. <property name="driver" value="org.gjt.mm.mysql.Driver"/>
    14. <property name="url" value="jdbc:mysql://localhost:3306/demo?useUnicode=true&useSSL=false&characterEncoding=utf8"/>
    15. <property name="username" value="root"/>
    16. <property name="password" value="horse"/>
    17. dataSource>
    18. environment>
    19. environments>
    20. configuration>

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

    由于Apache Commons Logging 仅提供用于写入日志消息的桥接器,默认情况下Apache Commons Logging桥接到JDK Log日志系统,这里我们使用默认的日志桥接方式,配置JDK日志。

    三、JDK日志配置

    1、logging.properties

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

    1. handlers=java.util.logging.ConsoleHandler
    2. .level=INFO
    3. cn.horse.demo.UserInfoMapper.level=FINEST
    4. java.util.logging.ConsoleHandler.level=ALL
    5. java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
    6. java.util.logging.SimpleFormatter.format=%1$tY-%1$tm-%1$td %1$tT.%1$tL %4$s %3$s - %5$s%6$s%n

    handlers代表的是日志处理器,java.util.logging.ConsoleHandler处理器用于直接在控制台打印日志

    .level代表的是全局日志级别

    java.util.logging.ConsoleHandler.level设置的是处理器需要处理的日志级别

    java.util.logging.ConsoleHandler.formatter设置的是处理器打印日志使用的格式化器

    java.util.logging.SimpleFormatter.format设置的是处理器打印日志的格式

            1$:代表的是执行时间

            2$:代表的是调用源(Jdk Log的调用源都为Jdk14LoggingImpl)

            3$:代表的是日志名称

            4$:代表的是日志级别

            5$:代表的是日志内容

            6$:代表的是异常信息

            格式的定义需要参考java.util.Formatter

    2、JdkLogConfig

    我们在cn.horse.demo下新建JdkLogConfig类

    JdkLogConfig类:

    1. package cn.horse.demo;
    2. import java.io.IOException;
    3. import java.io.InputStream;
    4. import java.util.logging.LogManager;
    5. public class JdkLogConfig {
    6. public JdkLogConfig() {
    7. try {
    8. InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("logging.properties");
    9. LogManager.getLogManager().readConfiguration(inputStream);
    10. } catch (IOException e) {
    11. throw new RuntimeException(e);
    12. }
    13. }
    14. }

    此类用于加载logging.properties配置文件

    四、启动程序

    1、准备数据

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

    2、StatementUtils类

    在cn.horse.demo下新建StatementUtils类

    StatementUtils类:

    1. package cn.horse.demo;
    2. import org.apache.ibatis.session.SqlSession;
    3. import org.apache.ibatis.session.SqlSessionFactory;
    4. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    5. import java.io.InputStream;
    6. import java.util.List;
    7. import java.util.Objects;
    8. public abstract class StatementUtils {
    9. public static void find(String statement, Object parameter) {
    10. // 读取mybatis配置文件
    11. InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("mybatis-config.xml");
    12. // 根据配置创建SqlSession工厂
    13. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
    14. .build(inputStream);
    15. SqlSession sqlSession = null;
    16. try {
    17. // 创建SqlSession
    18. sqlSession = sqlSessionFactory.openSession();
    19. // 查询用户列表
    20. List userInfoList = sqlSession.selectList(statement, parameter);
    21. for (UserInfo userInfo: userInfoList) {
    22. System.out.println(userInfo);
    23. }
    24. } finally {
    25. // 关闭会话
    26. if(Objects.nonNull(sqlSession)) {
    27. sqlSession.close();
    28. }
    29. }
    30. }
    31. }

    3、UserInfo类

    在cn.horse.demo下新建UserInfo类

    UserInfo类:

    1. package cn.horse.demo;
    2. public class UserInfo {
    3. private Integer id;
    4. private String name;
    5. private Integer age;
    6. @Override
    7. public String toString() {
    8. StringBuilder stringBuilder = new StringBuilder();
    9. stringBuilder.append('{');
    10. stringBuilder.append("id: " + this.id);
    11. stringBuilder.append(", ");
    12. stringBuilder.append("name: " + this.name);
    13. stringBuilder.append(", ");
    14. stringBuilder.append("age: " + this.age);
    15. stringBuilder.append('}');
    16. return stringBuilder.toString();
    17. }
    18. }

    4、UserInfoMapper配置

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

    1. "1.0" encoding="UTF-8" ?>
    2. mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="cn.horse.demo.UserInfoMapper">
    6. <select id="findByAge" resultType="cn.horse.demo.UserInfo">
    7. SELECT
    8. ID,
    9. USERNAME name,
    10. AGE
    11. FROM T_USER
    12. WHERE AGE > #{age}
    13. select>
    14. mapper>

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

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

    5、启动程序

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

    执行的结果如下:

  • 相关阅读:
    【JAVA-Day03】JDK安装与IntelliJ IDEA安装、配置环境变量
    老照片修复神器,如何修复老照片的清晰度?
    电池故障估计:Realistic fault detection of li-ion battery via dynamical deep learning
    寻找链表相交结点问题
    BUU-pwn(四)
    PTA JAVA02 基础语法1
    springboot生成PDF,并且添加水印
    壳聚糖-聚乙二醇-生物素|生物素-PEG-壳聚糖|Chitosan-PEG-Biotin
    Springboot毕设项目体育器材及场地管理系统60g3njava+VUE+Mybatis+Maven+Mysql+sprnig)
    [学习笔记]Python for Data Analysis, 3E-1.序言
  • 原文地址:https://blog.csdn.net/m1729339749/article/details/133266537