好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

之前一直使用mysql和informix数据库,查表中前10条数据十分简单:

最原始版本:

?

1

select top * from student


当然,我们还可以写的复杂一点,比如外加一些查询条件?

比如查询前10条成绩大于80分的学生信息 

添加了where查询条件的版本:

?

1

select top * from table where score > 80

但是!!oracle中没有top啊!!!!那么该如何实现呢?

嗯,可以用rownum!

oracle中原始版本

?

1

select * from student where rownum < 10

上面这个好像也没有复杂的地方。。但是问题来了,如果我们还希望加上分数大于80呢?

对于我这个oracle初学者来说,真的是费力。在这里就直接贴出来了,希望可以让一些人少费一些力! 

oracle添加了where查询条件的版本

?

1

2

3

select * from (

   select rownum rn,A.* from student where score > 80)

where rn < 10

简单分析一下上面的代码。实际上是先通过内嵌的sql语句查询出分数大于80的数据,再选择内嵌sql查询结果中的前10条数据 

最后附上mybatis代码?

?

1

2

3

4

5

6

7

8

<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序列,值相同问题处理

?

1

2

3

<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" 属性即可:

?

1

2

3

<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条数据,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

原文链接:http://www.cnblogs.com/cfyrwang/archive/2017/11/02/7775142.html

查看更多关于Oracle结合Mybatis实现取表TOP 10条数据的详细内容...

  阅读:33次