Oracle学习一

最近自己在做一个项目时,该项目使用了SpringMVC+Mybatis框架的整合。数据库使用的是Oracle数据库,在写分页功能时发现Oracle数据库的分页语句和MySql有很大的不同。经过查找资料后,对分页的写法进行了一下抽取,使该分页语句能够较好的和Mybatis结合,不足之处还请多多指教,当然有更好的分页思想希望能和大家交流。

需求:我需要从sysuser 表中分页查询所有的用户。在user表中有如下字段:id(主键),groupId(用户类型),username(用户名称),用户所属单位名称需要从其他表中获取获取方法参照上一篇(nvl和decode函数的使用http://blog.csdn.net/iammrli/article/details/52769564)

分析:可能分页查询所有用户也可能是带有限定条件的查询用户信息。也可能会关联其他表查询相关的用户关联信息。

查询所有用户信息语句:select  *  from  t_user

假设查询第10条到20条数据 

select  t.*  from  t_user t  where rownum <= 20 由于不能使用rownum >= 1来进行限定所以需要另求他法。

可以从上面rownum<=20的结果集中选取后10条:select  u.*  from (select  t.* ,rownum pagenum from  t_user t  where rownum <= 20)u where u.pagenum > 10

上面将rownum抽取成结果集的一个列属性,外层查询就可以使用改属性进行查询rownum大于10的结果。

基于上述思想,我把结果封装,然后从结果集中查询指定条数。于是有:

select * from (select page_1.* ,rownum pagenum from (select u.username,
       
             u.groupid,
       
            decode(groupid,
             
    ' 1',
             
      (select mc from userjd jd where jd.id = u.sysid),
             
      '2',
             
     (select mc from userjd jd where jd.id = u.sysid),
             
     '3',(select mc from useryy yy where yy.id = u.sysid),
             
     '4',(select mc from usergys gys where gys.id = u.sysid)
             
       )
 
      from sysuser u where u.groupid = '3')page_1 where rownum <=30)page_2 where pagenum >=10 ;

如果进行抽取就可以将上述语句写成

select * from (select page_1.* ,rownum pagenum from (

//这里写查询语句,外层查询进行分页

select * from tablename where 查询条件

)page_1 where rownum <=30)page_2 where pagenum >=10 ;

这样我们就可以将上述语句中的30和10进行抽取成变量,放入一个查询条件的封装类中。假设该类为: PageQuery ,其中该类中有属性PageQuery_start(查询的起始位置)PageQuery_end(查询的结束位置)

那么Mybatis的mapper.xml中就可以这样组织:

<!-- 用户查询 -->
<select id="findSysuserList" parameterType="yycg.base.pojo.vo.SysuserQueryVo"
resultType="yycg.base.pojo.vo.SysuserCustom">
<if test="pageQuery!=null">
select page_2.*
from (select page_1.*, rownum page_num
from (
</if>

(select u.username,
       
             u.groupid,
       
            decode(groupid,
             
    ' 1',
             
      (select mc from userjd jd where jd.id = u.sysid),
             
      '2',
             
     (select mc from userjd jd where jd.id = u.sysid),
             
     '3',(select mc from useryy yy where yy.id = u.sysid),
             
     '4',(select mc from usergys gys where gys.id = u.sysid)
             
       )
 
       from sysuser u where u.groupid = '3'

<if test="pageQuery!=null">
) page_1
        <![CDATA[
         where rownum <= ${pageQuery.PageQuery_end}) page_2
 where page_2.page_num >= ${pageQuery.PageQuery_start}
 ]]>
</if>
</select>





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle 是一种关系型数据库管理系统,常被用于企业级应用的开发和数据管理。学习Oracle需要掌握数据库的基本概念和SQL语言,同时需要了解Oracle的特有功能和特点。 首先,对于初学者来说,可以通过查阅Oracle官方文档和教程来了解基本的数据库理论以及Oracle的安装和配置。官方文档提供了详细的说明和指导,包括数据库的架构、对象、数据类型和索引等内容。 其次,学习SQL语言是掌握Oracle的关键。SQL是结构化查询语言,用于对数据库进行增删改查操作。可以通过在线教程、书籍或者学习网站来学习SQL的基本语法和常用命令,例如SELECT、INSERT、UPDATE和DELETE等。 除了SQL,还需要学习PL/SQL(Oracle的过程式语言)。PL/SQL是Oracle数据库的编程语言,可以用于编写存储过程、触发器和函数等。学习PL/SQL可以通过官方文档和相关教程来深入理解。 另外,参加Oracle的培训课程也是一个不错的选择。Oracle官方和一些培训机构提供了各种级别的培训课程,从入门到专业水平。培训课程可以帮助学习者系统地了解Oracle的各个方面,并提供实际操作的机会。 最后,通过实践来巩固所学的知识。可以使用Oracle提供的演示数据库,或者自己搭建测试环境来练习SQL语句的编写和数据库管理的操作。 总之,学习Oracle需要系统地学习数据库理论、SQL语言和PL/SQL编程,可以通过官方文档、教程、培训课程和实践来提高自己的水平。不断的学习和实践将帮助您掌握Oracle的技术,并在企业级应用开发和数据管理中获得更好的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值