最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解MyBatis XML配置解析

 更新時間:2020年09月22日 09:33:21   作者:Baret H ~  
這篇文章主要介紹了詳解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>

image-20200727185227378

注意:接下來所有的配置,都要按照上圖的順序進行配置,否則會出錯

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

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

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

其中可以嵌套多個環(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é)點:environment

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

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

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

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

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

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

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

2. 屬性(properties)

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

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

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

image-20200727183807575

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

編寫 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 元素體內(nèi)指定的屬性

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

比如config.properties中的數(shù)據(jù)庫連接密碼正確,但是properties 元素體內(nèi)的密碼不正確,則會報錯,因為優(yōu)先讀取properties 元素體內(nèi)指定的屬性

3. 類型別名(typeAliases)

注意位置順序

方式一:通過typeAlias起別名

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

type的值為指定Java類名,alias為新起的別名

方式二:通過package起別名

也可以指定一個包名,MyBatis 會在包名下面搜索對應(yīng)的實體類

image-20200727185339263

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

每一個在包 pojo 中的 實體類,在沒有注解的情況下,會使用 實體類 的首字母小寫的非限定類名來作為它的別名。 比如 pojo.User 的別名為 user;若有注解,則別名為其注解值。

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

此時,別名為hello

image-20200723183237742 

建議

  • 在實體類較少的時候,使用第一種方式
  • 在實體類較多的時候,使用第二種方式

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

別名 映射的類型
_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è)置,它們會改變 MyBatis 的運行時行為

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

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

最常用日志

4.1、日志工廠

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

image-20200725210421111

logImpl

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

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

注意大小寫問題?。?!不要寫錯!!

注意位置順序問題

<settings>
 <!--標準日志工廠實現(xiàn)-->
 <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

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

image-20200725210826642

4.2、LOG4J

什么是LOG4J?

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

使用步驟

導包

<!-- 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

#控制臺輸出的相關(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

#日志輸出級別
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>

測試

image-20200725214345178

同時在當前項目目錄下生成了zsr.log文件,這里面保存了我們的日志信息

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

image-20200727190136249

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

image-20200726114330721

image-20200726112101132

簡要使用

要在使用LOG4J的類中,導入包 org.apache.log4j.Logger

日志對象,參數(shù)為當前類的class

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

image-20200725225401808

編寫測試方法,三種常見日志級別

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

運行該方法

image-20200726110907869

5. 映射器(mappers)

mappers

映射器 : 定義映射SQL語句文件

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

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

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

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

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

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

常見問題:

image-20200723213342342

注意點:

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

我的問題:Mapper接口和Mapper配置文件沒有同名?。?/p>

image-20200723213853166

修改后:

image-20200723214035665 

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

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

注意點同方式二:

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

 6. 其他配置

了解~

typeHandlers(類型處理器)

  • 無論是 MyBatis 在預(yù)處理語句(PreparedStatement)中設(shè)置一個參數(shù)時,還是從結(jié)果集中取出一個值時, 都會用類型處理器將獲取的值以合適的方式轉(zhuǎn)換成 Java 類型。
  • 你可以重寫類型處理器或創(chuàng)建你自己的類型處理器來處理不支持的或非標準的類型。【了解即可】

objectFactory(對象工廠)

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

plugins(插件)

三個常用插件:

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

相關(guān)文章

  • Java?Kryo,Protostuff,Hessian序列化方式對比

    Java?Kryo,Protostuff,Hessian序列化方式對比

    這篇文章主要介紹了Java?Kryo,Protostuff,Hessian序列化方式對比,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • Java設(shè)計模式中的原型模式講解

    Java設(shè)計模式中的原型模式講解

    原型模式是用于創(chuàng)建重復(fù)的對象,同時又能保證性能。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式,今天通過本文給大家介紹下Java?原型設(shè)計模式,感興趣的朋友一起看看吧
    2023-04-04
  • 手把手帶你用java搞定漢諾塔

    手把手帶你用java搞定漢諾塔

    這篇文章主要給大家介紹了關(guān)于Java青蛙跳臺階問題的解決思路與代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-08-08
  • Java中對象的序列化方式克隆詳解

    Java中對象的序列化方式克隆詳解

    在學習編程的過程中,我覺得不止要獲得課本的知識,更多的是通過學習技術(shù)知識提高解決問題的能力,這樣我們才能走在最前方。這篇文章主要給大家介紹了Java中對象的序列化方式克隆,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • 一文帶你搞懂Redis分布式鎖

    一文帶你搞懂Redis分布式鎖

    本篇文章主要來介紹一下如何Redis實現(xiàn)分布式鎖的演進過程,以及為什么不能直接用Setnx實現(xiàn)分布式鎖,文中的示例代碼講解詳細,需要的可以參考一下
    2022-09-09
  • JAVA 多線程爬蟲實例詳解

    JAVA 多線程爬蟲實例詳解

    這篇文章主要介紹了JAVA 多線程爬蟲實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 關(guān)于使用Mybatisplus自帶的selectById和insert方法時的一些問題

    關(guān)于使用Mybatisplus自帶的selectById和insert方法時的一些問題

    這篇文章主要介紹了關(guān)于使用Mybatisplus自帶的selectById和insert方法時的一些問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Spring Data JPA使用Sort進行排序(Using Sort)

    Spring Data JPA使用Sort進行排序(Using Sort)

    本篇文章主要介紹了Spring Data JPA使用Sort進行排序(Using Sort),具有一定的參考價值,有興趣的可以了解一下
    2017-07-07
  • 解決java連接zookeeper很慢的問題

    解決java連接zookeeper很慢的問題

    這篇文章主要介紹了解決java連接zookeeper很慢的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java內(nèi)存模型jvm虛擬機簡要分析

    java內(nèi)存模型jvm虛擬機簡要分析

    Java 內(nèi)存模型的主要目的是定義程序中各種變量的訪問規(guī)則, 關(guān)注在虛擬機中把變量值存儲到內(nèi)存和從內(nèi)存中取出變量值這樣的底層細節(jié)
    2021-09-09

最新評論

安吉县| 抚松县| 嘉荫县| 桂阳县| 循化| 集贤县| 兴仁县| 武汉市| 佛山市| 郓城县| 南岸区| 新乡县| 扎鲁特旗| 常熟市| 墨江| 开江县| 衡阳市| 鄂尔多斯市| 海南省| 太康县| 砀山县| 抚顺市| 云阳县| 霸州市| 内乡县| 千阳县| 牙克石市| 嘉定区| 越西县| 特克斯县| 栖霞市| 紫金县| 青河县| 奎屯市| 巨鹿县| 会泽县| 恩平市| 乌兰浩特市| 兴隆县| 三亚市| 阿克陶县|