第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

MyBatis script

1. 前言

前面一系列動態(tài) SQL 小節(jié)的學(xué)習(xí)中,我們都是在 xml 中書寫 SQL 的。注解無法發(fā)揮 MyBatis 動態(tài) SQL 的真正威力,但是 if、choose、bind、where 等標(biāo)簽還是可以在注解中使用的。

MyBatis 官方文檔對于此的介紹只有寥寥一句話和一個簡單的例子,在實際的應(yīng)用中也幾乎沒有人這樣去做,因為它確實不太美觀,但是考慮到這個知識點并不復(fù)雜,也極有可能成為一個刁鉆的面試點,我們還是一起來學(xué)習(xí)一下。

2. 實例

在注解中使用動態(tài) SQL 其實十分簡單,只需在動態(tài) SQL 語句的外面包上一層script標(biāo)簽即可。如下:

@Select({"<script>",
   "SELECT * FROM imooc_user",
   "    WHERE",
   "    <choose>",
   "      <when test='id != null'>",
   "        id = #{id}",
   "      </when>",
   "      <when test='username != null'>",
   "        username = #{username}",
   "      </when>",
   "      <otherwise>",
   "        1 = 0",
   "      </otherwise>",
   "    </choose>",
   "</script>"})
User selectUserByIdOrName(@Param("id") Integer id, @Param("username") String username);

在 Select 注解中,我們沒有直接寫入 SQL,而是在最外層套上一個 script 標(biāo)簽,這里考慮到 SQL 語句的美觀性,我們把語句分成了字符串?dāng)?shù)組來書寫,MyBatis 會自動將其拼接成一個完整的語句。

3. 實踐

3.1 例1. 查詢小寫名稱客戶

請使用 MyBatis 完成對 imooc_user 表查詢小寫名稱客戶的功能,將名稱小寫后再進行查詢。

分析:

使用本小節(jié)所學(xué)的知識,直接在 UserMapper.java 接口上添加方法,并使用 Select 注解即可。

步驟:

在 UserMapper.java 中添加上對應(yīng)的接口方法,方法接受 username 一個參數(shù)。

package com.imooc.mybatis.mapper;

import org.apache.ibatis.annotations.Mapper;
import com.imooc.mybatis.model.User;

@Mapper
public interface UserMapper {
  @Select({
    "<script>",
    "<bind name=\"lowercaseName\" value=\"username.toLowercase\"/>",
    "SELECT * FROM imooc_user",
    "WHERE username = #{lowercaseName}",
    "</script>"
  })
  User selectUsernameLowercase(String username);
}

結(jié)果:

通過如下代碼,我們運行 selectUsernameLowercase 這個方法。

UserMapper userMapper = session.getMapper(UserMapper.class);
User pedro = userMapper.selectUsernameLowercase("PEDRO");
System.out.println(pedro);

成功后,結(jié)果為:

User{id=2, username='pedro', age=24, score=200}

4. 小結(jié)

  • 通過 scirpt 標(biāo)簽,我們可以在注解中使用動態(tài) SQL 的諸多標(biāo)簽,極大地增強了注解的能力,但相對于 xml 這種更為優(yōu)雅的方式,無疑是后者更佳,因此我們我們強力推薦你使用 xml 的方式。