MyBatis 核心配置文件及映射文件詳解
什么是SSM?

IBatis提供的持久層框架包括SQLMap和Data Access Objects(DAO)
MyBatis特性
1)MyBatis是支持定制化SQL、存儲(chǔ)過(guò)程以及高級(jí)映射的優(yōu)秀的持久層框架
2)MyBatis 避免了幾乎所有的JDBC代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集
3) MyBatis可以使用簡(jiǎn)單的XML或注解用于配置和原始映射,將接口和java的POJO (Plain Old Java Objects,普通的Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄
4)MyBatis是一個(gè)半自動(dòng)的ORM(Object Relation Mapping)框架(將數(shù)據(jù)庫(kù)中的數(shù)據(jù),映射到實(shí)體類對(duì)象,用戶直接操作實(shí)體類對(duì)象即可)
MyBatis和其它持久化技術(shù)對(duì)比
JDBC
1.SQL夾雜在java代碼中耦合度高,導(dǎo)致硬編碼內(nèi)傷
2.維護(hù)不易且實(shí)際開(kāi)發(fā)需求中SQL有變化,頻繁修改的情況多見(jiàn)
3.代碼冗長(zhǎng),開(kāi)發(fā)效率低
Hibernate和JPA
1.操作簡(jiǎn)單,開(kāi)發(fā)效率高
2.程序中的長(zhǎng)難復(fù)雜SQL需要繞過(guò)框架
3.內(nèi)部自動(dòng)生產(chǎn)的SQL,不容易做特殊優(yōu)化
4.基于全映射的全自動(dòng)框架,大量字段的POJO進(jìn)行部分映射比較困難
5.反射操作太多,導(dǎo)致數(shù)據(jù)庫(kù)性能下降
MyBatis
1.輕量級(jí),性能出色
2.SQL和java編碼分開(kāi),功能邊界清晰,java代碼專注業(yè)務(wù)、SQL語(yǔ)句專注數(shù)據(jù)
3.開(kāi)發(fā)效率稍遜于Hibernate,但是完全能夠接受
創(chuàng)建MyBatis的核心配置文件
習(xí)慣上命名為mybatis-config.xml,這個(gè)文件名僅僅是建議,并非強(qiáng)制要求。將來(lái)整合Spring之后,這個(gè)配置文件可以省略,所以大家操作時(shí)可以直接復(fù)制、粘貼
核心配詈文件主要用于配置連接數(shù)據(jù)庫(kù)的環(huán)境以及MyBatis的全同配置信息
核心配置文件存放的位置是srcimain/resources日錄下
<?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>
<!--定義屬性文件
resource:從類路徑下面讀取外部文件
url:從一個(gè)資源定位地址來(lái)讀取配置文件
提供參數(shù)使用: 可以使用 ${參數(shù)名} 進(jìn)行參數(shù)引用
-->
<environments default="default">
<!--環(huán)境變量-->
<environment id="default">
<!--事務(wù)管理器:由JDBC管理事務(wù) -->
<transactionManager type="JDBC"/>
<!--數(shù)據(jù)源配置信息:POOLED 使用連接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="2022"/>
</dataSource>
</environment>
</environments>
<!-- 加載其他的映射文件 -->
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
創(chuàng)建mapper接口
MyBatls中的mapper接口相當(dāng)于以前的dao。但是區(qū)別在于,mapper僅僅是接口,我們不需要提供實(shí)現(xiàn)類。
創(chuàng)建MyBatis的映射文件
MyBatls中的mapper接口相當(dāng)于以前的dao。但是區(qū)別在于,mapper僅僅是接口,我們不需要提供實(shí)現(xiàn)類。
創(chuàng)建MyBatis的映射文件
相關(guān)概念:ORM(Object Relationship Mapping)對(duì)象關(guān)系映射
.對(duì)象:java的實(shí)體類對(duì)象
.關(guān)系:關(guān)系型數(shù)據(jù)庫(kù)
.映射:二者之間的對(duì)應(yīng)關(guān)系映射文件的命名規(guī)則->表所對(duì)應(yīng)的實(shí)體類的類名+Mapper.xml
測(cè)試添加功能
SqlSession:代表java程序和數(shù)據(jù)庫(kù)之間的會(huì)話。(HttpSession是java程序和瀏覽器之間的會(huì)話)
SqlSessionFactory:是”生產(chǎn)SqlSession的”工廠。
工廠模式:如果創(chuàng)建某一個(gè)對(duì)象,使用的過(guò)程基本固定,那么我們就可以把創(chuàng)建這個(gè)對(duì)象的相關(guān)代碼封裝到一個(gè)”工廠類”中,以后都使用這個(gè)工廠類來(lái)”生產(chǎn)”我們需要的對(duì)象
示例代碼:
@Test
public void testMyBatis() throws IOException {
//加載核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//獲取SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//獲取SqlSessionFactory
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//獲取SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//獲取mapper接口對(duì)象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//測(cè)試功能
int result = mapper.insertUser();
//提交事務(wù)
sqlSession.commit();
System.out.println("result:"+result);
}需要手動(dòng)提交數(shù)據(jù)的原因

優(yōu)化功能
對(duì)于簡(jiǎn)單的SQL我們沒(méi)必要每次都手動(dòng)提交數(shù)據(jù),因此可以把默認(rèn)的手動(dòng)提交,變?yōu)樽詣?dòng)提交

加入log4j日志文件功能
第一步 加入依賴
<!--log4j日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>第二步 加入配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}
%m (%F:%L) \n"/>
</layout>
</appender>
<logger name="java.sql">
<level value="debug"/>
</logger>
<logger name="org.apache.ibatis">
<level value="info"/>
</logger>
<root>
<level value="debug"/>
<appender-ref ref="STDOUT"/>
</root>
</log4j:configuration>日志的級(jí)別
FATA(致命)>ERROR(錯(cuò)誤)>WARN(警告)>INFO(信息)>DEBUG(調(diào)試)
從左到右打印的內(nèi)容越來(lái)越詳細(xì)

MyBatis核心配置文件之environment




MyBatis核心配置文件之properties
將數(shù)據(jù)庫(kù)信息寫(xiě)在properties里面,之后在配置文件里面引用
第一步:創(chuàng)建properties文件,并且編寫(xiě)數(shù)據(jù)庫(kù)配置信息

第二步:在配置文件中引入properties文件

第三步:編寫(xiě)數(shù)據(jù)庫(kù)連接池

MyBatis核心配置文件之typeAliases
MyBatis核心配置文件中,標(biāo)簽的順序:
propertiers?,setting?,typeAliases?,typeHandlers?
objectFactory?,objectWrapperFactory?,reflectorFactory?,
plugins?,environments?,dataseIdProvider?,mappers?為了避免重復(fù)頻繁的寫(xiě)在mapper中的resultType寫(xiě)全類名

所以可以在配置文件中利用typeAliases標(biāo)簽創(chuàng)建一個(gè)簡(jiǎn)短的別名

隨后在mapper文件寫(xiě)sql語(yǔ)句時(shí)可以

注意
不區(qū)分大小寫(xiě)
若不設(shè)置屬性alis

則會(huì)有默認(rèn)別名就是類名不區(qū)分大小寫(xiě)

MyBatis核心配置文件之mappers


當(dāng)表的數(shù)量太多的時(shí)候,需要大量的mapper標(biāo)簽來(lái)引入映射文件,為此我們可以通過(guò)引入包的方式來(lái)引入映射文件以包為單位引入映射文件
要求:
1.mapper接口所在的包要和映射文件所在的包一致
2.mapper接口要和映射文件的名字一致

思考:映射文件中的SQL該如何拼接?

到此這篇關(guān)于MyBatis 核心配置文件及映射文件的文章就介紹到這了,更多相關(guān)MyBatis 核心配置文件映射內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java從內(nèi)存角度帶你理解數(shù)組名實(shí)質(zhì)是個(gè)地址的論述
這篇文章主要介紹了Java如何從內(nèi)存解析的角度理解“數(shù)組名實(shí)質(zhì)是一個(gè)地址”,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-09-09
Java中多態(tài)的實(shí)現(xiàn)原理詳細(xì)解析
這篇文章主要介紹了Java中多態(tài)的實(shí)現(xiàn)原理詳細(xì)解析,多態(tài)是面向?qū)ο缶幊陶Z(yǔ)言的重要特性,它允許基類的指針或引用指向派生類的對(duì)象,而在具體訪問(wèn)時(shí)實(shí)現(xiàn)方法的動(dòng)態(tài)綁定,需要的朋友可以參考下2024-01-01
Java動(dòng)態(tài)規(guī)劃篇之線性DP的示例詳解
這篇文章主要通過(guò)幾個(gè)例題為大家詳細(xì)介紹一些Java動(dòng)態(tài)規(guī)劃中的線性DP,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下2022-11-11
MyBatis注解方式之@Update/@Delete使用詳解
這篇文章主要介紹了MyBatis注解方式之@Update/@Delete使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
Array?Index?Out?of?Bounds:數(shù)組越界錯(cuò)誤解決方案及調(diào)試技巧
數(shù)組越界訪問(wèn)是指訪問(wèn)數(shù)組中超出其有效索引范圍的元素,這是一種常見(jiàn)的編程錯(cuò)誤,可能導(dǎo)致程序崩潰或數(shù)據(jù)損壞,下面這篇文章主要給大家介紹了關(guān)于Array?Index?Out?of?Bounds:數(shù)組越界錯(cuò)誤解決方案及調(diào)試技巧的相關(guān)資料,需要的朋友可以參考下2024-08-08
SpringBoot 如何實(shí)現(xiàn)異步編程
在SpringBoot的日常開(kāi)發(fā)中,一般都是同步調(diào)用的,但實(shí)際中有很多場(chǎng)景非常適合使用異步來(lái)處理,本文就詳細(xì)的介紹一下SpringBoot 如何實(shí)現(xiàn)異步編程 ,具有一定的參考價(jià)值,感興趣的可以了解一下2021-12-12
Linux環(huán)境卸載Centos7自帶的OpenJDK和安裝JDK1.8圖文教程
CentOS系統(tǒng)是開(kāi)發(fā)者常用的Linux操作系統(tǒng),安裝它時(shí)會(huì)默認(rèn)安裝自帶的舊版本的OpenJDK,但在開(kāi)發(fā)者平時(shí)開(kāi)發(fā)Java項(xiàng)目時(shí)還是需要完整的JDK,這篇文章主要給大家介紹了關(guān)于Linux環(huán)境卸載Centos7自帶的OpenJDK和安裝JDK1.8的相關(guān)資料,需要的朋友可以參考下2024-07-07
java根據(jù)開(kāi)始時(shí)間結(jié)束時(shí)間計(jì)算中間間隔日期的實(shí)例代碼
這篇文章主要介紹了java根據(jù)開(kāi)始時(shí)間結(jié)束時(shí)間計(jì)算中間間隔日期的實(shí)例代碼,需要的朋友可以參考下2019-05-05

