Mybatis实现数据上移、下移、置顶与置底

database

介绍

在一些管理系统中,经常有一些需求需要对产生的列表数据进行上移、下移、置顶与置底操作,此时需要一定的SQL功底,下面介绍一下在Mybatis技术下的使用。

具体实现

数据库表

首先设计的表需要有一些要求,此处以一个菜单树为例进行说明。

创建数据库表

表名MENU_TREE,数据库采用MYSQL5.7,建表语句如下:

CREATE TABLE MENU_TREE (

SID VARCHAR(20),

CODE VARCHAR(20),

NAME VARCHAR(50),

GRADE CHAR(1),

PRENT_ID VARCHAR(20),

ORDER_VAL NUMERIC(22,0),

STATE CHAR(1),

DEL_TAG VARCHAR(1) DEFAULT "0",

CRT_OPT VARCHAR(20),

CRT_TIME TIMESTAMP,

UPD_OPT VARCHAR(20),

UPD_TIME TIMESTAMP

) ;

插入数据展示原始排序

可以任意插入数据,本例插入数据后排序如下:

业务实现

数据上移

要求将“人力资源部”放到“会员部”之前,此时需要上移“人力资源部”。

SQL实现

update MENU_TREE st set st.ORDER_VAL= 4 where st.ORDER_VAL= 3 AND prent_id="0";

update MENU_TREE st set st.ORDER_VAL= 3 where st.SID="4";

在Oracle数据库中需要增加BEGIN...END语句。

Mybatis的XML文件

<update>

update MENU_TREE st set st.ORDER_VAL=":orderVal" where st.ORDER_VAL=":orderVal"-1 AND prent_id=":prentId";

update MENU_TREE st set st.ORDER_VAL=":orderVal"-1 where st.SID=":sid";

</update>

Oracle时需要增加BEGIN...END语句(后文不再赘述)。此处 :参数,表明是外部传入的参数,这些参数是当前操作对象(“人力资源部”)的相应值(后文不再赘述)。

上移后结果

可以看到“人力资源部”移到了“会员部”前面。

数据下移

这是跟数据上移相反的操作,我们将“会员部”下移,实现如下:

SQL实现

update MENU_TREE st set st.ORDER_VAL=4 where st.ORDER_VAL=5 AND st.prent_id="0";

update MENU_TREE st set st.ORDER_VAL=5 where st.SID="3";

Mybatis的XML文件

<update>

update MENU_TREE st set st.ORDER_VAL=":orderVal" where st.ORDER_VAL=":orderVal"+1 AND st.prent_id=":prentId";

update MENU_TREE st set st.ORDER_VAL=":orderVal"+1 where st.SID=":sid";

</update>

下移后结果

数据置顶

将“战略发展部”置顶,实现如下:

SQL实现

update MENU_TREE st set st.ORDER_VAL=st.ORDER_VAL+1 where st.ORDER_VAL<6 AND st.prent_id="0";

update MENU_TREE st set st.ORDER_VAL="1" where st.SID="6";

Mybatis的XML文件

<update>

update MENU_TREE st set st.ORDER_VAL=st.ORDER_VAL+1 where st.ORDER_VAL&lt;":orderVal" AND st.prent_id=":prentId";

update MENU_TREE st set st.ORDER_VAL="1" where st.SID=":sid";

</update>

置顶后效果

数据置底

将“总裁办”置底,实现如下:

SQL实现

这是MySQL环境下的实现

update MENU_TREE st set st.ORDER_VAL=st.ORDER_VAL-1 where st.ORDER_VAL&gt;"3" AND st.prent_id="0";

update MENU_TREE st INNER JOIN (select max(ORDER_VAL)+1 max from MENU_TREE WHERE prent_id="0") pt SET st.ORDER_VAL=pt.max where st.SID="2";

mysql中update直接使用select的结果的处理方式需要注意。

Oracle或SqlServer下实现:

update MENU_TREE st set st.ORDER_VAL=st.ORDER_VAL-1 where st.ORDER_VAL&gt;"3" AND st.prent_id="0";

update MENU_TREE st set st.ORDER_VAL=(select max(ORDER_VAL)+1 from MENU_TREE WHERE prent_id="0" ) where st.SID="2";

Mybatis的XML文件

这是MySQL环境下的实现

<update>

update MENU_TREE st set st.ORDER_VAL=st.ORDER_VAL-1 where st.ORDER_VAL&gt;":orderVal" AND st.prent_id=":prentId";

update MENU_TREE st INNER JOIN (select max(ORDER_VAL)+1 max from MENU_TREE WHERE prent_id=":prentId") pt SET st.ORDER_VAL=pt.max where st.SID=":sid";

</update>

Oracle下实现:

<update>

begin

update MENU_TREE st set st.ORDER_VAL=st.ORDER_VAL-1 where st.ORDER_VAL&gt;":orderVal" AND st.prent_id=":prentId";

update MENU_TREE st set st.ORDER_VAL=(select max(ORDER_VAL)+1 from MENU_TREE WHERE prent_id=":prentId" ) where st.SID=":sid";

end;

<update>

置底后效果

以上就是对上移、下移、置顶和置底的实现。下面来说一下Mybatis中对大于小于的处理上文中有用到。

Mybatis中大于小于的处理

此处有两种处理方式,第一种处理方式:

原符号 < <= > >= & " "

替换符号 &lt; &lt;= &gt; &gt;= &amp; &apos; &quot;

例如:sql如下:

publish_time >= #{startTime} and publish_time <= #{endTime}

第二种处理方式:

大于等于

<![CDATA[ >= ]]>

小于等于

<![CDATA[ <= ]]>

例如:sql如下:

create_date_time <![CDATA[ >= ]]> #{startTime} and create_date_time <![CDATA[ <= ]]> #{endTime}

此一细节在使用Mybatis时需要注意。

以上是 Mybatis实现数据上移、下移、置顶与置底 的全部内容, 来源链接: utcz.com/z/531263.html

回到顶部