源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Oracle结合Mybatis实现取表TOP 10条数据

  • 时间:2021-05-07 12:04 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要: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均为变量 [b]ps:mybatis取Oracle序列,值相同问题处理[/b]
<select id="getCode" resultType="java.lang.String">
  select 'TRD'||to_char(sysdate,'yyyymmdd')||lpad(to_char(SQ_ORD_PURCHASE_ID.nextval), 5, '0') code from dual
</select>
上述mybatis代码在调用是总是获取到同一个序列的值,查询相关资料得知是mybatis的缓存问题: 加上[code]useCache="false" flushCache="false" [/code]属性即可:
<select id="getCode" resultType="java.lang.String" useCache="false" flushCache="false">
select 'TRD'||to_char(sysdate,'yyyymmdd')||lpad(to_char(SQ_ORD_PURCHASE_ID.nextval), 5, '0') code from dual
</select>
[b]总结[/b] 以上所述是小编给大家介绍的Oracle结合Mybatis实现取表TOP 10条数据,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程素材网网站的支持!
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部