淺談MyBatis執(zhí)行SQL的兩種方式
前言
本文介紹MyBatis執(zhí)行SQL語句的2種方式:SqlSession和Mapper接口以及它們的區(qū)別。
準(zhǔn)備接口和Mapper配置文件:
定義UserMapper接口:
package cn.cvs.dao;
import cn.cvs.pojo.User;
import java.util.List;
public interface UserMapper {
//查找所有的用戶信息
public List<User> findAll();
//查詢用戶的數(shù)量
public int selectCount();
}
定義UserMapper配置文件:
<?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">
<mapper namespace="cn.cvs.dao.UserMapper">
<!-- 查找所有的用戶信息-->
<select id="findAll" resultType="cn.cvs.pojo.User">
SELECT * FROM t_sys_user
</select>
<!-- 查詢用戶的數(shù)量-->
<select id="selectCount" resultType="int">
SELECT count(1) FROM t_sys_user
</select>
</mapper>
指定sqlMapConfig其mapper文件的位置:
在sqlMapConfig.xml文件里面添加<mappers>成對標(biāo)簽,然后里加上成對的mapper標(biāo)簽,使用mapper的resource屬性指定mapper文件的路徑,這個(gè)路徑是從target/classes路徑開啟的。
使用注意:
resource=“mapper文件的路徑,使用 / 分割路徑”,記住不是"."
一個(gè)mapper resource 指定一個(gè)mapper文件
代碼模板:
<mappers> <mapper resource="mapper文件的路徑"/> </mappers>
使用SqlSession 發(fā)送 SQL
指定要執(zhí)行的sql語句的 id:
sql的id = namespace+"."+ select|update|insert|delete標(biāo)簽的id屬性值
例如:
namespace為cn.cvs.dao.UserMapper指定id為selectCount的sql語句
格式:命名空間(namespace)+點(diǎn)(.)+id屬性值(id) 格式:cn.cvs.dao.UserMapper.selectCount

這樣 MyBatis 就會(huì)找到對應(yīng)的 SQL
通過SqlSession的方法,執(zhí)行sql語句
List<User> list = sqlSession.selectList("cn.cvs.dao.UserMapper.findAll");
selectList 方法表示使用查詢并且只返回一個(gè)List集合
如果在 MyBatis 中只有一個(gè) id 為 selectCount 的 SQL,那么也可以簡寫為:
List<User> list = sqlSession.selectList("selectCount");
這是 MyBatis 前身 iBatis 所留下的方式。
使用 Mapper 接口發(fā)送 SQL
用 Mapper 接口發(fā)送SQL就是以動(dòng)態(tài)代理的方式sqlsession.getMapper(dao.class)獲取dao接口對象,執(zhí)行對應(yīng)方法即可。這樣做不用我們再去寫dao接口的實(shí)現(xiàn)類就可以直接執(zhí)行對應(yīng)sql語句,其實(shí)就是MyBatis以代理的方式幫我們創(chuàng)建了接口的實(shí)現(xiàn)類。
Mapper規(guī)范:namespace要寫dao接口的全限定名稱,標(biāo)簽id要寫接口方法名

通過 SqlSession 獲取 Mapper 接口,通過 Mapper 接口發(fā)送 SQL :
UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> list2=mapper.findAll();
通過 SqlSession 的 getMapper 方法來獲取一個(gè) Mapper 接口,就可以調(diào)用它的方法了。因?yàn)?XML文件或者接口注解定義的 SQL 都可以通過“類的全限定名+方法名”查找,所以 MyBatis 會(huì)啟用對應(yīng)的 SQL 進(jìn)行運(yùn)行,并返回結(jié)果。
比較兩種發(fā)送 SQL 方式
用 SqlSession 接口發(fā)送 SQL :
無需定義dao接口,直接通過"命名空間+id"調(diào)用對應(yīng)的SQL
List list = sqlSession.selectList(“cn.cvs.dao.UserMapper.findAll”);
用 Mapper 接口發(fā)送 SQL :
通過 SqlSession 獲取 Mapper 接口
格式:接口類名 對象名 = sqlSession.getMapper(接口類名.class);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
調(diào)用對應(yīng)的SQL
List list2=mapper.findAll();
建議采用 SqlSession 獲取 Mapper 接口的方式:
使用 Mapper 接口編程可以消除 SqlSession 帶來的功能性代碼,提高可讀性,而 SqlSession 發(fā)送 SQL,需要一個(gè)> SQL id 去匹配 SQL,比較晦澀難懂。
到此這篇關(guān)于淺談MyBatis執(zhí)行SQL的兩種方式的文章就介紹到這了,更多相關(guān)MyBatis執(zhí)行SQL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot項(xiàng)目部署到騰訊云的實(shí)現(xiàn)步驟
本文主要介紹了SpringBoot項(xiàng)目部署到騰訊云的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
Java實(shí)現(xiàn)的計(jì)算最大下標(biāo)距離算法示例
這篇文章主要介紹了Java實(shí)現(xiàn)的計(jì)算最大下標(biāo)距離算法,涉及java針對數(shù)組的遍歷、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下2018-02-02
帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之隊(duì)列
這篇文章主要為大家介紹了Java數(shù)據(jù)結(jié)構(gòu)和算法之隊(duì)列,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-01-01
SpringBoot中使用異步調(diào)度程序的高級方法
本文主要介紹了SpringBoot中使用異步調(diào)度程序的高級方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
Java concurrency之共享鎖和ReentrantReadWriteLock_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
本篇文章主要介紹了Java concurrency之共享鎖和ReentrantReadWriteLock,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-06-06

