詳解MyBatis XML配置解析
MyBatis核心配置文件
<?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="development"> <environment id="development"> <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> <mappers> <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration>
注意
:接下來所有的配置,都要按照上圖的順序進行配置,否則會出錯
1. 環(huán)境配置(environments)
MyBatis 可以配置成適應多種環(huán)境,但每個 SqlSessionFactory 實例只能選擇一種環(huán)境。
environments 元素定義了如何配置環(huán)境。
其中可以嵌套多個環(huán)境
<environments default="development"> <!--環(huán)境1--> <environment id="development"> <!--事務管理器--> <transactionManager type="JDBC"> <property name="..." value="..."/> </transactionManager> <!--數據源--> <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> <!--環(huán)境2--> <environment> ... </environment> <!--環(huán)境3--> <environment> ... </environment> </environments>
子元素節(jié)點:environment
環(huán)境 ID:每個環(huán)境都有對應的一個環(huán)境ID
- 默認環(huán)境ID(比如:default=“development”)
- 環(huán)境可以隨意命名,但務必保證默認的環(huán)境 ID 要匹配其中一個環(huán)境 ID。
事務管理器(transactionManager)
- 在 MyBatis 中有兩種類型的事務管理器:JDBC/MANAGED
- 默認為 JDBC
數據源(dataSource)
- dataSource 元素使用標準的 JDBC 數據源接口來配置 JDBC 連接對象的資源。
- 數據源是必須配置的。
- 有三種內建的數據源類型 UNPOOLED/POOLED/JNDI
- unpooled:這個數據源的實現只是每次被請求時打開和關閉連接。
- pooled(默認):這種數據源的實現利用“池”的概念將 JDBC 連接對象組織起來 , 這是一種使得并發(fā) Web 應用快速響應請求的流行處理方式。
- jndi:這個數據源的實現是為了能在如 Spring 或應用服務器這類容器中使用,容器可以集中或在外部配置數據源,然后放置一個 JNDI 上下文的
數據源也有很多第三方的實現:dbcp、c3p0、druid等等…
2. 屬性(properties)
我們利用Properties屬性來實現應用配置文件
這些屬性可以在外部進行配置,并可以進行動態(tài)替換。
方式一:直接在Mybatis核心配置文件中配置這些屬性(我們先前的方法)
方式二:在 properties 元素的子元素中設置
編寫 config.properties
driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?useSSH=true&useUnicode=true&characterEncoding=UTF-8 username=root password=200024
在核心配置文件中引入
<?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> <!--外部引入配置文件--> <properties resource="config.properties"/> <environments default="development"> <environment id="development"> <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> </configuration>
引入外部文件的同時,也可以在其中增加一些屬性配置
優(yōu)先級問題:首先讀取在 properties 元素體內指定的屬性
<properties resource="config.properties"> <property name="username" value="root"/> <property name="password" value="200024"/> </properties>
比如config.properties中的數據庫連接密碼正確,但是properties 元素體內的密碼不正確,則會報錯,因為優(yōu)先讀取properties 元素體內指定的屬性
3. 類型別名(typeAliases)
注意位置順序
方式一:通過typeAlias起別名
- 類型別名可為 Java 類型設置一個縮寫名字。
- 它僅用于 XML 配置,意在降低冗余的全限定類名書寫
<typeAliases> <typeAlias type="pojo.User" alias="User"/> </typeAliases>
type
的值為指定Java類名,alias
為新起的別名
方式二:通過package起別名
也可以指定一個包名,MyBatis 會在包名下面搜索對應的實體類
<typeAliases> <package name="pojo"/> </typeAliases>
每一個在包 pojo
中的 實體類,在沒有注解的情況下,會使用 實體類 的首字母小寫的非限定類名來作為它的別名。 比如 pojo.User
的別名為 user
;若有注解,則別名為其注解值。
@Alias("hello") public class User { ... }
此時,別名為hello
建議
- 在實體類較少的時候,使用第一種方式
- 在實體類較多的時候,使用第二種方式
下面是一些為常見的 Java 類型內建的類型別名。它們都是不區(qū)分大小寫的,注意,為了應對原始類型的命名重復,采取了特殊的命名風格。
別名 | 映射的類型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | String |
byte | Byte |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
date | Date |
decimal | BigDecimal |
bigdecimal | BigDecimal |
object | Object |
map | Map |
hashmap | HashMap |
list | List |
arraylist | ArrayList |
collection | Collection |
iterator | Iterator |
4. 設置(settings)
這是 MyBatis 中極為重要的調整設置,它們會改變 MyBatis 的運行時行為
設置(settings)查看幫助文檔https://mybatis.org/mybatis-3/zh/index.html
- 懶加載
- 日志實現
- 緩存開啟關閉
最常用
:日志
4.1、日志工廠
如果一個數據庫操作出現了異常,我們需要排錯,日志是最好的助手!
logImpl
- SLF4J
- LOG4J
- LOG4J2
- JDK_LOGGING
- COMMONS_LOGGING
- STDOUT_LOGGING
- NO_LOGGING
在MyBatis核心配置文件中配置我們的日志
注意大小寫問題?。?!不要寫錯??!
注意位置順序問題
<settings> <!--標準日志工廠實現--> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings>
然后運行我們的測試類,發(fā)現多了很多內容,這就是我們的日志
4.2、LOG4J
什么是LOG4J?
Log4j是Apache的一個開源項目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制臺、文件、GUI組件,甚至是套接口服務器、NT的事件記錄器、UNIX Syslog守護進程等我們也可以控制每一條日志的輸出格式通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程可以通過一個配置文件來靈活地進行配置,而不需要修改應用的代碼
使用步驟:
導包
<!-- https://mvnrepository.com/artifact/log4j/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/zsr.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
在MyBatis核心配置文件中配置我們LOG4J
<settings> <setting name="logImpl" value="LOG4J"/> </settings>
測試
同時在當前項目目錄下生成了zsr.log文件,這里面保存了我們的日志信息
這就是我們在log4j.properties進行的設置,我們同樣可以設置其他的內容
IDEA可能出現打不開的情況,我們將其換成.txt格式就可以打開了
簡要使用
要在使用LOG4J的類中,導入包 org.apache.log4j.Logger
日志對象,參數為當前類的class
static Logger logger = Logger.getLogger(UserMapperTest.class);
編寫測試方法,三種常見日志級別
@Test public void testLog4j() { logger.info("info:進入了testLog4j方法"); logger.debug("debug:進入了testLog4j方法"); logger.error("error:進入了testLog4j方法"); }
運行該方法
5. 映射器(mappers)
mappers
映射器 : 定義映射SQL語句文件
告訴 MyBatis 到哪里去找映射文件
- 使用相對于類路徑的資源引用
- 使用完全限定資源定位符(包括
file:///
的 URL) - 使用類名和包名等。
方式一:使用相對于類路徑的資源引用注冊綁定(推薦)
<mappers> <mapper resource="mapper/UserMapping.xml"/> </mappers>
方式二:使用映射器接口實現類的完全限定類名注冊綁定
<mappers> <mapper class="mapper.UserMapper"/> </mappers>
常見問題:
注意點:
- 接口和他的Mapper配置文件必須同名
- 接口和他的Mapper配置文件必須在同一個包下
我的問題:Mapper接口和Mapper配置文件沒有同名?。?/p>
修改后:
方式三: 將包內的映射器接口實現全部注冊為映射器
<mappers> <package name="mapper"/> </mappers>
注意點同方式二:
- 接口和他的Mapper配置文件必須同名
- 接口和他的Mapper配置文件必須在同一個包下
6. 其他配置
了解~
typeHandlers(類型處理器)
- 無論是 MyBatis 在預處理語句(PreparedStatement)中設置一個參數時,還是從結果集中取出一個值時, 都會用類型處理器將獲取的值以合適的方式轉換成 Java 類型。
- 你可以重寫類型處理器或創(chuàng)建你自己的類型處理器來處理不支持的或非標準的類型?!玖私饧纯伞?/li>
objectFactory(對象工廠)
- MyBatis 每次創(chuàng)建結果對象的新實例時,它都會使用一個對象工廠(ObjectFactory)實例來完成。
- 默認的對象工廠需要做的僅僅是實例化目標類,要么通過默認構造方法,要么在參數映射存在的時候通過有參構造方法來實例化。
- 如果想覆蓋對象工廠的默認行為,則可以通過創(chuàng)建自己的對象工廠來實現?!玖私饧纯伞?/li>
plugins(插件)
三個常用插件:
- mybatis-generator-core
- mybatis-plus
- 通用mapper
到此這篇關于詳解MyBatis XML配置解析的文章就介紹到這了,更多相關MyBatis XML配置內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
淺談Spring框架中@Autowired和@Resource的區(qū)別
最近review別人代碼的時候,看到了一些@Autowired不一樣的用法,覺得有些意思,下面這篇文章主要給大家介紹了關于Spring框架中@Autowired和@Resource區(qū)別的相關資料,需要的朋友可以參考下2022-10-10