Mybatis快速入門與日誌工廠Log4J

1、日誌

1.1、日誌工廠

如果一個數據庫操作,出現了異常,我們需要排錯,日誌就是最好的助手!

曾經:sout,debug

現在:日誌工廠

mybatis內置的設置

logImpl	
指定 MyBatis 所用日誌的具體實現,未指定時將自動查找。	
SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING	
  • LOG4J 掌握
  • COMMONS_LOGGING 掌握

在Mybatis中具體使用哪一個日誌實現,在設置中設置!

STDOUT_LOGGING,標準日誌輸出

在confiuration,typeAliases中間添加settings標籤,一定要注意位置

<!--核心配置文件-->
<configuration>
    <!--引入外部的配置文件-->
    <properties resource="db.properties"></properties>

    <!--設置-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <!--實體類起別名-->
    <typeAliases>
        <typeAlias type="com.zjx.pojo.User" alias="User"/>
    </typeAliases>
    <!--環境 可以配置多套-->
    <environments default="development">
        <environment id="development">
            <!--事務管理 默認JDBC-->
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--引入外部配置文件以後就可以直接取來用-->
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--配置mapper-->
    <mappers>
        <mapper resource="com/zjx/dao/UserMapper.xml"/>
    </mappers>
</configuration>

測試

<mapper namespace="com.zjx.dao.UserMapper">
    <!--查詢語句-->
    <!--id對應接口的名字 等於原來Impl的實現類中的重寫的方法-->
    <!--resultType相當於原本實現類方法中的返回值-->
    <select id="getUserList" resultType="User">
        select * from smybatis.`user`
    </select>
</mapper>
@Test
public void getUserList(){
    SqlSession sqlSession = null;
    try {
        //獲得SqlSession對象
        sqlSession = MybatisUtils.getSqlSession();
        //執行sql
        //方式一 getMapper
        UserMapper userDao = sqlSession.getMapper(UserMapper.class);
        List<User> userList = userDao.getUserList();//執行接口裏面的方法
        for (User user : userList) {
            System.out.println(user);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        sqlSession.close();
    }
}

輸出結果

Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
Opening JDBC Connection      打開JDBC連接
Created connection 81009902. 創建Connection
Setting autocommit to false on JDBC Connection   關閉自動提交事務 [com.mysql.jdbc.JDBC4Connection@4d41cee]
==>  Preparing: select * from smybatis.`user`    SQL
==> Parameters:   參數
<==    Columns: id, name, pwd  查詢的列
<==        Row: 1, 狂神, 123456  查詢的記錄
<==        Row: 2, 張三, 123456  查詢的記錄
<==        Row: 3, 李四, 123890  查詢的記錄
<==        Row: 4, 李五, 123123  查詢的記錄
<==      Total: 4   總記錄數
User{id=1, name='狂神', pwd='123456'}
User{id=2, name='張三', pwd='123456'}
User{id=3, name='李四', pwd='123890'}
User{id=4, name='李五', pwd='123123'}
Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@4d41cee]     開啓自動提交
Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@4d41cee]
Returned connection 81009902 to pool.  把Connection返回池子

1.2、LOG4J

什麼是LOG4J?

  • LOG4J是Apache的一個開源項目,通過LOG4J,我們可以控制日誌信息輸送的目的地是控制檯,文件,GUI組件。

  • 我們也可以控制每一條日誌的輸出格式

  • 通過定義每一條日誌信息的級別,我們能夠更加細緻地控制日誌的生成過程

  • 我們可以通過一個配置文件來靈活配置,不需要修改引用的代碼

  1. 先導入log4j的包
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
  1. 在resources下創建一個log4j.properties文件
#將等級爲DEBUG的日誌信息輸出到console和file這兩個目的地,console和file的定義在下面的代碼
log4j.rootLogger=DEBUG,console,file

#控制檯輸出的相關設置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n

#文件輸出的相關設置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/kuang.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n

#日誌輸出級別
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
  1. 配置log4j爲mybatis日誌的實現
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
  1. Log4J的使用

測試輸出查詢

[org.apache.ibatis.logging.LogFactory]-Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
[org.apache.ibatis.logging.LogFactory]-Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
[org.apache.ibatis.datasource.pooled.PooledDataSource]-PooledDataSource forcefully closed/removed all connections.
[org.apache.ibatis.datasource.pooled.PooledDataSource]-PooledDataSource forcefully closed/removed all connections.
[org.apache.ibatis.datasource.pooled.PooledDataSource]-PooledDataSource forcefully closed/removed all connections.
[org.apache.ibatis.datasource.pooled.PooledDataSource]-PooledDataSource forcefully closed/removed all connections.
[org.apache.ibatis.transaction.jdbc.JdbcTransaction]-Opening JDBC Connection
[org.apache.ibatis.datasource.pooled.PooledDataSource]-Created connection 1957502751.
[org.apache.ibatis.transaction.jdbc.JdbcTransaction]-Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@74ad1f1f]
[com.zjx.dao.UserMapper.getUserList]-==>  Preparing: select * from smybatis.`user` 
[com.zjx.dao.UserMapper.getUserList]-==> Parameters: 
[com.zjx.dao.UserMapper.getUserList]-<==      Total: 4
User{id=1, name='狂神', pwd='123456'}
User{id=2, name='張三', pwd='123456'}
User{id=3, name='李四', pwd='123890'}
User{id=4, name='李五', pwd='123123'}
[org.apache.ibatis.transaction.jdbc.JdbcTransaction]-Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@74ad1f1f]
[org.apache.ibatis.transaction.jdbc.JdbcTransaction]-Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@74ad1f1f]
[org.apache.ibatis.datasource.pooled.PooledDataSource]-Returned connection 1957502751 to pool.

簡單實用

  1. 在要使用Log4j的類中,導入包,並創建一個全局的靜態變量
    • 注意不要導錯包 看好了
//import org.apache.log4j.Logger;
//getLogger(要在哪個類中使用就寫哪一個類);
static Logger logger = Logger.getLogger(UserDaoTest.class);
  1. 測試
@Test
public void testlog4j(){
    //不同級別
    //普通級別
    logger.info("info:進入了testlog4j方法");
    //debug級別
    logger.debug("debug:進入了進入了testlog4j方法");
    //錯誤級別
    logger.error("error:進入了進入了testlog4j方法");
}
[com.zjx.dao.UserDaoTest]-info:進入了testlog4j方法
[com.zjx.dao.UserDaoTest]-debug:進入了進入了testlog4j方法
[com.zjx.dao.UserDaoTest]-error:進入了進入了testlog4j方法

同時剛剛配置文件中輸出的文件也會有

[INFO][20-04-05][com.zjx.dao.UserDaoTest]info:進入了testlog4j方法
[DEBUG][20-04-05][com.zjx.dao.UserDaoTest]debug:進入了進入了testlog4j方法
[ERROR][20-04-05][com.zjx.dao.UserDaoTest]error:進入了進入了testlog4j方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章