介绍 在一些管理系统中,经常有一些需求需要对产生的列表数据进行上移、下移、置顶与置底操作,此时需要一定的sql功底,下面介绍一下在mybatis技术下的使用。 具体实现 数据库表 首先设计的表需要有一些要求,此处以一个菜单树为例进行说明。
在一些管理系统中,经常有一些需求需要对产生的列表数据进行上移、下移、置顶与置底操作,此时需要一定的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 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";
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 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";
下移后结果
将“战略发展部”置顶,实现如下:
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 MENU_TREE st set st.ORDER_VAL=st.ORDER_VAL+1 where st.ORDER_VAL<":orderVal" AND st.prent_id=":prentId";
update MENU_TREE st set st.ORDER_VAL="1" where st.SID=":sid";
置顶后效果
将“总裁办”置底,实现如下:
SQL实现
这是mysql环境下的实现
update MENU_TREE st set st.ORDER_VAL=st.ORDER_VAL-1 where st.ORDER_VAL>"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>"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 MENU_TREE st set st.ORDER_VAL=st.ORDER_VAL-1 where st.ORDER_VAL>":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";
Oracle下实现:
begin
update MENU_TREE st set st.ORDER_VAL=st.ORDER_VAL-1 where st.ORDER_VAL>":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;
置底后效果
以上就是对上移、下移、置顶和置底的实现。下面来说一下Mybatis中对大于小于的处理上文中有用到。
此处有两种处理方式,第一种处理方式:
原符号 < <= > >= & " "
替换符号 < <= > >= & ' "
例如:sql如下: publish_time >= #{startTime} and publish_time <= #{endTime}
第二种处理方式:
大于等于
= ]]>
小于等于
例如:sql如下: create_date_time = ]]> #{startTime} and create_date_time #{endTime}
此一细节在使用Mybatis时需要注意。
--结束END--
本文标题: Mybatis实现数据上移、下移、置顶与置底
本文链接: https://lsjlt.com/news/2013.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0