ResultMap和日誌Log
阿新 • • 發佈:2021-10-21
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守護程序等;
- 我們也可以控制每一條日誌的輸出格式;
- 通過定義每一條日誌資訊的級別,我們能夠更加細緻地控制日誌的生成過程。
- 最令人感興趣的就是,這些可以通過一個配置檔案來靈活地進行配置,而不需要修改應用的程式碼。
-
先匯入log4j的包
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
-
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
-
配置log4j為日誌的實現
<settings> <!-- <setting name="logImpl" value="STDOUT_LOGGING"/>--> <setting name="logImpl" value="LOG4J"/>
-
log4j的使用!直接測試允許剛才的查詢
簡單使用
-
在要使用log4j的類中匯入正確的包
-
日誌物件,引數為當前類的class
static Logger logger = Logger.getLogger(TestUserMapper.class);
-
日誌級別
logger.info("info:進入了testLog4j"); logger.error("error:進入了testLog4j"); logger.debug("debug:進入了testLog4j");