`

mybatis一条sql处理排序问题

阅读更多

插入序号及更新、删除调整序号,保证数值是连续的 实现原理

insert(查询当前主题下的最大值,如果没有就直接添加,如果有,
就比较,如果当前大,直接插入(保证是连续的);如果当前小,就重新进行排序 大于等于的 进行加一 ,为当前腾一个位置
注释:如果:当前条件下的表中有数据 进入 逻辑A, 
            否则 : 设置当前domain的序号为1 ,插入数据(当前domain中的序号不一定是1)
           
            逻辑A:
                1: 获取当前条件下表中的最大的序号 赋给: @ROLRATE
                2: 如果: 表中的最大序号 小于 当前domain中的序号,直接插入到最后一行使序号为     @ROLRATE+1
                              否则: 使表中所有大于等于 当前domain中的序号的记录的序号加 1 ,再插入当前domain.
if (select count(SBJCOD) from XXX where SBJCOD=#sbjcod:char# ) >= 1
begin
    declare @ROLRATE int
    set @ROLRATE =( select max(ROLRATE) from XXX where SBJCOD=#sbjcod:char# )  
    if @ROLRATE <![CDATA[ < ]]>#rolrate:int#
       begin
           insert into XXX (SBJCOD, ROLCOD, ROLNAM ,ROLRATE, ORGLVL,ISRPTGRP) values (#sbjcod:char#, #rolcod:int#, #rolnam:varchar#,@ROLRATE+1,#orglvl:char#,#isrptgrp:char#)
       end
     else
     begin
        update XXX set ROLRATE=ROLRATE+1 where SBJCOD=#sbjcod:char# and ROLRATE >= #rolrate:int#
        insert into XXX (SBJCOD, ROLCOD, ROLNAM ,ROLRATE, ORGLVL,ISRPTGRP) values (#sbjcod:char#, #rolcod:int#, #rolnam:varchar#, #rolrate:int#,#orglvl:char#,#isrptgrp:char#)
     end
end
else
begin
    insert into XXX (SBJCOD, ROLCOD, ROLNAM ,ROLRATE, ORGLVL,ISRPTGRP) values (#sbjcod:char#, #rolcod:int#, #rolnam:varchar#, 1,#orglvl:char#,#isrptgrp:char#)
end   

update
查询当前主题下的最大值
调整,如果从小调整大了。在此区间的进行-1操作
      如果调整小了,在此区间的进行+1操作。
sql注释
            1:获取当前条件下表中的最大的序号 赋给: @ROLRATE
            2:如果:变更后的domain的序号(A) 大于变更前的序号(B),使表中所有小于等于A 且 小于B的记录的序号减1
                   如果:变更后的domain的序号 小于变更前的序号,使表中所有大于等于A 且 小于B的记录的序号加1
                   如果:变更后的domain的序号 等于变更前的序号,不进行操作。
            3:再使@ROLRATE 与 A 进行比较
                   如果 变更后的序号   大于 当前条件下最大序号,设置当前domain序号为@ROLRATE
                    否则  直接插入。
declare @ROLRATE int
set @ROLRATE =( select max(ROLRATE) from XXX where SBJCOD=#sbjcod:char# )

if #rolrate:int# > #tmprolrate:int#
begin
update XXX set ROLRATE=ROLRATE-1 where SBJCOD=#sbjcod:char#  and <![CDATA[ ROLRATE <= #rolrate:int# and ROLRATE > #tmprolrate:int# ]]>
end

if #rolrate:int# <![CDATA[ < ]]>  #tmprolrate:int#
begin
update XXX set ROLRATE=ROLRATE+1 where SBJCOD=#sbjcod:char#  and <![CDATA[ ROLRATE >= #rolrate:int# and ROLRATE < #tmprolrate:int# ]]>
end

//调整过后,再处理当前值和  最大值的关系(保证最大值是连续的**********)
if @ROLRATE <![CDATA[ < ]]>#rolrate:int#
begin
    update XXX set SBJCOD=#sbjcod:char# , ROLCOD=#rolcod:int# , ROLNAM=#rolnam:varchar# , ROLRATE=@ROLRATE  ,ORGLVL=#orglvl:char#,ISRPTGRP=#isrptgrp:char# where SBJCOD=#sbjcod:char# and ROLCOD=#rolcod:int#
end
else
begin
    update XXX set SBJCOD=#sbjcod:char# , ROLCOD=#rolcod:int# , ROLNAM=#rolnam:varchar# , ROLRATE=#rolrate:int# ,ORGLVL=#orglvl:char#,ISRPTGRP=#isrptgrp:char# where SBJCOD=#sbjcod:char# and ROLCOD=#rolcod:int#
end


删除操作
sql 注释
             1: 删除当前domain ,
             2: 更新表中序号大于当前domain序号的记录(CTSQN-1) 
delete from XXX where SBJCOD=#sbjcod:char# and ANLCOD=#anlcod:varchar# and COLCOD=#colcod:varchar# and CFGBSL=#cfgbsl:char#
update XXX set CTSQN=CTSQN-1 where SBJCOD=#sbjcod:char# and ANLCOD=#anlcod:varchar#  and CFGBSL=#cfgbsl:char# and CTSQN > #ctsqn:int#

 

 

备注:

1:设置方式   

DECLARE @dim_val_cnt INT
SELECT @dim_val_cnt = COUNT(1) from XX

2:比较

IF (@dim_val_cnt = 0)

begin 

end

else if ()

else if ()

else

 

分享到:
评论

相关推荐

    mybatis自动sql生成插件源码

    MyBatis是一款流行的Java持久层框架,用于简化数据库操作,其特点是将SQL语句与Java代码分离,使得SQL和业务逻辑更加清晰。本项目提供的"mybatis自动sql生成插件源码"则进一步提升了开发效率,通过拦截器...

    SpringMVC+Mybatis实现的SqlServer整合逆向工程Example类分页带条件数据查询

    【SpringMVC+Mybatis与SqlServer整合实现分页条件查询】\n\n在SpringMVC和Mybatis框架中,结合SqlServer数据库进行数据查询时,往往需要处理大量的数据,此时分页查询显得尤为重要。本篇文章将详细讲解如何在Sql ...

    数据库随机查询代码

    这条SQL语句获取了`people4`表中的第一条随机记录的`Cname`字段。 #### 四、注意事项 1. **性能问题**:频繁使用随机查询可能会影响数据库性能,尤其是在大数据量的情况下。 2. **结果重复性**:由于随机排序的...

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

    Oracle数据库在处理“取表TOP 10条数据”这类需求时,与SQL Server或MySQL等其他数据库系统有所不同。在Oracle中,没有直接的`TOP`关键字,而是使用`ROWNUM`来限制返回的行数。本文将详细介绍如何在Oracle数据库中...

    Java的MyBatis框架中Mapper映射配置的使用及原理解析

    4. `insert`:`insert`方法用于插入一条新记录。在提供的例子中,`insert`方法被用来创建一个新的用户,并将信息保存到数据库。 5. `insertSelective`:这个方法类似于`insert`,但它只更新设置了值的字段,避免了...

    mybatis代码生成工具

    映射文件(Mapping)包含具体的SQL语句,每个方法对应一条SQL。在XML文件中,你可以看到如何通过MyBatis的语法来定义动态SQL,如条件查询、排序、分页等。这些SQL语句在运行时会根据传递的参数动态生成,提供了很高...

    Mybatis框架 mapper.xml文件中parameterType传递参数常用的几种方式.pdf

    在Mybatis排序时,使用#{param}的方式进行动态排序,而不是${param},因为在排序字段上使用$容易导致SQL注入。 综上所述,在实际开发中,为了保证SQL的安全性,推荐使用#{}进行参数绑定。而在某些需要直接传递...

    springBoot+mybatis集成插件pageHelper

    在Java开发领域,Spring Boot和MyBatis是两个非常受欢迎的框架,它们分别用于简化Spring应用的初始化和配置,以及提供高效、灵活的SQL映射框架。PageHelper是MyBatis的一个分页插件,它使得在进行数据查询时能够方便...

    SpringMVC+easyui+mybatis分页功能

    **MyBatis** 是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。在分页功能中,MyBatis允许开发者编写自定义的SQL查询,以便获取特定范围的数据。通过结合MyBatis的动态SQL和ResultMap,可以方便地从...

    mybatis生成工具2

    MyBatis是一个流行的Java持久层框架,它简化了数据库与Java应用程序之间的交互,特别是通过它的映射语句和SQL动态生成能力。"mybatis生成工具2"是针对MyBatis框架的一个实用工具,旨在帮助开发者自动生成一些常见的...

    spring mvc mybatis extjs 3.4 权限管理

    MyBatis是一个支持普通SQL查询、存储过程以及高级映射的优秀持久层框架。它消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索,MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs...

    013-MyBatis分页插件-PageHelper1

    2. **配置文件**:在项目中,需要配置Spring的`spring-config.xml`、SpringMVC的`springmvc-config.xml`以及处理中文乱码问题。 **三、使用PageHelper进行分页查询** 1. **测试功能**:在业务逻辑中,通过...

    mybatis_spring

    MyBatis 分页插件(PageHelper)是 MyBatis 的一个扩展,它在 SQL 执行时自动添加分页语句,支持多种数据库,包括 MySQL、Oracle、SQLServer 等。该插件通过拦截器机制,动态地在 SQL 语句后面添加分页相关的条件,...

    好用的JAVA WEB分页中间件,比mybatis内置的分页好用.zip

    2. **灵活性**:支持多种排序方式,包括字段排序和自定义SQL排序。 3. **高性能**:通过动态SQL,PageHelper在数据库层面进行分页,避免了全表扫描,降低了服务器负载。 4. **兼容性**:与MyBatis无缝集成,同时也...

    011 springboot整合mybatis-plus 首页加载热商品food评分前8的食物

    - 利用Mybatis-Plus的OrderDesc或OrderAsc对查询结果进行排序,这里是按照评分降序排列。 - 分页查询功能,可以通过Page对象实现,获取数据的同时获取总条数,便于前端展示。 3. **Redis缓存**: - 引入Redis的...

    允许完全摆脱Mapper的mybatis-plus体验!可以使用类似“工具类”这样的静态函数进行数据库操作

    例如,我们可以使用BaseMapper的static方法`insert`来插入一条数据: ```java User user = new User(); // 设置user对象属性... User.insert(user); ``` 或者使用`selectById`来根据主键查询: ```java User user...

    multipleselect:java结合mybatis-plus实现非手写sql多表查询

    多重选择 java mybatis实现简单多表通用查询 ...找第一张表注解为TableId(mybatis-plus注解)的属性名,到每二张表查找同样的属性名,如果没找到,反过来找,如果还没找到,挨个属性找。 ,实现关联的条

    Mybatis分页插件PageHelper5.0jar包

    Mybatis分页插件PageHelper是Java开发中广泛使用的数据库分页工具,它与Mybatis框架无缝...通过使用PageHelper,开发者可以专注于业务逻辑的实现,而无需担心分页这一常见但繁琐的问题,从而提高开发效率和代码质量。

    MyBatis拦截器实现分页功能的实现方法

    总结来说,MyBatis拦截器实现分页功能需要定义一个分页对象来存储分页参数,然后通过实现Interceptor接口并重写intercept方法来修改原始SQL语句,最后在MyBatis配置中正确注册拦截器。这样就可以在不侵入原有业务...

    SQL分页加载数据demo

    在数据库管理中,SQL(Structured Query Language)是用于管理和处理数据的标准语言。当我们需要从大量数据中检索特定部分时,特别是在网页或者应用中显示数据,分页加载是一种非常实用的技术。"SQL分页加载数据"是...

Global site tag (gtag.js) - Google Analytics