Mybatis-第N篇配置log4j1、log4j2打印執行的sql語句


1、log4j1配置

   目錄結構:

  

   conf.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>

    <settings>
       <!-- 配置用於控制台輸出sql日志。低版本的mybatis不支持logImpl -->
       <setting name="logImpl" value="LOG4J"/>
    </settings>
    
    <environments default="oracle">
        <environment id="oracle">
            <!-- 指定事務管理類型,type="JDBC"指直接使用JDBC的提交與回滾   -->
            <transactionManager type="JDBC" />
            <!-- 配置數據庫連接信息 -->
            <dataSource type="POOLED">
                <property name="driver" value="oracle.jdbc.OracleDriver" />
                <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl" />
                <property name="username" value="scott" />
                <property name="password" value="12345" />
            </dataSource>
        </environment>
        <environment id="mysql">
            <transactionManager type="JDBC" />
            <!-- 配置數據庫連接信息 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/world" />
                <property name="username" value="root" />
                <property name="password" value="12345" />
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <!-- 注冊empMapper.xml文件-->
        <mapper resource="com/lfy/mapping/empMapper.xml"/>
    </mappers>
    
</configuration>

  log4j.properties

#log4j-1 #全局日志配置
log4j.rootLogger=ERROR,stdout
#MyBatis日志配置
log4j.logger.com.lfy.mapping.empMapper=DEBUG
#控制台輸出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p[%c] - %m%n

   empMapper.xml

<?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-->
<mapper namespace="com.lfy.mapping.empMapper">
    <select id="getEmp" parameterType="int" resultType="com.lfy.bean.Emp">
        select * from emp where empno=#{empno}
    </select>
</mapper>

   Emp.java

package com.lfy.bean;

import java.util.Date;

public class Emp {

    private Integer empno;
    private String ename;
    private String job;
    private Integer mgr;
    private Date hireDate;
    private Integer sal;
    private Integer comm;
    private Integer deptno;
    
    public Integer getEmpno() {
        return empno;
    }
    public void setEmpno(Integer empno) {
        this.empno = empno;
    }
    public String getEname() {
        return ename;
    }
    public void setEname(String ename) {
        this.ename = ename;
    }
    public String getJob() {
        return job;
    }
    public void setJob(String job) {
        this.job = job;
    }
    public Integer getMgr() {
        return mgr;
    }
    public void setMgr(Integer mgr) {
        this.mgr = mgr;
    }
    public Date getHiredate() {
        return hireDate;
    }
    public void setHiredate(Date hiredate) {
        hireDate = hiredate;
    }
    public Integer getSal() {
        return sal;
    }
    public void setSal(Integer sal) {
        this.sal = sal;
    }
    public Integer getComm() {
        return comm;
    }
    public void setComm(Integer comm) {
        this.comm = comm;
    }
    public Integer getDeptno() {
        return deptno;
    }
    public void setDeptno(Integer deptno) {
        this.deptno = deptno;
    }
    
    @Override
    public String toString() {
        
        return "User=[empno="+empno+
                    ",ename="+ename+
                    ",job="+job+
                    ",mgr="+mgr+
                    ",hiredate="+hireDate+
                    ",sal="+sal+
                    ",comm="+comm+
                    ",deptno="+deptno+"]";     
    }
}

   MybatisTest.java

package com.lfy.main;

import java.io.InputStream;

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

import com.lfy.bean.Emp;

/**
 * 使用log4j-1配置日志
 * @author lfy
 *
 */
public class MybatisTest {

    public static void main(String[] args) {

        //mybatis的配置文件
        String resource = "conf.xml";
        //使用類加載器加載mybatis的配置文件(它也加載關聯的映射文件)
        InputStream is = MybatisTest.class.getClassLoader().getResourceAsStream(resource);
        //構建sqlSession的工廠
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        //使用MyBatis提供的Resources類加載mybatis的配置文件(它也加載關聯的映射文件)
        //Reader reader = Resources.getResourceAsReader(resource); 
        //構建sqlSession的工廠
        //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //創建能執行映射文件中sql的sqlSession
        SqlSession session = sessionFactory.openSession();
        /**
         * 映射sql的標識字符串,
         * com.lfy.mapping.empMapper是empMapper.xml文件中mapper標簽的namespace屬性的值,
         * getEmp是select標簽的id屬性值,通過select標簽的id屬性值就可以找到要執行的SQL
         */
        String statement = "com.lfy.mapping.empMapper.getEmp";//映射sql的標識字符串
        //執行查詢返回一個唯一user對象的sql
        Emp emp = session.selectOne(statement, 7839);
        System.out.println(emp);
    }

}

   運行結果:

 

2、log4j2配置

   目錄結構:

   

  conf.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>

    <settings>
       <!-- 配置用於控制台輸出sql日志。低版本的mybatis不支持logImpl -->
       <setting name="logImpl" value="LOG4J2"/>
    </settings>
    
    <environments default="oracle">
        <environment id="oracle">
            <!-- 指定事務管理類型,type="JDBC"指直接使用JDBC的提交與回滾   -->
            <transactionManager type="JDBC" />
            <!-- 配置數據庫連接信息 -->
            <dataSource type="POOLED">
                <property name="driver" value="oracle.jdbc.OracleDriver" />
                <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl" />
                <property name="username" value="scott" />
                <property name="password" value="12345" />
            </dataSource>
        </environment>
        <environment id="mysql">
            <transactionManager type="JDBC" />
            <!-- 配置數據庫連接信息 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/world" />
                <property name="username" value="root" />
                <property name="password" value="12345" />
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <!-- 注冊empMapper.xml文件-->
        <mapper resource="com/lfy/mapping/empMapper.xml"/>
    </mappers>
    
</configuration>

   log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
    <appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <!--  <File name="File" fileName="../logs/test.log" append="true">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>  -->
    </appenders>

    <loggers>
        <logger name="com.lfy.mapping" level="debug" additivity="false">
            <appender-ref ref="Console"/>
        </logger>
        <!--  <logger name="log4j.logger.java.sql.Statement" level="info" additivity="false">
            <appender-ref ref="File"/>
        </logger>
        <Logger name="com.lfy.mapping" level="debug" additivity="false">
            <AppenderRef ref="File"/>
        </Logger>  -->

        <root level="info">
            <appender-ref ref="Console"/>
            <!--  <appender-ref ref="File"/> -->
        </root>
    </loggers>
</configuration>

  運行結果:

  總結:

    使用log4j1時,需要引入log4j1的包、在conf.xml中添加<setting name="logImpl" value="LOG4J"/>、編寫log4j.properties;

    使用log4j2時,需要引入log4j2的包、在conf.xml中添加<setting name="logImpl" value="LOG4J2"/>、編寫log4j2.xml。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM