日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MyBatis基础知识概述

發布時間:2025/3/12 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatis基础知识概述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、依賴配置

添加依賴即可,jar包或pom依賴:

<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>x.x.x</version> </dependency>

二、SqlSessionFactory

2.1 什么是SqlSessionFactory?

SqlSessionFactory是MyBatis的核心類,它是單個數據庫映射關系經過編譯后的內存鏡像。主要功能是提供用于操作數據庫的SqlSession。

2.2 構建SqlSessionFactory?

SqlSessionFactory實例可以通過SqlSessionFactoryBuilder獲得。

后者可以從一個xml配置文件(mybatis-config.xml文件)或預定制的Configuration實例中構建出SqlSessionFactory,每一個MyBatis應用都以一個SqlSessionFactory實例為核心,同時SqlSessionFactory也是線程安全的SqlSessionFactory一旦被創建,應該在應用執行期間都存在于內存中,應用運行期間不要重復創建多次,建議使用單例模式。

xml配置文件中包含了對mybatis系統的核心設置,包括獲取數據庫連接實例的數據源DataSource和決定事務作用域和控制方式的事務管理器TransactionManager。一個簡單的mybatis-config.xml(未與spring整合)的例子如下:

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

上面的配置信息是關鍵的部分。xml頭部聲明用來驗證xml文檔正確性。environment元素體中包含了事務管理和連接池的配置。mappers元素則是包含一組mapper映射器(這些mapper的xml文件包含了SQL代碼和映射定義信息)

構建(如果使用像spring這樣的框架,或者更高級一點的springboot,這些工作全都不用我們來做了,開箱即用):

SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(inputStream);

三、SqlSession

3.1 什么是SqlSession?

SqlSession是MyBatis的關鍵對象,是持久化操作的獨享,類似于jdbc中的Connection,它是應用程序與持久層之間執行交互操作的一個單線程對象。SqlSession對象包含全部的以數據庫為背景的SQL操作方法,底層封裝jdbc連接,可以用SqlSession實例來直接執行被映射的SQL語句。但是記住,SqlSession應該是線程私有的,因為它不具備線程安全性。

3.2 SqlSession的獲取?

SqlSession的實例需要從SqlSessionFactory中獲取。SqlSession涵蓋了對數據庫執行SQL命令所需的全部方法。

SqlSession session = sqlSessionFactory.openSession();// 通過SqlSessionFactory對象來獲取 try {Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101); } finally {session.close(); }

上面這種代碼比較偏舊。現在有一種更直白的方式。使用對于給定語句能夠合理描述參數和返回值的接口,現在不但可以執行更清晰的類型安全的代碼,而且還不用擔心易錯的字符串字面量以及強制類型轉換。例如:

SqlSession session = sqlSessionFactory.openSession(); try {BlogMapper mapper = session.getMapper(BlogMapper.class);Blog blog = mapper.selectBlog(101); } finally {session.close(); }

四、探究已映射的SQL語句

一個查詢的SQL,基于xml的映射語句的實例如下:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.mybatis.example.BlogMapper"><select id="selectBlog" resultType="Blog">select * from Blog where id = #{id}</select> </mapper>

在一個xml映射文件中,定義多少個映射語句都是可以的。命名空間“org.mybatis.example.BlogMapper”定義了一個名為“selectBlog”的映射語句,這樣它就允許你使用指定的完全限定名“org.mybatis.example.BlogMapper.selectBlog”來調用映射語句。

這種使用全限定名調用映射語句的方式和通過全限定名調用Java對象的方法是相似的,這是因為mybatis通過這種方式可以直接映射到在命名空間中同名的Mapper類(實際上命名空間就是用于定義對應Mapper類的全限定名的),并將已映射的select語句中的名字、參數、返回值類型匹配成方法。這樣就可以輕松的調用到位于Mapper接口中對應的同名方法。

使用如下的代碼:

BlogMapper mapper = session.getMapper(BlogMapper.class); Blog blog = mapper.selectBlog(101);

更有優勢,首先它不是基于字符串常量的,就會更安全;其次,對于已經映射的SQL語句,對于id = "selectBlog",IDE可以自動為我們補全方法或提示。

五、命名空間

命名空間(namespace)在之前版本的mybatis中是可選的,但是在目前版本的mybatis中是必須的

命名空間使得我們所見的接口綁定成為可能,出于長遠考慮,使用命名空間,并將它置于合適的Java包命名空間之下,將擁有一份更加整潔的代碼并提高mybatis的可用性。

5.1 命名解析

為了減少輸入量,mybatis對所有的命名配置元素(包括語句,結果映射,緩存等)使用如下的命名解析規則。

1.全限定名(如“com.package.Mapper.selectAllThings”),將被直接查找并且找到即用。

2.短名稱(如“selectAllThings”),如果全局唯一也可以作為一個單獨的引用。如果不唯一,就會在使用時收到錯誤報告,提示短名稱不是唯一的,這種情況下必須使用完全限定名。

六、基于注解的SQL映射

映射器類(Mapper class 實際上是一個僅僅包含一系列定義方法簽名和返回值類型的interface)還有另一種不是用xml來映射SQL語句的方法————Java注解,如下所示:

package org.mybatis.example; public interface BlogMapper {@Select("SELECT * FROM blog WHERE id = #{id}")Blog selectBlog(int id); }

但是注解中的SQL語句畢竟限制性太強,稍微復雜一點的SQL語句會使得代碼非常混亂,因此我們應當合理權衡注解和xml的SQL映射。

總結

以上是生活随笔為你收集整理的MyBatis基础知识概述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。