MyBatis学习与使用(一)
生活随笔
收集整理的這篇文章主要介紹了
MyBatis学习与使用(一)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
寫在前面——
用 MyBatis 也做過(guò)幾個(gè)項(xiàng)目了,但是一直沒(méi)有很深入的去理解這個(gè)框架,最近決定從頭開始學(xué)習(xí)和整理MyBatis。
之前開發(fā)的項(xiàng)目并不是我先創(chuàng)建的,等我介入的時(shí)候發(fā)現(xiàn)他們已經(jīng)稍稍封裝了一下對(duì)MyBatis的使用,反正不是那種官方文檔上代碼的樣子,所以我之前用得就糊里糊涂的,今天就從官方文檔中展示的用法開始學(xué)習(xí)。
?
正文如下——
Mybatis核心類
1. SqlSessionFactory
用來(lái)生成SqlSession的實(shí)例。 這個(gè)類一旦被創(chuàng)建就應(yīng)該在應(yīng)用的運(yùn)行期間一直存在,沒(méi)有任何理由對(duì)它進(jìn)行清除或重建。使用 SqlSessionFactory 的最佳實(shí)踐是在應(yīng)用運(yùn)行期間不要重復(fù)創(chuàng)建多次,因此 SqlSessionFactory 的最佳作用域是應(yīng)用作用域。有很多方法可以做到,最簡(jiǎn)單的就是使用單例模式或者靜態(tài)單例模式。2. SqlSession
包含了面向數(shù)據(jù)庫(kù)執(zhí)行SQL所需的所有方法。你可以通過(guò)SqlSession的實(shí)例來(lái)執(zhí)行已經(jīng)映射的SQL語(yǔ)句。當(dāng)然還可以用來(lái)獲取mapper接口類,然后通過(guò)該接口類執(zhí)行查詢語(yǔ)句。 這個(gè)類的實(shí)例不是線程安全的,因此是不能被共享的。如果你現(xiàn)在正在使用一種 Web 框架,要考慮 SqlSession 放在一個(gè)和 HTTP 請(qǐng)求對(duì)象相似的作用域中。換句話說(shuō),每次收到的 HTTP 請(qǐng)求,就可以打開一個(gè) SqlSession,返回一個(gè)響應(yīng),就關(guān)閉它。這個(gè)關(guān)閉操作是很重要的,你應(yīng)該把這個(gè)關(guān)閉操作放到 finally 塊中以確保每次都能執(zhí)行關(guān)閉。?3. SqlSessionFactoryBuilder
用來(lái)生成SqlSessionFactory。 這個(gè)類可以被實(shí)例化、使用和丟棄,一旦創(chuàng)建了 SqlSessionFactory,就不再需要它了。因此 SqlSessionFactoryBuilder 實(shí)例的最佳作用域是方法作用域(也就是局部方法變量)。你可以重用 SqlSessionFactoryBuilder 來(lái)創(chuàng)建多個(gè) SqlSessionFactory 實(shí)例,但是最好還是不要讓其一直存在以保證所有的 XML 解析資源開放給更重要的事情。4. Mapper接口
映射器是一個(gè)你創(chuàng)建來(lái)綁定你映射的語(yǔ)句的接口。映射器接口的實(shí)例是從 SqlSession 中獲得的,其作用域最好也是方法內(nèi)。MyBatis的基本用法
1. 傳統(tǒng)用法(XML配置映射文件)
首先有整個(gè)MyBatis的配置文件一般命名為mybatis-config.xml,可以按順序(具體順序可以查看表頭鏈接指向的dtd文件)配置別名、環(huán)境數(shù)據(jù)源、映射器等。 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&useUnicode=true&characterEncoding=utf-8&useSSL=false&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? 基本上一個(gè)表需要對(duì)應(yīng)一個(gè)mapper.xml文件,每寫好一個(gè)文件就要寫入到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 如上所示,這里配置了一個(gè)名為getBook的查詢語(yǔ)句。返回值是一個(gè)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. 跟第一種類似,只不過(guò)session使用mapper的方式不同。 第二種比第一種多一個(gè)顯示的接口文件,接口全名需要跟mapper.xml中的命名空間完全一致,如下: public interface BookMapper {Book getBook(int id); }? 調(diào)用方式如下: 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); }
?
轉(zhuǎn)載于:https://www.cnblogs.com/bityinjd/p/9595641.html
總結(jié)
以上是生活随笔為你收集整理的MyBatis学习与使用(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: js中的鼠标滚轮事件
- 下一篇: git 快速入门笔记