返回顶部
首页 > 资讯 > 后端开发 > Python >Mybatis实现动态排序方式
  • 125
分享到

Mybatis实现动态排序方式

Mybatis动态排序Mybatis排序Mybatis实现动态排序 2022-11-13 18:11:41 125人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录mybatis实现动态排序Mybatis动态排序不生效问题造成问题原因解决办法Mybatis实现动态排序 在数据展示时,很有可能碰到,需要动态排序的需求。当数据比较少的时候,还可

Mybatis实现动态排序

在数据展示时,很有可能碰到,需要动态排序的需求。当数据比较少的时候,还可以前端排序,但是,当数据非常大,尤其是涉及到分页的时候,就必须要用后端解决了。

以下,提供一种后端动态排序解决方案。

比如,现在我要查询用户信息(User)表。

可以在查询时,接口中,多添加两个字段。

  • orderField(排序列)
  • orderType(排序规则,升降序)

之后,在mapper.xml中的查询列表方法,添加

SELECT 
name , sex , age , user_grade as userGrade
FROM user
<if test="orderField !=null and orderField != '' ">
    order by ${orderField}  ${orderType}
</if>

注意事项:使用这样连续拼接两个注入参数时,只能用${},不能用#{}。

详情可以查看解释

这时,在我们查询时,可以在传入参数

User user = new User();
//以user_grade字段排序
user.setOrderField("user_grade");
//降序
user.setOrderType("desc");
//可在User类中添加
//在未传入时,使用set注入,设置默认值
public String getOrderField() {
        if (orderField == null || "".equals(orderField)) {
            orderField = "create_time";
        }
        return orderField;
    }
    public String getOrderType() {
        if (orderType == null || "".equals(orderType)) {
            orderType = "desc";
        }
        return orderType;
    }

如果,你觉得传入数据库中字段user_grade很不舒服的话。可以这样写sql

SELECT 
name , sex , age , user_grade as userGrade
FROM user
<if test="orderField != null" >
    ORDER BY
    <choose>
        <when test="orderField == 'name'">
            name ${orderType}
        </when>
        <when test="orderField == 'age'">
            age ${orderType}
        </when>
        <when test="orderField == 'userGrade'">
            user_grade ${orderType}
        </when>
        <otherwise>
            create_time ${orderType}
        </otherwise>
    </choose>
</if>

然后再传入字段时,就这样

user.setOrderField("userGrade");

Mybatis动态排序不生效问题

sql如下:

select * from  table_name order by #{field}

造成问题原因

mybatis动态参数

#{}方式传参数会使用preparedstatement预编译处理方式,参数是以?占位符的方式传递。可以看到mybaits的sql日志如下:

==> Preparing: SELECT * FROM table_name ORDER BY ?
==> Parameters: time(String)

preparedstatement预编译方式的参数替换的原理1可知预编译方式会对参数加上’'引号,生成的最终sql如下:

SELECT * FROM table_name ORDER BY 'time'

以上sql数据库不能正常解析 order by 后面的字段,这就是我们排序失效的原因

解决办法

将#{}参数方式改成${}参数方式即可。

原因: ${}参数的方式是简单的字符串替换。

在动态解析阶段,该 sql 语句会被解析成:

select * from table_name order by time

小结一下:

  • #{}方式传参数只能处理值参数 不能传递表名,字段等参数
  • ${}字符串替换,可以动态处理表名,字段参数,但是使用这种方式必须注意sql注入的风险,对参数做好校验处理

备注:preparedstatement具体实现原理见:com.Mysql.jdbc.PreparedStatement中的setString方法源码

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Mybatis实现动态排序方式

本文链接: https://lsjlt.com/news/170091.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Mybatis实现动态排序方式
    目录Mybatis实现动态排序Mybatis动态排序不生效问题造成问题原因解决办法Mybatis实现动态排序 在数据展示时,很有可能碰到,需要动态排序的需求。当数据比较少的时候,还可...
    99+
    2022-11-13
    Mybatis动态排序 Mybatis排序 Mybatis实现动态排序
  • Mybatis关于动态排序#{}${}问题
    目录Mybatis动态排序 #{} ${}问题通过动态排序理解#{}和${}的区别例如注意事项Mybatis动态排序 #{} ${}问题 在写Mybatis动态排序是遇到一个问题,开...
    99+
    2022-11-13
    Mybatis动态排序 Mybatis #{} Mybatis ${}
  • MyBatis按时间排序方式
    目录MyBatis按时间排序测试代码排序代码MyBatis时间排序问题时间排序代码为解决方法MyBatis按时间排序 测试代码 ActivityReadExample readExa...
    99+
    2024-04-02
  • linq中怎么实现动态排序
    本篇文章为大家展示了linq中怎么实现动态排序,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。想实现linq动态排序就是linq的order by 后跟动态的函数可以用委托实现,但是发现实现委托函数时...
    99+
    2023-06-17
  • mybatis-plus动态表名实现方法
    目录1.使用场景2.一定要时常注意工具的更新,不吃亏3.对mybatis-plus进行升级4.将原来的mybatis的插件配置调整成新版本的,并添加上动态表名的模块5.运行一下6. ...
    99+
    2024-04-02
  • Fluent MyBatis实现动态SQL
    目录数据准备代码生成在 WHERE 条件中使用动态条件在 UPDATE 使用动态更新choose 标签参考MyBatis 令人喜欢的一大特性就是动态 SQL。在使用 ...
    99+
    2024-04-02
  • MyBatis-Plus分页时排序的实现方法
    目录简介建库建表依赖配置EntityServiceController测试1.不指定顺序2.后端OrderItem排序(create_time倒序)3.后端Wrapper排序(cre...
    99+
    2024-04-02
  • Python编程实现超炫动态排序图
    目录用 python 制作超燃动态排序视频1,数据预处理2,图表绘制3,制作的图表转化为视频、动画用 python 制作超燃动态排序视频 在开始之前,先贴张图,之前网上一段时间下面这...
    99+
    2024-04-02
  • c++实现排序算法之希尔排序方式
    目录排序算法之希尔排序基本思想希尔排序算法复杂度分析关于希尔排序的问题分析排序算法之希尔排序及时间复杂度分析希尔排序时间复杂度排序算法之希尔排序 基本思想 将相距某个“增...
    99+
    2024-04-02
  • Python利用pynimate实现制作动态排序图
    数据可视化动画还在用 Excel 做?今天分享一个简单的 Python 包就能分分钟搞定! 而且生成的动画也足够丝滑,效果是酱紫的: 这是一位专攻 Python 语言的程序员开发的...
    99+
    2023-02-01
    Python制作动态排序图 Python动态排序图 Python动态排序
  • MyBatis动态SQL怎么实现
    这篇文章主要介绍了MyBatis动态SQL怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MyBatis动态SQL怎么实现文章都会有所收获,下面我们一起来看看吧。mybatis最强大的功能之一便是它的动态...
    99+
    2023-06-30
  • unity实现动态排行榜
    本文实例为大家分享了unity实现动态排行榜的具体代码,供大家参考,具体内容如下 在做2048游戏的时候要实现排行榜的功能: 1.超出显示范围可以通过滑动滚动条来上下查看 2.动态插...
    99+
    2024-04-02
  • MyBatis怎么实现按时间排序
    本篇内容介绍了“MyBatis怎么实现按时间排序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MyBatis按时间排序测试代码Activit...
    99+
    2023-06-29
  • mybatis-plus自定义排序的实现
    目录需求:1.导入依赖2.配置文件3.创建分页需要的缓存4.创建实体类5.mapper6.测试7.结果需求: 先时间升序排序,相同的时间在按状态排序,状态的顺序为1 在线 4 潜伏 ...
    99+
    2023-01-09
    mybatis-plus 自定义排序 mybatis-plus 排序
  • SpringBoot2.动态@Value的实现方式
    title: SpringBoot2.动态@Value实现 前言 前面文章有详细描述过各个不同阶段对于bean的扩展接口 所以今天就基于BeanPostProcessor实现Spri...
    99+
    2024-04-02
  • Mybatis如何使用ognl表达式实现动态sql
    本文讲述在mybatis中如何使用ognl表达式实现动态组装sql语句 新建Users实体类: public class Users { private Integer ...
    99+
    2024-04-02
  • Mybatis怎么使用ognl表达式实现动态sql
    这篇文章主要为大家展示了“Mybatis怎么使用ognl表达式实现动态sql”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Mybatis怎么使用ognl表达式实现动态sql”这篇文章吧。新建Us...
    99+
    2023-06-15
  • MyBatis中怎么实现动态SQL!
    这篇文章将为大家详细讲解有关MyBatis中怎么实现动态SQL!,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、if标签if是最常用标签,经常用在判断语句...
    99+
    2024-04-02
  • Fluent MyBatis怎么实现动态SQL
    这篇文章主要讲解了“Fluent MyBatis怎么实现动态SQL”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Fluent MyBatis怎么实现动态SQL”吧!目录数据准备代码生成在 W...
    99+
    2023-06-20
  • MyBatis的动态SQL怎么实现
    MyBatis提供了一种非常方便的方式来实现动态SQL,通过使用XML的方式来编写SQL语句,并在其中使用一些特定的标签来实现动态S...
    99+
    2024-04-09
    MyBatis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作