Mybatis的结合oracle的2个困扰
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis的结合oracle的2个困扰相关的知识,希望对你有一定的参考价值。
第一问题是在oracle存储类型为 char 类型时,为什么在编辑mybatis对应的mapper.xml中这样写:
<select id="selectMsgById" parameterType="String" resultType="msg">
select * from MTP_MSG_TAB where MSG_ID=#msg_id
</select>
然后在接口中传入一个java类型中的String类型的值afa,我在数据库有条字段也为afa
但是却无论如何返回null值,意思是没有满足where语句的等于条件。那么请问orcale中char类型的jdbcType难道不合java中String类型对应么。另外如果直接写语句:
<select id="selectMsgById" parameterType="String" resultType="msg">
select * from MTP_MSG_TAB where MSG_ID=‘afa'
</select>
这样子是可以查出来的。
第二个问题是用mybatis如何在orcale中调用procedure。
有人说 是这样定义xml:
<select id="proHello" statementType="CALLABLE">
<![CDATA[
call pro_hello (#p_user_name,mode=IN,jdbcType=VARCHAR,#result,mode=OUT,jdbcType=VARCHAR)
]]>
</select>
请问那个CDATA是干啥用的。也有人这样写:
<select id="getGroupNum" statementType="CALLABLE" parameterType="com.guorui.model.ParamSPC">
call GYL_COMMON.GETGROUPNUM(
#IN_PARAMETERID,jdbcType=VARCHAR,mode=IN,
#IN_STEELID,jdbcType=VARCHAR,mode=IN,null,null,null,
#OUT_GN,jdbcType=INTEGER,mode=OUT,
#RST,jdbcType=CURSOR,mode=OUT,resultMap=BaseResultMap2,javaType=java.sql.ResultSet)
</select>
很遗憾的是mybatis提供的dtd中并没有在#内的关于jdbcType的提示。
第二个问题,直接使用包含就ok了。 参考技术A 建议你把mybatis转换后的sql语句打印出来看看吧,一看就知道了追问
你知道怎么转换么?
Oracle结合Mybatis实现取表TOP 10
之前一直使用mysql和informix数据库,查表中前10条数据十分简单:
最原始版本:
select top * from student
当然,我们还可以写的复杂一点,比如外加一些查询条件?
比如查询前10条成绩大于80分的学生信息
添加了where查询条件的版本:
select top * from table where score > 80
但是!!oracle中没有top啊!!!!那么该如何实现呢?
嗯,可以用rownum!
oracle中原始版本
select * from student where rownum < 10
上面这个好像也没有复杂的地方。。但是问题来了,如果我们还希望加上分数大于80呢?
对于我这个oracle初学者来说,真的是费力。在这里就直接贴出来了,希望可以让一些人少费一些力!
oracle添加了where查询条件的版本
select * from( select rownum rn,A.* from student where score > 80) where rn < 10
简单分析一下上面的代码。实际上是先通过内嵌的sql语句查询出分数大于80的数据,再选择内嵌sql查询结果中的前10条数据
最后附上mybatis代码?
<select id="selectStudent" parameterType="hashmap" resultMap="BaseResultMap"> select * from ( select rownum rn, A.* from student A where STATUS = ‘99‘ and score <![CDATA[>]]> #{scores,jdbcType=INTEGER}) where rn <![CDATA[<=]]> #{number,jdbcType=INTEGER} </select>
上面的scores和number均为变量
碎碎念一般的写了这么点。希望能帮助一下遇到和我相同问题的朋友。
以上是关于Mybatis的结合oracle的2个困扰的主要内容,如果未能解决你的问题,请参考以下文章