mybatis 之 select 標簽使用


  • select 標簽屬性。
  • select 標簽的簡單使用。
  • resultType 返回值類型。
  • 多參數傳遞。

開發中對數據庫的操作,基本上都是查詢操作遠多於其他幾種操作。因此 select 標簽的使用也是最多的。

下面列出了 select 標簽支持的屬性:

 1  <select
 2   id=""
 3   parameterType=""
 4   parameterMap=""
 5   resultType=""
 6   resultMap=""
 7   flushCache=""
 8   useCache=""
 9   timeout=""
10   fetchSize=""
11   statementType=""
12   resultSetType="">    
13 </select>
  • id 命名空間的唯一標識符,一般是 dao 中對應的方法名。
  • parameterType 參數類型,可選屬性。MyBatis 可以通過 TypeHandler 推斷出具體傳入語句的參數,默認值為 unset。
  • resultType 期望返回的數據類型的類的全限定名。
  • resultMap 結果集映射,不可以和 resultType 同時使用。一般如果返回數據類型是常用的類型,比如 String Map List 的時候,可以使用 resultType。如果返回的是簡單 POJO 類的時候,也可以直接使用 resultType,如果是復雜的映射或者連級查詢的時候就需要使用 resultMap。
  • flushCache 將其設置為 true,任何時候只要語句被調用,都會導致本地緩存和二級緩存都會被清空,默認值:false。
  • useCache 將其設置為 true,將會導致本條語句的結果被二級緩存,默認值:對 select 元素為 true。

 

簡單查詢

下面是一個簡單的查詢,查詢 user_info 表里的所有數據,並返回 UserInfo 類型的 List 集合。

 1 //POJO 類定義
 2 public class UserInfo {
 3     Integer user_id;
 4     String userName;
 5     String password;
 6     Integer age;
 7     String address;
 8   
 9   //構造器和 get/set 方法此次省略。
10 }
11 
12 //mapper xml 配置
13 <select id="queryUserAll" resultType="util.UserInfo">
14   SELECT * FROM USER_INFO
15 </select>
16 
17 //dao 接口方法定義
18 public interface IResmDao { 
19   List<UserInfo> queryUserAll();
20 }
21 
22 //test
23 IResmDao iResmDao = session.getMapper(IResmDao.class);
24 List<UserInfo> userInfos = iResmDao.queryUserAll();

 

resultType 返回值類型

當我們使用 select 標簽查詢的時候,根據業務的不同,會對返回的數據類型有不同的要求。

比如返回值可能是基本數據類型,String,Integer,POJO,List,Map 等。又應該怎樣使用呢?

 

返回基本數據類型

以基本數據類型 int 為例。

dao 層接口定義:

1 int queryUserAgeById(int userId);

 

mapper.xml 配置文件:

1 <select id="queryUserAgeById" resultType="int">
2     select age from user_info where user_id = #{userId}
3 </select>

 

返回 List 集合

dao 層接口定義:

1 List<UserInfo> queryUserListByIds(List<Integer> ids);

 

mapper.xml 配置文件:

1 <select id="queryUserListByIds" resultType="util.UserInfo">
2     <if test="list != null and list.size > 0">
3         select * from user_info where user_id in
4         <foreach collection="list" index="index" item="item" open="(" close=")" separator=",">
5             #{item}
6         </foreach>
7     </if>
8 </select>

 

返回 Map 集合

dao 層接口定義:

注解 @MapKey("user_id") 用於指定 Map 的 key,也是 POJO 定義的字段。例子里的 value 是封裝的 POJO 類。

1 @MapKey("user_id")
2 Map<Integer,UserInfo> queryUserMapByIds(List<Integer> ids);

 

mapper.xml 配置文件:

<select id="queryUserMapByIds" resultType="util.UserInfo">
    select * from user_info where user_id in
    <foreach collection="list" index="index" item="item" open="(" close=")" separator=",">
        #{item}
    </foreach>
</select>

 

返回實體字段與數據庫字段不一致的 Map 集合

dao 層接口定義:

注解 @MapKey("user_id") 用於指定 Map 的 key,是 POJO 字段屬性。例子里的 value 是封裝的 POJO 類。

1 @MapKey("user_id")
2 Map<Integer,UserInfo> queryAllMap();

 

 

mapper.xml

 1  <resultMap id="userInfoEntry" type="util.UserInfo">
 2         <result column="id" property="user_id"/>
 3         <result column="username" property="userName"/>
 4         <result column="password" property="password"/>
 5         <result column="age" property="age"/>
 6         <result column="address" property="address"/>
 7     </resultMap>
 8 
 9     <select id="queryAllMap" resultMap="userInfoEntry">
10         select * from USER_INFO
11     </select>

 

返回 POJO 類:

dao 層接口定義:

1 UserInfo queryPOJOById(int userId);

 

mapper.xml 配置文件:

1 <select id="queryPOJOById" resultType="util.UserInfo">
2     select * from user_info where user_id = #{userId}
3 </select>

 

多個參數傳遞的情況

使用注解

dao 層接口定義:

1 List<UserInfo> queryUserByMultPara(@Param("age") Integer age, @Param("userName") String userName, @Param("address") String address);

mapper.xml 配置文件:

1 <select id="queryUserByMultPara" resultType="util.UserInfo">
2     select * from user_info
3     where age = #{age} and username = #{userName} and address = #{address}
4 </select>

 

使用 Map 傳參

使用 Map 傳參,value 值就是參數值。

dao 層接口定義:

1 List<UserInfo> queryUserByMultMap(Map<String,Object> param);

 

mapper.xml 配置文件:

#{age} 中的 age 即 Map 中的 key,#{age} 可以直接獲取 Map 的 value。

1 <select id="queryUserByMultMap" resultType="util.UserInfo">
2     select * from user_info
3     where age = #{age} and username = #{userName} and address = #{address}
4 </select>

 

使用 POJO 來傳參

dao 層接口定義:

1 List<UserInfo> queryUserByMultPOJO(UserInfo userInfo);

 

mapper.xml 配置文件:

#{age} 其實就是 UserInfo 的屬性。
1 <select id="queryUserByMultPOJO" resultType="util.UserInfo">
2     select * from user_info
3     where age = #{age} and username = #{userName} and address = #{address}
4 </select>

 

參考:

https://blog.csdn.net/moakun/article/details/80057181

https://www.w3cschool.cn/mybatis/f4uw1ilx.html

https://blog.csdn.net/codejas/article/details/79520246

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM