1. 程式人生 > 其它 >ResultMap和日誌Log

ResultMap和日誌Log

5、解決屬性名和欄位名不一致的問題。ResultMap

1、問題

資料中的欄位:

新建一個專案,拷貝之前的,測試實體類欄位不一致的情況

public class User{
  private int id;
  private String name;
  private String password;
}

結果的情況如下,即屬性名和欄位名不一致,則其檢索結果為null:

select * from mybatis.user where id = #{id}
select id,name,pwd from mybatis.user where id = #{id}

解決方法:

  • 起別名

        <select id="getUserList" resultType="User">
            select id,name,pwd as password from user
        </select>
    

2、resultMap

結果集對映

id name   pwd
id name   password
    <resultMap id="UserMap" type="User">
        <result column="name" property="name"/>
        <result column="id" property="id"/>
        <result column="pwd" property="password"/>
    </resultMap>

    <!--select查詢語句-->
    <select id="getUserList" resultMap="UserMap">
        select * from user
    </select>
  • resultMap元素是Mybatis中最強大的元素
  • ResultMap的 設計思想是,對於簡單的語句根本不需要配置顯式的結果對映,而對於複雜一點的語句,只需要描述它們的關係就行了。
  • ResultMap最優秀的地方在於,雖然你已經對它相當瞭解了,但是根本就不需要顯式地用到他們。
  • 如果世界總是這麼簡單就好了。

Collection association id discriminator constructor

6、日誌

6.1、日誌工廠

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

曾經:sout、debug

現在:日誌工廠!

  • SLF4J
  • LOG4J 【掌握】
  • LOG4J2
  • JDK_LOGGING
  • COMMONS_LOGGING
  • STDOUT_LOGGING 【掌握】
  • NO_LOGGING

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

STDOUT_LOGGING

    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

6.2、LOG4J

什麼是log4j?

  • Log4j是Apache的一個開源專案,通過使用Log4j,我們可以控制日誌資訊輸送的目的地是控制檯、檔案、GUI元件,甚至是套介面伺服器、NT的事件記錄器、UNIX Syslog守護程序等;
  • 我們也可以控制每一條日誌的輸出格式;
  • 通過定義每一條日誌資訊的級別,我們能夠更加細緻地控制日誌的生成過程。
  • 最令人感興趣的就是,這些可以通過一個配置檔案來靈活地進行配置,而不需要修改應用的程式碼。
  1. 先匯入log4j的包

            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.17</version>
            </dependency>
    
  2. 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
    
  3. 配置log4j為日誌的實現

        <settings>
            <!--        <setting name="logImpl" value="STDOUT_LOGGING"/>-->
            <setting name="logImpl" value="LOG4J"/>
    
  4. log4j的使用!直接測試允許剛才的查詢

簡單使用

  1. 在要使用log4j的類中匯入正確的包

  2. 日誌物件,引數為當前類的class

        static Logger logger = Logger.getLogger(TestUserMapper.class);
    
  3. 日誌級別

            logger.info("info:進入了testLog4j");
            logger.error("error:進入了testLog4j");
            logger.debug("debug:進入了testLog4j");