MyBatis執(zhí)行SQL的兩種方式

本節(jié)主要介紹 MyBatis 執(zhí)行 SQL 語句的兩種方式和它們的區(qū)別。

MyBatis 有兩種執(zhí)行 SQL 語句的方式,如下:

  • 通過 SqlSession 發(fā)送 SQL

  • 通過 SqlSession 獲取 Mapper 接口,通過 Mapper 接口發(fā)送 SQL

SqlSession發(fā)送SQL

有映射器之后就可以通過 SqlSession 發(fā)送 SQL 了。我們以 getWebsite 這條 SQL 為例看看如何發(fā)送 SQL。

Website website = (Website)sqlSession.selectOne("net.biancheng.mapper.WebsiteMapper.getWebsite",1);
                

MyBatis 常用的查詢方法有 2 種,分別為 selectOne 和 selectList。

1)selectOne

selectOne 方法表示使用查詢并且只返回一個(gè)對象,必須指定查詢條件。只能查詢 0 或 1 條記錄,大于 1 條記錄則運(yùn)行錯(cuò)誤。常用格式如下(也有其它重載方法,根據(jù)需要選擇)。

sqlSession.selectOne(String arg0, Object arg1)
                

2)selectList

selectList 方法表示使用查詢并且返回一個(gè)列表??梢圆樵?0 或 N 條記錄。常用格式如下。

sqlSession.selectOne(String arg0)
                

也可指定參數(shù):

sqlSession.selectList(String arg0, Object arg1)
                

以上語法格式中,String 對象由一個(gè)命名空間加 SQL id 組合而成,它完全定位了一條 SQL,這樣 MyBatis 就會找到對應(yīng)的 SQL。Object 對象為需要傳遞的參數(shù),也就是查詢條件。

selectOne 實(shí)現(xiàn)的 selectList 都可以實(shí)現(xiàn),即 list 中只有一個(gè)對象。但 selectList 能實(shí)現(xiàn)的,selectOne 不一定能實(shí)現(xiàn)。

如果 MyBatis 中只有一個(gè) id 為 getWbsite 的 SQL,那么也可以簡寫為:

Website website = (Website)sqlSession.selectOne("getWbsite",1);
                

這是 MyBatis 前身 iBatis 所留下的方式。

Mapper接口發(fā)送 SQL

SqlSession 還可以獲取 Mapper 接口,通過 Mapper 接口發(fā)送 SQL,如下所示。

WebsiteMapper websiteMapper = sqlSession.getMapper(WebsiteMapper.class);
Website website = websiteMapper.getWebsite(1);
                

通過 SqlSession 的 getMapper 方法獲取一個(gè) Mapper 接口,然后就可以調(diào)用它的方法了。因?yàn)?XML 文件或者接口注解定義的 SQL 都可以通過“類的全限定名+方法名”查找,所以 MyBatis 會啟用對應(yīng)的 SQL 運(yùn)行,并返回結(jié)果。

區(qū)別

上面分別講解了 MyBatis 兩種發(fā)送 SQL 的方式,一種用 SqlSession 直接發(fā)送,另外一種通過 SqlSession 獲取 Mapper 接口再發(fā)送。筆者建議采用 Mapper 接口發(fā)送 SQL 的方式,理由如下:

  • 使用 Mapper 接口編程可以消除 SqlSession 帶來的功能性代碼,提高可讀性,而 SqlSession 發(fā)送 SQL,需要一個(gè) SQL id 去匹配 SQL,比較晦澀難懂。

  • 使用 Mapper 接口,類似 websiteMapper.getWebsite(1) 則是完全面向?qū)ο蟮恼Z言,更能體現(xiàn)業(yè)務(wù)的邏輯。

  • 使用 websiteMapper.getWebsite(1) 方式,IDE 會提示錯(cuò)誤和校驗(yàn),而使用 sqlSession.selectOne("getWebsite",1L) 語法,只有在運(yùn)行中才能知道是否會產(chǎn)生錯(cuò)誤。

目前使用 Mapper 接口編程已成為主流,尤其在 Spring 中運(yùn)用 MyBatis 時(shí),Mapper 接口的使用就更為簡單,所以本教程使用 Mapper 接口的方式討論 MyBatis。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清