MyBatis——XML配置解析
目錄
- 1. 環境配置(environments)
- 2. 屬性(properties)
- 3. 類型別名(typeAliases)
- 方式一:通過typeAlias起別名
- 方式二:通過package起別名
- 建議
- 4. 設置(settings)
- 4.1、日志工廠
- 4.2、LOG4J
- 5. 映射器(mappers)
- 方式一:使用相對于類路徑的資源引用注冊綁定(推薦)
- 方式二:使用映射器接口實現類的完全限定類名注冊綁定
- 方式三: 將包內的映射器接口實現全部注冊為映射器
- 6. 其他配置
- MyBatis核心配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//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. 環境配置(environments)
MyBatis 可以配置成適應多種環境,但每個 SqlSessionFactory 實例只能選擇一種環境。
environments 元素定義了如何配置環境。
其中可以嵌套多個環境
<environments default="development"><!--環境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><!--環境2--><environment>...</environment><!--環境3--><environment>...</environment></environments>
子元素節點:environment
- 環境 ID:每個環境都有對應的一個環境ID
- 默認環境ID(比如:default=“development”)
- 環境可以隨意命名,但務必保證默認的環境 ID 要匹配其中一個環境 ID。
- 事務管理器(transactionManager)
- 在 MyBatis 中有兩種類型的事務管理器:
JDBC/MANAGED - 默認為
JDBC
- 在 MyBatis 中有兩種類型的事務管理器:
- 數據源(dataSource)
- dataSource 元素使用標準的 JDBC 數據源接口來配置 JDBC 連接對象的資源。
- 數據源是必須配置的。
- 有三種內建的數據源類型
UNPOOLED/POOLED/JNDI- unpooled:這個數據源的實現只是每次被請求時打開和關閉連接。
- pooled(默認):這種數據源的實現利用“池”的概念將 JDBC 連接對象組織起來 , 這是一種使得并發 Web 應用快速響應請求的流行處理方式。
- jndi:這個數據源的實現是為了能在如 Spring 或應用服務器這類容器中使用,容器可以集中或在外部配置數據源,然后放置一個 JNDI 上下文的
- 數據源也有很多第三方的實現:
dbcp、c3p0、druid等等…
2. 屬性(properties)
我們利用Properties屬性來實現應用配置文件
這些屬性可以在外部進行配置,并可以進行動態替換。
-
方式一:直接在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 configurationPUBLIC "-//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>
-
引入外部文件的同時,也可以在其中增加一些屬性配置
-
優先級問題:首先讀取在 properties 元素體內指定的屬性
<properties resource="config.properties"><property name="username" value="root"/><property name="password" value="200024"/> </properties>比如config.properties中的數據庫連接密碼正確,但是properties 元素體內的密碼不正確,則會報錯,因為優先讀取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 類型內建的類型別名。它們都是不區分大小寫的,注意,為了應對原始類型的命名重復,采取了特殊的命名風格。
| 別名 | 映射的類型 |
|---|---|
| _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>
然后運行我們的測試類,發現多了很多內容,這就是我們的日志
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配置文件沒有同名!!
修改后:
方式三: 將包內的映射器接口實現全部注冊為映射器
<mappers><package name="mapper"/>
</mappers>
注意點同方式二:
- 接口和他的Mapper配置文件必須同名
- 接口和他的Mapper配置文件必須在同一個包下
6. 其他配置
了解~
- typeHandlers(類型處理器)
- 無論是 MyBatis 在預處理語句(PreparedStatement)中設置一個參數時,還是從結果集中取出一個值時, 都會用類型處理器將獲取的值以合適的方式轉換成 Java 類型。
- 你可以重寫類型處理器或創建你自己的類型處理器來處理不支持的或非標準的類型。【了解即可】
- objectFactory(對象工廠)
- MyBatis 每次創建結果對象的新實例時,它都會使用一個對象工廠(ObjectFactory)實例來完成。
- 默認的對象工廠需要做的僅僅是實例化目標類,要么通過默認構造方法,要么在參數映射存在的時候通過有參構造方法來實例化。
- 如果想覆蓋對象工廠的默認行為,則可以通過創建自己的對象工廠來實現。【了解即可】
- plugins(插件)
- 三個常用插件:
- mybatis-generator-core
- mybatis-plus
- 通用mapper
- 三個常用插件:
總結
以上是生活随笔為你收集整理的MyBatis——XML配置解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MyBatis常规CURD详解及拓展~
- 下一篇: MyBatis 一对多、多对一的处理~