Ibatis 问题,各位大侠快快相助。多谢。

f147277262 2012-06-04 04:53:29
在ibatis的sqlMap.xml文件里是可以配置返回类型的,通常是resultMap或者resultClass.
因为有特殊需求要求达到配置文件里配置是个自定类型,而在特殊情况下要求返回类型为int(需求总比较怪异)

所以请教各位大侠有没有方法在代码里改配置文件里的返回类型。


...全文
246 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
f147277262 2012-07-03
  • 打赏
  • 举报
回复
需求是为了抽取公共的分页处理,让业务开发人员不写分页相关代码。
比如一个页面查询,业务开发员只写一个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就行了。
bbb332 2012-06-05
  • 打赏
  • 举报
回复

<typeAlias alias="yearStatModel" type="com.xx.ydjw.statistics.model.YearStatModel" />
<select id="queryYearStatCount" parameterClass="yearStatModel" resultClass="Integer">
jackson_fighting 2012-06-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

引用 10 楼 的回复:

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


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


<resultMap class="yourobject" id="mapid">
<result property="id" column="channelId" />
</resultMap>

这样到DAO层 queryForObject或者 queryForlist
取对象属性即可
ylovep 2012-06-05
  • 打赏
  • 举报
回复

<?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>
  • 打赏
  • 举报
回复
<select id="****" resultClass="int" parameterClass="string">
</select>
这个是我们项目中用的 你要返回int 那么你就需要在你的dao中装箱为Integer既可。
黑色的熊猫 2012-06-05
  • 打赏
  • 举报
回复
没懂需求。既然是做分页那是返回(总记录数+结果集)怎么是int啊。返回的结果要不是String(json)或者是map<String,Object>。除非你是做判断是否查询有记录数。
f147277262 2012-06-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

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

我现在必须用ibatis

需求是配置文件里配置是个自定类型(这个不能动),而要求能成功返回的int类型的数据(需求总比较怪异)

所以请教各位大侠有没有方法在后台代码里改配置文件里的返回类型。
小小_happly 2012-06-05
  • 打赏
  • 举报
回复
没懂你的需求,我想知道“一个查询记录”是什么意思,是一条记录,还是记录数,
yjflinchong 2012-06-04
  • 打赏
  • 举报
回复
我不是很清楚 你的需求。 我现在用mybatis. 框架是我整的。 什么类型都可以用呀。
f147277262 2012-06-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

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

多谢答复
但问题是需要配置文件里是resultMap。
返回结果要为int。
jackson_fighting 2012-06-04
  • 打赏
  • 举报
回复
resultClass = "java.lang.Integer"
DAO层 queryForObject()
强制转换一下 即可
huage 2012-06-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 1 楼 的回复:
好像有resultType的
LZ可以试试
这是mybatis resultType="int" 楼主用的是ibatis吧 resultClass="java.lang.Integer"
[/Quote]
+++
f147277262 2012-06-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 1 楼 的回复:
好像有resultType的
LZ可以试试
这是mybatis resultType="int" 楼主用的是ibatis吧 resultClass="java.lang.Integer"
[/Quote]

我用的确实是ibatis 。 不是mybatis
我是看到ibatis的requestCope对象里有getStatement().getResultSetType() 方法。
但没得设置方法。
黑色的熊猫 2012-06-04
  • 打赏
  • 举报
回复
<typeAlias alias="int" type="java.lang.Integer"/> 试下我也不知道我现在在用mybatis
f147277262 2012-06-04
  • 打赏
  • 举报
回复
因为要做SQL分页,首先做要统计出记录数后再用SQL精确分页
所以第一步查出来,所的记录数。返回Int类型。
第二步查出需要的记录。返回自定义对象 。

而这两步操作要求只能在配置文件里写一个SQL。
所以会先从配置文件里读出SQL来,拼接好了再执行(一个查询记录数,一个查询记录)。
因为只能写一个SQL,这个返回类型就搞不定了。
黑色的熊猫 2012-06-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
好像有resultType的
LZ可以试试
[/Quote]这是mybatis resultType="int" 楼主用的是ibatis吧 resultClass="java.lang.Integer"
zc499498753 2012-06-04
  • 打赏
  • 举报
回复
设置resultClass为Integer就好了啊
sffx123 2012-06-04
  • 打赏
  • 举报
回复
没用过,帮顶,不过为啥一定要返回int类型呢?用之前转换一下行不?
f147277262 2012-06-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

好像有resultType的
LZ可以试试
[/Quote]

我之前看到了这个方法,参数是个int类型的。
我试试看。 多谢回复。

另外:我已经写类继承了ibatis的SqlExecutor。
我想应该是可以在RequestScope 对象里找这个东西。 还在找。。。
jay_0215 2012-06-04
  • 打赏
  • 举报
回复
好像有resultType的
LZ可以试试

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧