在ibatis的sqlMap.xml文件里是可以配置返回类型的,通常是resultMap或者resultClass.
因为有特殊需求要求达到配置文件里配置是个自定类型,而在特殊情况下要求返回类型为int(需求总比较怪异)所以请教各位大侠有没有方法在代码里改配置文件里的返回类型。

解决方案 »

  1.   

    好像有resultType的
    LZ可以试试
      

  2.   


    我之前看到了这个方法,参数是个int类型的。
    我试试看。 多谢回复。另外:我已经写类继承了ibatis的SqlExecutor。
    我想应该是可以在RequestScope 对象里找这个东西。 还在找
      

  3.   

    设置resultClass为Integer就好了啊
      

  4.   

    这是mybatis  resultType="int"  楼主用的是ibatis吧 resultClass="java.lang.Integer"
      

  5.   

     因为要做SQL分页,首先做要统计出记录数后再用SQL精确分页
     所以第一步查出来,所的记录数。返回Int类型。
     第二步查出需要的记录。返回自定义对象 。而这两步操作要求只能在配置文件里写一个SQL。
    所以会先从配置文件里读出SQL来,拼接好了再执行(一个查询记录数,一个查询记录)。
    因为只能写一个SQL,这个返回类型就搞不定了。
      

  6.   

    <typeAlias alias="int" type="java.lang.Integer"/> 试下我也不知道我现在在用mybatis
      

  7.   


    我用的确实是ibatis  。  不是mybatis
    我是看到ibatis的requestCope对象里有getStatement().getResultSetType() 方法。
    但没得设置方法。
      

  8.   

    resultClass = "java.lang.Integer"
    DAO层 queryForObject()
    强制转换一下 即可
      

  9.   


    多谢答复
    但问题是需要配置文件里是resultMap。
    返回结果要为int。
      

  10.   

    我不是很清楚 你的需求。 我现在用mybatis. 框架是我整的。 什么类型都可以用呀。 
      

  11.   


    我现在必须用ibatis需求是配置文件里配置是个自定类型(这个不能动),而要求能成功返回的int类型的数据(需求总比较怪异)所以请教各位大侠有没有方法在后台代码里改配置文件里的返回类型。
      

  12.   

    没懂需求。既然是做分页那是返回(总记录数+结果集)怎么是int啊。返回的结果要不是String(json)或者是map<String,Object>。除非你是做判断是否查询有记录数。
      

  13.   

    <select id="****" resultClass="int" parameterClass="string">
    </select>
    这个是我们项目中用的 你要返回int 那么你就需要在你的dao中装箱为Integer既可。
      

  14.   


    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE sqlMap      
        PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"      
        "http://ibatis.apache.org/dtd/sql-map-2.dtd">
    <sqlMap namespace="Area">
    <!-- 映射对应实体 -->
    <typeAlias alias="area" type="com.pojo.Area"/>
    <!-- 配置实体属性 --> 
    <resultMap class="area" id="areafoResult">
    <result property="area_id" column="AREA_ID" javaType="java.lang.Integer" jdbcType="int"/>
    <result property="area_name" column="AREA_NAME" javaType="java.lang.String" jdbcType="nvarchar"/>
    </resultMap>

    <resultMap class="area" id="areafoResults">
    <result property="area_id" column="AREA_ID" javaType="java.lang.Integer" jdbcType="int"/>
    <result property="area_name" column="AREA_NAME" javaType="java.lang.String" jdbcType="nvarchar"/>
    <result property="regions" column="AREA_ID" javaType="java.lang.String" jdbcType="nvarchar" select="Region.findRegionByAreaId"/>
    </resultMap>

    <!-- 查询全部 -->
    <select id="findAreaAll" resultMap="areafoResult">
    <![CDATA[SELECT * FROM POS_SN_AREA]]>
    </select>

    <!-- 查询全部数量 -->
    <select id="findAreaCount" resultClass="java.lang.Object" parameterClass="java.lang.String">
    <![CDATA[SELECT COUNT([AREA_ID]) FROM POS_SN_AREA WHERE 1=1 $value$]]>
    </select>
    <!-- 查询全部 -->
    <select id="findAreaByCondition" resultMap="areafoResult" parameterClass="com.aisino.snpos.ben.util.PageBean">
    <![CDATA[SELECT TOP $pageSize$ * FROM POS_SN_AREA WHERE [AREA_ID] NOT IN 
    (SELECT TOP (($currPage$-1)*$pageSize$) [AREA_ID] FROM POS_SN_AREA WHERE 1=1 $condition$) 
    $condition$]]>
    </select>
    <!-- 片区名称是否存在 -->
    <select id="isExistsAreaName" resultClass="java.lang.Object" parameterClass="java.lang.String">
    <![CDATA[SELECT COUNT(1) FROM POS_SN_AREA WHERE [AREA_NAME] = #value#]]>
    </select>
    <!-- 删除 -->
    <delete id="deleteAreaById" parameterClass="java.lang.String">
    <![CDATA[DELETE FROM POS_SN_AREA WHERE [AREA_ID]=#value#]]>
    </delete>
    <!-- 新增 -->
    <statement id="addArea" parameterClass="com.aisino.snpos.ben.pojo.Area" resultClass="java.lang.Object">
    <![CDATA[INSERT INTO POS_SN_AREA([AREA_NAME]) 
    VALUES(#area_name#);SELECT @@IDENTITY;]]>
    </statement>
    <!-- 修改 -->
    <update id="modifyAreaById" parameterClass="com.aisino.snpos.ben.pojo.Area">
    <![CDATA[UPDATE POS_SN_AREA SET [AREA_NAME]=#area_name# WHERE [AREA_ID]=#area_id#]]>
    </update>

    <!-- 按ID查询  -->
    <select id="findAreaByAreaId" resultMap="areafoResult" parameterClass="java.lang.String">
    <![CDATA[SELECT * FROM POS_SN_AREA WHERE [AREA_ID] = #value#]]>
    </select>
    <!-- 删除  -->
    <statement id="truncateArea">
    <![CDATA[TRUNCATE TABLE [POS_SN_AREA]]]>
    </statement>

    <!-- 按AREA_NAME查询  -->
    <select id="findAreaByAreaName" resultMap="areafoResult" parameterClass="java.lang.String">
    <![CDATA[SELECT * FROM POS_SN_AREA WHERE [AREA_NAME] = #value#]]>
    </select>
    </sqlMap>
      

  15.   

    <resultMap class="yourobject" id="mapid">
    <result property="id" column="channelId" />
    </resultMap>这样到DAO层 queryForObject或者 queryForlist
    取对象属性即可
      

  16.   


    <typeAlias alias="yearStatModel" type="com.xx.ydjw.statistics.model.YearStatModel" />
    <select id="queryYearStatCount" parameterClass="yearStatModel" resultClass="Integer">
      

  17.   

    需求是为了抽取公共的分页处理,让业务开发人员不写分页相关代码。
    比如一个页面查询,业务开发员只写一个SQL(select * from user)
    需要我们提供一个方法,接收页码,每页记录数,SQL_ID三个参数。
    1.根据SQL_ID 找到 select * from user SQL语句。
    2.在select * from user 基础上做拼接操作,使得拼接后的SQL能得能查到所有记录数。
    3.根据所有记录数,页码,每页记录数。在 select * from user 基础上做拼接操作,使得拼接后SQL能查到需要的记录。问题:
    在业务人员只写一个SQL的情况下,这个返回类型要同时能支持返回记录数和具体记录(pojo)两种类型,不好配置。解决办法:
    自己在方法里重写一个查询方法让其返回记录数。这个查询方法的返回类型就是int。
    业务人员定义的返回类型为pojo就行了。