Mybatis如何按顺序查询出对应的数据字段

 更新时间:2022年01月30日 09:16:52   作者:除不掉的灰色  
这篇文章主要介绍了Mybatis如何按顺序查询出对应的数据字段,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Mybatis按顺序查询出对应的数据字段

今天遇到一个问题,就是写xml文件时,返回的顺序始终不一致,无论我sql语句写的如何好,前端接收到的数据都是乱的。终于,我发现到了原因。

原来我的查询返回resultType = "map"  , 也就是这个map, 打乱了顺序。

因为map 并不保证存入取出顺序一致, 因此,打乱顺序可想而知了。

解决方法

resultType = "map" 改为  resultType="java.util.LinkedHashMap" 。

介绍:返回为LinkedHashMap时,表中存储的null值并不会存入Map中。

Mybatis基本查询、条件查询、查询排序

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.inspur.analysis.tool.ontology.linkType.dao.LinkTypeMapper">
    <resultMap type="com.inspur.analysis.tool.ontology.linkType.data.LinkType" id="linkType">
        <id property="linkUri" column="LINK_URI"/>
        <result property="uriHash" column="URI_HASH"/>
        <result property="baseTypeUri" column="BASE_TYPE_URI"/>
        <result property="linkLabel" column="LINK_LABEL"/>
        <result property="isAsymmetrical" column="IS_ASYMMETRICAL"/>
        <result property="aliase" column="ALIASE"/>
        <result property="pcName" column="P_C_NAME"/>
        <result property="pcAliase" column="P_C_ALIASE"/>
        <result property="cpName" column="C_P_NAME"/>
        <result property="cpAliase" column="C_P_ALIASE"/>
        <result property="detailIconUri" column="DETAIL_ICON_URI"/>
        <result property="detailIcon" column="DETAIL_ICON"/>
        <result property="edgeIconUri" column="EDGE_ICON_URI"/>
        <result property="edgeIcon" column="EDGE_ICON"/>
        <result property="isSys" column="IS_SYS"/>
        <result property="note" column="NOTE"/>
        <result property="creatorId" column="CREATOR_ID"/>
        <result property="createTime" column="CREATE_TIME"/>
        <result property="editorId" column="EDITOR_ID"/>
        <result property="editTime" column="EDIT_TIME"/>
        <result property="scn" column="SCN"/>
    </resultMap>
    <select id="existLinkTypeUri" parameterType="String"
            resultMap="linkType">
        SELECT * FROM OD_LINK_TYPE
        WHERE LINK_URI = #{linkUri}
    </select>
    <select id="isRootLinkType" parameterType="String"
            resultType="int">
        SELECT EXISTS(SELECT LINK_URI FROM OD_LINK_TYPE
                                      WHERE LINK_URI=BASE_TYPE_URI AND LINK_URI=#{linkUri})
    </select>
    <select id="deleteRootLinkType" parameterType="String">
        DELETE FROM OD_LINK_TYPE WHERE BASE_TYPE_URI=#{baseTypeUri}
    </select>
    <select id="getRootLinkTypeList"  resultMap="linkType">
        SELECT * FROM OD_LINK_TYPE
        WHERE LINK_URI =  BASE_TYPE_URI
    </select>
    <select id="getAllLinkTypeListByParent" parameterType="java.util.Map"
            resultMap="linkType">
        SELECT * FROM OD_LINK_TYPE
        <where>
            LINK_URI != BASE_TYPE_URI
            <if test="baseTypeUri != null">
              AND BASE_TYPE_URI=#{baseTypeUri}
            </if>
        </where>
        <if test="orderfield != null" >
         ORDER BY 
           <choose>    
                <when test="orderfield == 'linkUri'">    
                    LINK_URI ${orderdir} 
                </when>  
                 <when test="orderfield == 'linkLabel'">    
                    LINK_LABEL ${orderdir} 
                </when>  
                 <otherwise>
                   BASE_TYPE_URI ${orderdir}
                </otherwise> 
            </choose>    
        </if>
    </select>
    <select id="getLinkTypeListByCondition" parameterType="java.util.Map"  resultMap="linkType">
        SELECT * FROM OD_LINK_TYPE
        <where>
            LINK_URI != BASE_TYPE_URI
            <if test="linkUri != null">
               AND LINK_URI LIKE '%${linkUri}%'
            </if>
            <if test="linkLabel != null">
                AND LINK_LABEL LIKE '%${linkLabel}%'
            </if>
            <if test="baseTypeUri != null">
                AND BASE_TYPE_URI=#{baseTypeUri}
            </if>
        </where>
      <if test="orderfield != null" >
         ORDER BY 
           <choose>    
                <when test="orderfield == 'linkUri'">    
                    LINK_URI ${orderdir} 
                </when>  
                 <when test="orderfield == 'linkLabel'">    
                    LINK_LABEL ${orderdir} 
                </when>  
                 <otherwise>
                   BASE_TYPE_URI ${orderdir}
                </otherwise> 
            </choose>    
        </if>
    </select>
</mapper>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用Criteria进行分组求和、排序、模糊查询的实例

    使用Criteria进行分组求和、排序、模糊查询的实例

    这篇文章主要介绍了使用Criteria进行分组求和、排序、模糊查询的实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Mybatis resultType返回结果为null的问题排查方式

    Mybatis resultType返回结果为null的问题排查方式

    这篇文章主要介绍了Mybatis resultType返回结果为null的问题排查方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • springboot使用ThreadPoolTaskExecutor多线程批量插入百万级数据的实现方法

    springboot使用ThreadPoolTaskExecutor多线程批量插入百万级数据的实现方法

    这篇文章主要介绍了springboot利用ThreadPoolTaskExecutor多线程批量插入百万级数据,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • Springboot AOP对指定敏感字段数据加密存储的实现

    Springboot AOP对指定敏感字段数据加密存储的实现

    本篇文章主要介绍了利用Springboot+AOP对指定的敏感数据进行加密存储以及对数据中加密的数据的解密的方法,代码详细,具有一定的价值,感兴趣的小伙伴可以了解一下
    2021-11-11
  • 详解Jvm中时区设置方式

    详解Jvm中时区设置方式

    这篇文章主要介绍了详解Jvm中时区设置方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 详解IDEA 启动tomcat 端口占用原因以及解决方法( 使用debug模式)

    详解IDEA 启动tomcat 端口占用原因以及解决方法( 使用debug模式)

    这篇文章主要介绍了详解IDEA 启动tomcat 端口占用原因以及解决方法( 使用debug模式) ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Java数据结构之双端链表原理与实现方法

    Java数据结构之双端链表原理与实现方法

    这篇文章主要介绍了Java数据结构之双端链表原理与实现方法,简单描述了双端链表的概念、原理并结合实例形式分析了java实现双端链表的相关操作技巧,需要的朋友可以参考下
    2017-10-10
  • Java继承超详细教程

    Java继承超详细教程

    继承是面向对象语法的三大特征之一,继承可以降低代码编写的冗余度,提高编程的效率,通过继承,子类获得了父类的成员变量和方法,一个子类如何继承父类的字段和方法,如何修改从父类继承过来的子类的方法呢,今天我们开始学习有关Java继承的知识,感兴趣的朋友一起看看吧
    2023-11-11
  • Java Swing CardLayout卡片布局的实现示例

    Java Swing CardLayout卡片布局的实现示例

    这篇文章主要介绍了Java Swing CardLayout卡片布局的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • SpringBoot使用validation做参数校验的实现步骤

    SpringBoot使用validation做参数校验的实现步骤

    这篇文章主要介绍了SpringBoot使用validation做参数校验的实现步骤,帮助大家更好的理解和学习使用SpringBoot,感兴趣的朋友可以了解下
    2021-05-05

最新评论