2014-09-29 166 views
2

如何在MyBatis中返回多個select查詢?例如,我想返回20個用戶的列表,即用戶總數,例如1000.在下面的示例中,我使用SQL_CALC_FOUND_ROWS在LIMIT應用之前獲取總數,並使用FOUND_ROWS()檢索緩存的值第二個選擇查詢。如何將多個select查詢包裝到Mybatis中的一個查詢中?

<resultMap type="User" id="userResultMap"> 
    <id property="id" column="u_id" /> 
    <result property="username" column="u_username" /> 
     <result property="password" column="u_password" /> 
     <result property="email" column="u_email" /> 
</resultMap> 

<select id="get" parameterType="Integer" resultType="list" resultMap="userResultMap"> 
     SELECT    
      SQL_CALC_FOUND_ROWS 
      u.id       AS u_id, 
      u.username    AS u_username, 
      u.password    AS u_password, 
      u.email      AS u_email 
     FROM user u WHERE u.id=#{id} 
     <if test="startIndex != null and perPage != null"> 
      LIMIT #{startIndex}, #{perPage} 
     </if> 

     SELECT FOUND_ROWS(), #{startIndex}, #{perPage}; 
</select> 

我正在考慮添加另一個resultMap,並沒有找到一種方法來在Java Spring端進行多次返回。

在Java方面,它像

List<User> get(@Param("id") Integer id, @Param("startIndex") Integer startIndex, 
      @Param("perPage") Integer perPage); 
+0

這不會發生在MyBatis中。你要申請什麼邏輯你必須運行2選擇查詢? – Akhil 2014-09-29 20:29:59

+0

如果只有一次選擇就可以完成,那就好多了。在我的情況下,可以在1選擇完成嗎? – 2014-09-29 20:34:23

+0

爲什麼你不能有2個不同的 SELECT COUNT(*)USERS_COUNT FROM USER 在Java代碼中,您將獲得USERS_COUNT值。 – Akhil 2014-09-29 21:42:03

回答

-1

你必須使用2個不同的<select>標籤。 1用於計數,其他用於用戶列表。要返回的計數值,可以使用以下命令:

<select id="getUsersCount" parameterType="map" resultType="hashmap" SELECT COUNT(*) USERS_COUNT FROM USER </select>

在Java代碼中,你會得到USERS_COUNT值。

+1

>這正是我現在正在做的,它的工作原理,但我正在尋找一個優化的解決方案,其中一個查詢返回兩件事情。 - 丹尼爾邱 – jjoonathan 2016-01-29 21:22:51

+0

你有什麼進展嗎?我在這裏也遇到了同樣的問題.. https://github.com/mybatis/mybatis-3/issues/274#issuecomment-341648667 – 62mkv 2017-11-03 09:23:59

相關問題