欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-25 12:12:54
之前一直使用mysql和informix数据库,查表中前10条数据十分简单: 最原始版本: select top * from student 当然,...

之前一直使用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均为变量

ps:mybatis取oracle序列,值相同问题处理

<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的缓存问题:

加上usecache="false" flushcache="false" 属性即可:

<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>

总结

以上所述是小编给大家介绍的oracle结合mybatis实现取表top 10条数据,希望对大家有所帮助