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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

MyBatis学习与使用(一)

發布時間:2024/4/15 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatis学习与使用(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫在前面——

用 MyBatis 也做過幾個項目了,但是一直沒有很深入的去理解這個框架,最近決定從頭開始學習和整理MyBatis。

之前開發的項目并不是我先創建的,等我介入的時候發現他們已經稍稍封裝了一下對MyBatis的使用,反正不是那種官方文檔上代碼的樣子,所以我之前用得就糊里糊涂的,今天就從官方文檔中展示的用法開始學習。

?

正文如下——

Mybatis核心類

1. SqlSessionFactory

用來生成SqlSession的實例。 這個類一旦被創建就應該在應用的運行期間一直存在,沒有任何理由對它進行清除或重建。使用 SqlSessionFactory 的最佳實踐是在應用運行期間不要重復創建多次,因此 SqlSessionFactory 的最佳作用域是應用作用域。有很多方法可以做到,最簡單的就是使用單例模式或者靜態單例模式。

2. SqlSession

包含了面向數據庫執行SQL所需的所有方法。你可以通過SqlSession的實例來執行已經映射的SQL語句。當然還可以用來獲取mapper接口類,然后通過該接口類執行查詢語句。 這個類的實例不是線程安全的,因此是不能被共享的。如果你現在正在使用一種 Web 框架,要考慮 SqlSession 放在一個和 HTTP 請求對象相似的作用域中。換句話說,每次收到的 HTTP 請求,就可以打開一個 SqlSession,返回一個響應,就關閉它。這個關閉操作是很重要的,你應該把這個關閉操作放到 finally 塊中以確保每次都能執行關閉。?

3. SqlSessionFactoryBuilder

用來生成SqlSessionFactory。 這個類可以被實例化、使用和丟棄,一旦創建了 SqlSessionFactory,就不再需要它了。因此 SqlSessionFactoryBuilder 實例的最佳作用域是方法作用域(也就是局部方法變量)。你可以重用 SqlSessionFactoryBuilder 來創建多個 SqlSessionFactory 實例,但是最好還是不要讓其一直存在以保證所有的 XML 解析資源開放給更重要的事情。

4. Mapper接口

映射器是一個你創建來綁定你映射的語句的接口。映射器接口的實例是從 SqlSession 中獲得的,其作用域最好也是方法內。

MyBatis的基本用法

1. 傳統用法(XML配置映射文件)

首先有整個MyBatis的配置文件一般命名為mybatis-config.xml,可以按順序(具體順序可以查看表頭鏈接指向的dtd文件)配置別名、環境數據源、映射器等。 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <typeAliases> 7 <typeAlias alias="Book" type="tech.ipush.model.Book" /> 8 </typeAliases> 9 <environments default="development"> 10 <environment id="development"> 11 <transactionManager type="JDBC"/> 12 <dataSource type="POOLED"> 13 <property name="driver" value="com.mysql.cj.jdbc.Driver"/> 14 <property name="url" value="jdbc:mysql://localhost:3306/webpractice?autoReconect=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=GMT%2B8"/> 15 <property name="username" value="root"/> 16 <property name="password" value="root"/> 17 </dataSource> 18 </environment> 19 </environments> 20 <mappers> 21 <mapper resource="tech/ipush/mapper/BookMapper.xml" /> 22 </mappers> 23 </configuration> mybatis-config.xml? 基本上一個表需要對應一個mapper.xml文件,每寫好一個文件就要寫入到mybatis-config.xml配置文件的mappers中。 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <mapper namespace="tech.ipush.mapper.BookMapper"> 6 <select id="getBook" resultType="Book"> 7 select * from book where id=#{id} 8 </select> 9 </mapper> BookMapper.xml 如上所示,這里配置了一個名為getBook的查詢語句。返回值是一個Book,這里用的是mybatis-config.xml中的別名。 那么到底如何使用這里的配置呢?下邊給出了第一種用法。 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sqlSessionFactory.openSession(); try {Book book1 = (Book) session.selectOne("tech.ipush.mapper.BookMapper.getBook", 2);System.out.println("book1Name: " + book1.getName()); } finally { session.close(); }

?

2. 跟第一種類似,只不過session使用mapper的方式不同。 第二種比第一種多一個顯示的接口文件,接口全名需要跟mapper.xml中的命名空間完全一致,如下: public interface BookMapper {Book getBook(int id); }? 調用方式如下: String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session2 = sqlSessionFactory.openSession(); try {BookMapper mapper = session2.getMapper(BookMapper.class);Book book = mapper.getBook(2);System.out.println("bookName: " + book.getName()); } catch (Exception e) {e.printStackTrace(); } finally {session.close(); } 3. 使用注解的方式 這一種方式不需要xml配置文件,但是需要跟代碼耦合度高一些。 package tech.ipush.mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import tech.ipush.model.Bill; @Repository @Mapper public interface BillMapper {@Select("select * from bill where id = #{id}")Bill selectBill(int id); }

?

轉載于:https://www.cnblogs.com/bityinjd/p/9595641.html

總結

以上是生活随笔為你收集整理的MyBatis学习与使用(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

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