欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解MyBatis XML配置解析

 更新時(shí)間:2020年09月22日 09:33:21   作者:Baret H ~  
這篇文章主要介紹了詳解MyBatis XML配置解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

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>

image-20200727185227378

注意:接下來(lái)所有的配置,都要按照上圖的順序進(jìn)行配置,否則會(huì)出錯(cuò)

1. 環(huán)境配置(environments)

MyBatis 可以配置成適應(yīng)多種環(huán)境,但每個(gè) SqlSessionFactory 實(shí)例只能選擇一種環(huán)境。

environments 元素定義了如何配置環(huán)境。

其中可以嵌套多個(gè)環(huán)境

<environments default="development">
 
<!--環(huán)境1-->
 <environment id="development">
	<!--事務(wù)管理器-->
 <transactionManager type="JDBC">
  <property name="..." value="..."/>
 </transactionManager>
	<!--數(shù)據(jù)源-->
 <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é)點(diǎn):environment

環(huán)境 ID:每個(gè)環(huán)境都有對(duì)應(yīng)的一個(gè)環(huán)境ID

  • 默認(rèn)環(huán)境ID(比如:default=“development”)
  • 環(huán)境可以隨意命名,但務(wù)必保證默認(rèn)的環(huán)境 ID 要匹配其中一個(gè)環(huán)境 ID。

事務(wù)管理器(transactionManager)

  • 在 MyBatis 中有兩種類(lèi)型的事務(wù)管理器:JDBC/MANAGED
  • 默認(rèn)為 JDBC

數(shù)據(jù)源(dataSource)

  • dataSource 元素使用標(biāo)準(zhǔn)的 JDBC 數(shù)據(jù)源接口來(lái)配置 JDBC 連接對(duì)象的資源。
  • 數(shù)據(jù)源是必須配置的。
  • 有三種內(nèi)建的數(shù)據(jù)源類(lèi)型 UNPOOLED/POOLED/JNDI
    • unpooled:這個(gè)數(shù)據(jù)源的實(shí)現(xiàn)只是每次被請(qǐng)求時(shí)打開(kāi)和關(guān)閉連接。
    • pooled(默認(rèn)):這種數(shù)據(jù)源的實(shí)現(xiàn)利用“池”的概念將 JDBC 連接對(duì)象組織起來(lái) , 這是一種使得并發(fā) Web 應(yīng)用快速響應(yīng)請(qǐng)求的流行處理方式。
    • jndi:這個(gè)數(shù)據(jù)源的實(shí)現(xiàn)是為了能在如 Spring 或應(yīng)用服務(wù)器這類(lèi)容器中使用,容器可以集中或在外部配置數(shù)據(jù)源,然后放置一個(gè) JNDI 上下文的

數(shù)據(jù)源也有很多第三方的實(shí)現(xiàn):dbcp、c3p0、druid等等…

2. 屬性(properties)

我們利用Properties屬性來(lái)實(shí)現(xiàn)應(yīng)用配置文件

這些屬性可以在外部進(jìn)行配置,并可以進(jìn)行動(dòng)態(tài)替換。

方式一:直接在Mybatis核心配置文件中配置這些屬性(我們先前的方法)

image-20200727183807575

方式二:在 properties 元素的子元素中設(shè)置

編寫(xiě) 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">
    <!--這里就不用配置屬性了,默認(rèn)即可-->
    <property name="driver" value="${driver}"/>
    <property name="url" value="${url}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
   </dataSource>
  </environment>
 </environments>
</configuration>

引入外部文件的同時(shí),也可以在其中增加一些屬性配置

優(yōu)先級(jí)問(wèn)題:首先讀取在 properties 元素體內(nèi)指定的屬性

<properties resource="config.properties">
 <property name="username" value="root"/>
 <property name="password" value="200024"/>
</properties>

比如config.properties中的數(shù)據(jù)庫(kù)連接密碼正確,但是properties 元素體內(nèi)的密碼不正確,則會(huì)報(bào)錯(cuò),因?yàn)閮?yōu)先讀取properties 元素體內(nèi)指定的屬性

3. 類(lèi)型別名(typeAliases)

注意位置順序

方式一:通過(guò)typeAlias起別名

  • 類(lèi)型別名可為 Java 類(lèi)型設(shè)置一個(gè)縮寫(xiě)名字。
  • 它僅用于 XML 配置,意在降低冗余的全限定類(lèi)名書(shū)寫(xiě)
<typeAliases>
 <typeAlias type="pojo.User" alias="User"/>
</typeAliases>

type的值為指定Java類(lèi)名,alias為新起的別名

方式二:通過(guò)package起別名

也可以指定一個(gè)包名,MyBatis 會(huì)在包名下面搜索對(duì)應(yīng)的實(shí)體類(lèi)

image-20200727185339263

<typeAliases>
 <package name="pojo"/>
</typeAliases>

每一個(gè)在包 pojo 中的 實(shí)體類(lèi),在沒(méi)有注解的情況下,會(huì)使用 實(shí)體類(lèi) 的首字母小寫(xiě)的非限定類(lèi)名來(lái)作為它的別名。 比如 pojo.User 的別名為 user;若有注解,則別名為其注解值。

@Alias("hello")
public class User {
 ... 
}

此時(shí),別名為hello

image-20200723183237742 

建議

  • 在實(shí)體類(lèi)較少的時(shí)候,使用第一種方式
  • 在實(shí)體類(lèi)較多的時(shí)候,使用第二種方式

下面是一些為常見(jiàn)的 Java 類(lèi)型內(nèi)建的類(lèi)型別名。它們都是不區(qū)分大小寫(xiě)的,注意,為了應(yīng)對(duì)原始類(lèi)型的命名重復(fù),采取了特殊的命名風(fēng)格。

別名 映射的類(lèi)型
_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. 設(shè)置(settings)

這是 MyBatis 中極為重要的調(diào)整設(shè)置,它們會(huì)改變 MyBatis 的運(yùn)行時(shí)行為

設(shè)置(settings)查看幫助文檔https://mybatis.org/mybatis-3/zh/index.html

  • 懶加載
  • 日志實(shí)現(xiàn)
  • 緩存開(kāi)啟關(guān)閉

最常用日志

4.1、日志工廠

如果一個(gè)數(shù)據(jù)庫(kù)操作出現(xiàn)了異常,我們需要排錯(cuò),日志是最好的助手!

image-20200725210421111

logImpl

  • SLF4J
  • LOG4J
  • LOG4J2
  • JDK_LOGGING
  • COMMONS_LOGGING
  • STDOUT_LOGGING
  • NO_LOGGING

在MyBatis核心配置文件中配置我們的日志

注意大小寫(xiě)問(wèn)題!??!不要寫(xiě)錯(cuò)??!

注意位置順序問(wèn)題

<settings>
 <!--標(biāo)準(zhǔn)日志工廠實(shí)現(xiàn)-->
 <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

然后運(yùn)行我們的測(cè)試類(lèi),發(fā)現(xiàn)多了很多內(nèi)容,這就是我們的日志

image-20200725210826642

4.2、LOG4J

什么是LOG4J?

Log4j是Apache的一個(gè)開(kāi)源項(xiàng)目,通過(guò)使用Log4j,我們可以控制日志信息輸送的目的地是控制臺(tái)、文件、GUI組件,甚至是套接口服務(wù)器、NT的事件記錄器、UNIX Syslog守護(hù)進(jìn)程等我們也可以控制每一條日志的輸出格式通過(guò)定義每一條日志信息的級(jí)別,我們能夠更加細(xì)致地控制日志的生成過(guò)程可以通過(guò)一個(gè)配置文件來(lái)靈活地進(jìn)行配置,而不需要修改應(yīng)用的代碼

使用步驟

導(dǎo)包

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
 <groupId>log4j</groupId>
 <artifactId>log4j</artifactId>
 <version>1.2.17</version>
</dependency>

配置log4j.properties

#將等級(jí)為DEBUG的日志信息輸出到console和file這兩個(gè)目的地,console和file的定義在下面的代碼
log4j.rootLogger=DEBUG,console,file

#控制臺(tái)輸出的相關(guān)設(shè)置
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

#文件輸出的相關(guān)設(shè)置
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

#日志輸出級(jí)別
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>

測(cè)試

image-20200725214345178

同時(shí)在當(dāng)前項(xiàng)目目錄下生成了zsr.log文件,這里面保存了我們的日志信息

這就是我們?cè)?strong>log4j.properties進(jìn)行的設(shè)置,我們同樣可以設(shè)置其他的內(nèi)容

image-20200727190136249

IDEA可能出現(xiàn)打不開(kāi)的情況,我們將其換成.txt格式就可以打開(kāi)了

image-20200726114330721

image-20200726112101132

簡(jiǎn)要使用

要在使用LOG4J的類(lèi)中,導(dǎo)入包 org.apache.log4j.Logger

日志對(duì)象,參數(shù)為當(dāng)前類(lèi)的class

static Logger logger = Logger.getLogger(UserMapperTest.class);

image-20200725225401808

編寫(xiě)測(cè)試方法,三種常見(jiàn)日志級(jí)別

@Test
public void testLog4j() {
 logger.info("info:進(jìn)入了testLog4j方法");
 logger.debug("debug:進(jìn)入了testLog4j方法");
 logger.error("error:進(jìn)入了testLog4j方法");
}

運(yùn)行該方法

image-20200726110907869

5. 映射器(mappers)

mappers

映射器 : 定義映射SQL語(yǔ)句文件

告訴 MyBatis 到哪里去找映射文件

  • 使用相對(duì)于類(lèi)路徑的資源引用
  • 使用完全限定資源定位符(包括 file:/// 的 URL)
  • 使用類(lèi)名和包名等。

方式一:使用相對(duì)于類(lèi)路徑的資源引用注冊(cè)綁定(推薦)

<mappers>
 <mapper resource="mapper/UserMapping.xml"/>
</mappers>

方式二:使用映射器接口實(shí)現(xiàn)類(lèi)的完全限定類(lèi)名注冊(cè)綁定

<mappers>
 <mapper class="mapper.UserMapper"/>
</mappers>

常見(jiàn)問(wèn)題:

image-20200723213342342

注意點(diǎn):

  • 接口和他的Mapper配置文件必須同名
  • 接口和他的Mapper配置文件必須在同一個(gè)包下

我的問(wèn)題:Mapper接口和Mapper配置文件沒(méi)有同名??!

image-20200723213853166

修改后:

image-20200723214035665 

方式三: 將包內(nèi)的映射器接口實(shí)現(xiàn)全部注冊(cè)為映射器

<mappers>
 <package name="mapper"/>
</mappers>

注意點(diǎn)同方式二:

  • 接口和他的Mapper配置文件必須同名
  • 接口和他的Mapper配置文件必須在同一個(gè)包下

 6. 其他配置

了解~

typeHandlers(類(lèi)型處理器)

  • 無(wú)論是 MyBatis 在預(yù)處理語(yǔ)句(PreparedStatement)中設(shè)置一個(gè)參數(shù)時(shí),還是從結(jié)果集中取出一個(gè)值時(shí), 都會(huì)用類(lèi)型處理器將獲取的值以合適的方式轉(zhuǎn)換成 Java 類(lèi)型。
  • 你可以重寫(xiě)類(lèi)型處理器或創(chuàng)建你自己的類(lèi)型處理器來(lái)處理不支持的或非標(biāo)準(zhǔn)的類(lèi)型?!玖私饧纯伞?/li>

objectFactory(對(duì)象工廠)

  •  MyBatis 每次創(chuàng)建結(jié)果對(duì)象的新實(shí)例時(shí),它都會(huì)使用一個(gè)對(duì)象工廠(ObjectFactory)實(shí)例來(lái)完成。
  • 默認(rèn)的對(duì)象工廠需要做的僅僅是實(shí)例化目標(biāo)類(lèi),要么通過(guò)默認(rèn)構(gòu)造方法,要么在參數(shù)映射存在的時(shí)候通過(guò)有參構(gòu)造方法來(lái)實(shí)例化。
  • 如果想覆蓋對(duì)象工廠的默認(rèn)行為,則可以通過(guò)創(chuàng)建自己的對(duì)象工廠來(lái)實(shí)現(xiàn)。【了解即可】

plugins(插件)

三個(gè)常用插件:

到此這篇關(guān)于詳解MyBatis XML配置解析的文章就介紹到這了,更多相關(guān)MyBatis XML配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論