2014-09-29 53 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

相关问题