淺談MyBatis執行SQL的兩種方式
前言
本文介紹MyBatis執行SQL語句的2種方式:SqlSession和Mapper接口以及它們的區別。
準備接口和Mapper配置文件:
定義UserMapper接口:
package cn.cvs.dao; import cn.cvs.pojo.User; import java.util.List; public interface UserMapper { //查找所有的用戶信息 public List<User> findAll(); //查詢用戶的數量 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> <!-- 查詢用戶的數量--> <select id="selectCount" resultType="int"> SELECT count(1) FROM t_sys_user </select> </mapper>
指定sqlMapConfig其mapper文件的位置:
在sqlMapConfig.xml文件裡面添加<mappers>
成對標簽,然後裡加上成對的mapper
標簽,使用mapper的resource屬性指定mapper文件的路徑,這個路徑是從target/classes路徑開啟的。
使用註意:
resource=“mapper文件的路徑,使用 /
分割路徑”,記住不是”.
“
一個mapper resource 指定一個mapper文件
代碼模板:
<mappers> <mapper resource="mapper文件的路徑"/> </mappers>
使用SqlSession 發送 SQL
指定要執行的sql語句的 id:
sql的id = namespace+”.”+ select|update|insert|delete標簽的id屬性值
例如:
namespace為cn.cvs.dao.UserMapper指定id為selectCount的sql語句
格式:命名空間(namespace)+點(.)+id屬性值(id) 格式:cn.cvs.dao.UserMapper.selectCount
這樣 MyBatis 就會找到對應的 SQL
通過SqlSession的方法,執行sql語句
List<User> list = sqlSession.selectList("cn.cvs.dao.UserMapper.findAll");
selectList 方法表示使用查詢並且隻返回一個List集合
如果在 MyBatis 中隻有一個 id 為 selectCount 的 SQL,那麼也可以簡寫為:
List<User> list = sqlSession.selectList("selectCount");
這是 MyBatis 前身 iBatis 所留下的方式。
使用 Mapper 接口發送 SQL
用 Mapper 接口發送SQL就是以動態代理的方式sqlsession.getMapper(dao.class)獲取dao接口對象,執行對應方法即可。這樣做不用我們再去寫dao接口的實現類就可以直接執行對應sql語句,其實就是MyBatis以代理的方式幫我們創建瞭接口的實現類。
Mapper規范:namespace要寫dao接口的全限定名稱,標簽id要寫接口方法名
通過 SqlSession 獲取 Mapper 接口,通過 Mapper 接口發送 SQL :
UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> list2=mapper.findAll();
通過 SqlSession 的 getMapper 方法來獲取一個 Mapper 接口,就可以調用它的方法瞭。因為 XML文件或者接口註解定義的 SQL 都可以通過“類的全限定名+方法名”查找,所以 MyBatis 會啟用對應的 SQL 進行運行,並返回結果。
比較兩種發送 SQL 方式
用 SqlSession 接口發送 SQL :
無需定義dao接口,直接通過”命名空間+id
“調用對應的SQL
List list = sqlSession.selectList(“cn.cvs.dao.UserMapper.findAll”);
用 Mapper 接口發送 SQL :
通過 SqlSession 獲取 Mapper 接口
格式:接口類名 對象名 = sqlSession.getMapper(接口類名.class);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
調用對應的SQL
List list2=mapper.findAll();
建議采用 SqlSession 獲取 Mapper 接口的方式:
使用 Mapper 接口編程可以消除 SqlSession 帶來的功能性代碼,提高可讀性,而 SqlSession 發送 SQL,需要一個> SQL id 去匹配 SQL,比較晦澀難懂。
到此這篇關於淺談MyBatis執行SQL的兩種方式的文章就介紹到這瞭,更多相關MyBatis執行SQL內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java Mybatis框架增刪查改與核心配置詳解流程與用法
- 詳解Mybatis中的CRUD
- Mybatis CURD及模糊查詢功能的實現
- 詳解MyBatis的Dao層實現和配置文件深入
- Java MyBatis是如何執行一條SQL語句的