mybatis3.x入門及初步使用(1)
阿新 • • 發佈:2021-02-17
mybatis3.x入門及初步使用
一.什麼是mybatis:
Mybatis是一個半自動化的ORM框架 ORM:將O(實體類)和R(關係表)通過M(mapper對映檔案)關聯在一起,程式設計時只需要對O進行操作,以面向物件的方式操作O,通過M將資料儲存在R中
二.mybatis的入門使用:
- 匯入依賴:
<!--mybaits依賴-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis< /artifactId>
<version>3.5.6</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
- 配置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>
<!--配置環境資訊,可以配置多個 default設定當前使用的環境資訊-->
<environments default="my">
<!--配置單個的環境資訊 id:唯一標識,關聯上邊default-->
<environment id="my">
<!--事務管理器:JDBC為使用jdk自帶的事務管理器,後期變為宣告式事務-->
<transactionManager type="JDBC"></transactionManager>
<!--配置資料來源 POOLED:使用mybatis自帶的資料庫連線池,後期可以變為其他資料連線池-->
<dataSource type="POOLED">
<!--以下為資料來源預設配置:注意這裡的name的值,要和當前使用的資料來源裡面的屬性名保持一致
(最好進入類裡面檢視getset方法)-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///xdclassvideo?useUnicode=true&characterEncoding=utf-8&useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--載入mapper對映檔案-->
<mappers>
<mapper resource="mapper/VideoDao.xml"></mapper>
</mappers>
</configuration>
- 編寫介面:
public interface VideoDao {
//根據id查詢video
Video selectVideoById(int id);
}
- 編寫mapper對映檔案:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--跟標籤 namespace:可以理解為當前xml檔案的唯一標識,最好寫為對應介面的全路徑-->
<mapper namespace="com.ceh.dao.VideoDao">
<!--查詢標籤,mybaits還提供其他的標籤,如insert、delete、uodate...相當於jdbc中的statment
id:當前sql的唯一標識,最好和介面的抽象方法名一致
resultType:返回值型別,這個屬性只適合單表且pojo的屬性名和表的列名一致時使用(後期還有一個resultMap)
-->
<!--Video selectVideoById(int id);-->
<select id="selectVideoById" resultType="com.ceh.entity.Video">
select * from video where id = #{id}
</select>
</mapper>
- 測試:
@Test
public void test01() throws IOException {
//指定mybatis的核心配置檔案位置
String configLoca = "config/mybatis-config.xml";
//讀取核心配置檔案,得到inputStream
InputStream is = Resources.getResourceAsStream(configLoca);
//根據sqlSessionfactoryBuilder構造出SqlSessionFactory工廠
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//因為sqlsession使用完畢需要釋放資源,這裡使用jdk新特性,使用完畢,自動釋放
try(SqlSession sqlSession = factory.openSession()){
//使用mybatis的動態代理的形式,構造出VideoDao的實現類物件,並賦值給VideoDao(多型)
VideoDao videoDao = sqlSession.getMapper(VideoDao.class);
//呼叫方法,獲取返回值
Video video = videoDao.selectVideoById(37);
//輸出
System.out.println(video);
}
}
- 結果:
mybatis自動的幫我們把結果對映到pojo上,我們不需要再考慮處理結果集
三.注意事項:
- VideoDao videoDao = sqlSession.getMapper(VideoDao.class);
這裡使用的是mybatis動態代理的形式,根據我們介面的全路徑及對映檔案的namespace匹配,生成介面的代理物件,我們只需要呼叫介面的方法(多型),即可完成呼叫。
mybatis動態代理的要求:
1.介面名要和對映檔名一致
2.對映檔案的namespace必須寫為介面的全路徑
3.入參型別保持一致
4.出參型別保持一致
- sql語句中的#{}理解:
其實這裡也可以使用${}的形式,給佔位符賦值
區別:
#{}可以防止sql注入,它給引數加了’’,這樣sql注入時,是無效的,但是模糊查詢時需要’%’#{xxx}’%'形式
${}不具備防止sql注入,不建議使用,傳遞的是什麼值,這裡賦值的就是什麼值。
- try(xxx){}:
這個是jdk的新特性,我們使用jdbc連線資料庫時,需要關閉resultset、statment、conntation時,需要在fnally裡面一個一個進行關閉,jdk新特性就是隻要實現了Closeable介面的物件,那麼這個物件就可以寫在try裡面,執行完畢之後,自動關閉