mybatis如何实现的数据库排序

作者:黄小鱼ZZZ 时间:2024-01-24 16:35:32 

mybatis数据库排序

今天用到了对数据库按照倒序进行输出。因为刚接触mybatis,所以对这方面还不是太了解,再网上搜了好长时间终于找到了一些有用的信息。

我的目标是这样的,数据库中的信息分为无效和有效,对数据库中的信息的有效值按照倒序进行输出,输出到表格中,

在网上看到了这样的语句,SELECT * FROM photo ORDER BY id DESC;于是我就直接拿过来用了,但是却出现了问题,因为我的是有条件排序的,

尝试了几次后我发现是这样写的, select 

<include refid="Base_Column_List" />
from manager_user where is_valid = 1 

ORDER BY id DESC;这样的话输出的内容就达到了我的目标,将语句中的desc换成asc就可以进行升序排序

mybatis order by 排序

在使用MyBatis解析xml进行排序的时候,遇见排序无效的问题!

  • #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #{user_id},如果传入的值是111,那么解析成sql时的值为order by &ldquo;111&rdquo;, 如果传入的值是id,则解析成的sql为order by &ldquo;id&rdquo;。

  • $将传入的数据直接显示生成在sql中。如:order by ${user_id},如果传入的值是111,那么解析成sql时的值为order by 111, 如果传入的值是id,则解析成的sql为order by id。

方式能够很大程度防止sql注入

  • $方式无法防止Sql注入。

  • $方式一般用于传入数据库对象,例如传入表名。

  • 一般能用#的就别用$。

order by 之后要使用$而非#

附解决代码段:

其中orderByField就是传入进行排序的参数值!

<choose>
  <when test="orderByField != null and orderByField !=''">
    <choose><when test="isAsc == true">
      order by ${orderByField} ASC
  </when>
  <otherwise>
    order by ${orderByField} DESC
  </otherwise></choose>
  </when>
<otherwise>
  order by id DESC

</otherwise></choose>

  ORDER BY
        <choose>
        <when test="sort!=null">
                #{sort,jdbcType=VARCHAR}
            <if test="order!=null">
                #{order,jdbcType=VARCHAR}
            </if>
        </when>
        <otherwise>
            id asc , create_time asc
        </otherwise>
     </choose>

原因是: #{order,jdbcType=VARCHAR},MyBatis会自动将排序字段当成一个字符串,等同于order by &lsquo;create_time&rsquo; &lsquo;desc&rsquo;,可以通过执行,但无效,与order by create_time desc结果不同

解决方法: 使用order,Mybatis会将其视作直接变量,变量替换成功后,不会再加上引号成为字符串,同样排序顺序也一样

{order},因此

  ORDER BY
        <choose>
        <when test="sort!=null">
                ${sort}
            <if test="order!=null">
                ${order}
            </if>
        </when>
        <otherwise>
            id asc , create_time asc
        </otherwise>
     </choose>

#能很大程度的防止SQL注入 $无法防止Sql注入 $用于传入数据库对象 <![CDATA[]]>,在该符号内的语句,不会被当成字符串来处理,而是直接当成sql语句,比如要执行一个存储过程。

在mapper文件中写sql语句时,遇到特殊字符时,如:< > 等,建议使用

来源:https://blog.csdn.net/wojiaohuangyu/article/details/52088030

标签:mybatis,数据库,排序
0
投稿

猜你喜欢

  • 10款最佳Python开发工具推荐,每一款都是神器

    2022-04-13 06:54:13
  • python 读取竖线分隔符的文本方法

    2023-03-12 14:45:14
  • python移位运算的实现

    2021-07-16 10:23:38
  • 设计和布局之间的思考

    2008-10-09 13:06:00
  • 基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式

    2024-04-22 22:37:54
  • vue2.x el-table二次封装实现编辑修改

    2023-07-02 16:29:17
  • 微信小程序创建自定义全局函数以及其调用方法详解

    2023-08-24 20:43:22
  • MySQL如何实现两张表取差集

    2024-01-18 21:00:03
  • 全面了解JavaScript对象进阶

    2024-04-22 12:47:51
  • python实现中文文本分句的例子

    2023-02-15 12:16:24
  • 对Python生成汉字字库文字,以及转换为文字图片的实例详解

    2021-12-10 16:55:51
  • Python中使用jpype调用Jar包中的实现方法

    2023-04-24 13:48:05
  • MySQL数据库十大优化技巧

    2024-01-25 22:51:28
  • MySQL source导入很慢的解决方法

    2024-01-25 18:25:49
  • Dreamweaver滑动菜单的制作[图]

    2007-11-08 12:43:00
  • Go语言运行环境安装详细教程

    2024-05-29 22:07:51
  • 初识Golang Mutex互斥锁的使用

    2024-05-09 09:39:57
  • 超级连接的title提示中如何换行实现多行显示

    2008-03-07 15:57:00
  • 微信小程序实现视频播放器发送弹幕

    2024-04-19 11:04:21
  • ES6深入理解之“let”能替代”var“吗?

    2024-05-28 15:41:33
  • asp之家 网络编程 m.aspxhome.com