[JAVA] Utilisez JUL pour enregistrer le journal d'exécution de SQL émis par MyBatis

introduction

J'ai travaillé sur une chose étonnamment inhabituelle, "Utiliser java.util.logging (ci-après dénommé JUL) pour enregistrer le journal d'exécution de SQL émis par MyBatis ", donc la procédure à ce moment-là Je veux le garder facilement. C'est un article assez long, mais la configuration de logging.properties devrait être la chose la plus importante.

Mise en garde

Cet article a été vérifié pour fonctionner dans les environnements suivants, mais je pense qu'il fonctionnera dans des environnements avec différentes versions et intergiciels.

Préparation (Postgres)

Préparez la table suivante «utilisateurs». La base de données sera dev et l'utilisateur sera dev.

dev=# \d users
              Table "public.users"
 Column | Type | Collation | Nullable | Default
--------+------+-----------+----------+---------
 id     | text |           | not null |
 name   | text |           | not null |
Indexes:
    "users_pkey" PRIMARY KEY, btree (id)

Préparation (projet Java)

Préparez les quatre modules suivants.

  1. mybatis.logging.Main.java: point d'entrée. La méthode principale est définie.
  2. mybatis.logging.repository.UsersRepository.java: ʻusers` Interface du mappeur vers la table.
  3. mybatis-config.xml: informations de connexion à la base de données utilisée par MyBatis.
  4. logging.properties: paramètres JUL.

java:mybatis.logging.Main.java


package mybatis.logging;

import java.io.IOException;
import java.io.UncheckedIOException;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import mybatis.logging.repository.UsersRepository;

public class Main {
    public static void main(String[] args) {
        var builder = new SqlSessionFactoryBuilder();
        try (var in = Resources.getResourceAsStream("mybatis-config.xml")) {
            var factory = builder.build(in);
            try (var session = factory.openSession(true)) {
                var usersRepository = session.getMapper(UsersRepository.class);
                usersRepository.truncate();
                usersRepository.insert("1", "Alice");
                usersRepository.insert("2", "Bob");
            }
        } catch (IOException e) {
            throw new UncheckedIOException(e);
        }
    }
}

java:mybatis.logging.repository.UsersRepository.java


package mybatis.logging.repository;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;

public interface UsersRepository {
    
    @Insert("INSERT INTO users (id, name) VALUES (#{id}, #{name})")
    int insert(@Param("id") String id, @Param("name") String name);
    
    @Delete("DELETE FROM users")
    int truncate();
}

mybatis-config.xml


<?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>
  <environments default="dev">
    <environment id="dev">
      <transactionManager type="JDBC"></transactionManager>
      <dataSource type="POOLED">
        <property name="driver" value="org.postgresql.Driver"/>
        <property name="url" value="jdbc:postgresql://localhost:5432/dev"/>
        <property name="username" value="dev"/>
        <property name="password" value="password"/>
      </dataSource>
    </environment>
  </environments>
  
  <mappers>
    <mapper class="mybatis.logging.repository.UsersRepository" />
  </mappers>
</configuration>

logging.properties


# ROOT LOGGER
handlers = java.util.logging.ConsoleHandler
.level = INFO

# ConsoleHandler Default Setting
java.util.logging.ConsoleHandler.level = ALL
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

# MyBatis LOGGER
mybatis.logging.repository.level = FINE

L'image des informations de placement est présentée ci-dessous (Eclipse). image.png

Courir

Exécutez ensuite Java avec la classe Main = mybatis.logging.Main. À ce stade, spécifiez le fichier de propriétés pour JUL dans l'option VM java.util.logging.config.file ( logging.properties dans l'exemple ci-dessus). Voici un exemple de définition des options de VM avec ʻEclipse`. Veuillez modifier cela en fonction de votre environnement.

image.png

résultat

Il réussit si le journal suivant est sorti sur la sortie standard. Si vous souhaitez conserver le journal dans un fichier, etc., modifiez la spécification du gestionnaire comme il convient.

13 avril, 2019 6:31:41 pm org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl debug
d'habitude: ==>  Preparing: DELETE FROM users 
13 avril, 2019 6:31:41 pm org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl debug
d'habitude: ==> Parameters: 
13 avril, 2019 6:31:41 pm org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl debug
d'habitude: <==    Updates: 2
13 avril, 2019 6:31:41 pm org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl debug
d'habitude: ==>  Preparing: INSERT INTO users (id, name) VALUES (?, ?) 
13 avril, 2019 6:31:41 pm org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl debug
d'habitude: ==> Parameters: 1(String), Alice(String)
13 avril, 2019 6:31:41 pm org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl debug
d'habitude: <==    Updates: 1
13 avril, 2019 6:31:41 pm org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl debug
d'habitude: ==>  Preparing: INSERT INTO users (id, name) VALUES (?, ?) 
13 avril, 2019 6:31:41 pm org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl debug
d'habitude: ==> Parameters: 2(String), Bob(String)
13 avril, 2019 6:31:41 pm org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl debug
d'habitude: <==    Updates: 1

référence

Recommended Posts

Utilisez JUL pour enregistrer le journal d'exécution de SQL émis par MyBatis
[JAVA] [Spring] [MyBatis] Utiliser GROUP BY dans SQL Builder
Comment changer dynamiquement le nom de la colonne acquis par MyBatis
Comment utiliser la méthode link_to
Comment utiliser la méthode include?
Comment utiliser la méthode form_with
Comment utiliser la classe wrapper
Comment utiliser l'annotation MyBatis Mapper