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

目录
  • Mybatis按顺序查询出对应的数据字段
    • 解决方法
  • 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>

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

(0)

相关推荐

  • mybatis查询语句揭秘之封装数据

    一.前言 继上一篇mybatis查询语句的背后,这一篇主要围绕着mybatis查询的后期操作,即跟数据库交互的时候.由于本人也是一边学习源码一边记录,内容难免有错误或不足之处,还望诸位指正,本文只可当参考作用.谨记! 二.分析 继上一篇博文的查询例子,mybatis在最后的查询最终会走SimpleExecutor类的doQuery方法, @Override public <E> List<E> doQuery(MappedStatement ms, Object parameter

  • 解决mybatis三表连接查询数据重复的问题

    此问题的产生,主要是数据库的字段名一样导致 三张表 DOCTOR JOB OBJECT 有问题的查询语句和查询结果是: SELECT d.*,j.*,o.* from (select d.*,rownum r from DOCTOR d where rownum<=6) d join job j on d.job_id=j.id join object o on o.id=d.object_id where r>0 <img src="https://img-blog.csdn

  • 关于MyBatis 查询数据时属性中多对一的问题(多条数据对应一条数据)

    数据准备 数据表 CREATE TABLE `teacher`( id INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO `teacher`(id,`name`) VALUES(1,'大师'); CREATE TABLE `student`( id INT(10) NOT NULL, `name` VARCHAR

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

    目录 Mybatis按顺序查询出对应的数据字段 解决方法 Mybatis基本查询.条件查询.查询排序 Mybatis按顺序查询出对应的数据字段 今天遇到一个问题,就是写xml文件时,返回的顺序始终不一致,无论我sql语句写的如何好,前端接收到的数据都是乱的.终于,我发现到了原因. 原来我的查询返回resultType = "map"  , 也就是这个map, 打乱了顺序. 因为map 并不保证存入取出顺序一致, 因此,打乱顺序可想而知了. 解决方法 resultType = "

  • 使用mybatis格式化查询出的日期

    mybatis格式化查询出的日期 1.格式符说明 %Y:年 示例:2019 %m:月 示例:08 %d:日 示例:05 %H:时 示例:15 %I:分 示例:47 %S:秒 示例:56 2.使用示例 DATE_FORMAT(NOW(),'%Y-%m-%d %H:%I:%S') 格式化Mybatis返回的Date时间 在实体类的日期属性上添加 @JsonFormat和@DateTimeFormat注解. import java.util.Date; public class Test { @Dat

  • MyBatis将查询出的两列数据装配成键值对的操作方法

    目录 描述: 操作: 1. 实现 ResultHandler 接口 2. 对应 DAO 层 3. 使用 描述: MyBatis 直接查询出的格式是 List 套 Map 的结构,当然利用 Stream 流进行转换也非常便捷,但如果这样的操作很多的话,不如利用 MyBatis 提供的 ResultHandler 接口进行实现,做成工具类使用. 此外,如果用 MyBatis 提供的 @MapKey ,也只是对应值有冗余,因为 MapKey取一个字段为键,取出的所有字段为值. 操作: 1. 实现 Re

  • Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办

    项目开发中,在做Mybatis动态查询时,遇到了一个问题:MySQL在进行LIKE模糊查询时,输入英文可以正常检索出结果,但是输入中文后检索得到的结果为空. 由于是使用GET方式请求,所以为了确保中文不乱码,在控制台接收到请求参数后,对中文进行了一次编码. try { realName = new String(realName.getBytes("GBK"), "UTF-8"); } catch (UnsupportedEncodingException exce

  • MyBatis高级映射和查询缓存

     mybatis框架执行过程: 1.配置mybatis的配置文件,SqlMapConfig.xml(名称不固定) 2.通过配置文件,加载mybatis运行环境,创建SqlSessionFactory会话工厂 SqlSessionFactory在实际使用时按单例方式. 3.通过SqlSessionFactory创建SqlSession SqlSession是一个面向用户接口(提供操作数据库方法),实现对象是线程不安全的,建议sqlSession应用场合在方法体内. 4.调用sqlSession的方

  • mybatis and,or复合查询操作

    要查询的sql: select * from user where name = ? and (age=? or city=?): 方法1:不使用Example查询 直接在usermapper.xml中修改sql 方法2:使用Example查询 sql可转换成 select * from user where (name = ? and age=?) or (name=? and city=?): 然后使用Example查询 UserExample example=new UserExample

  • MyBatis查询时属性名和字段名不一致问题的解决方法

    问题 当我们数据库中的字段和实体类中的字段不一致的时候,查询会出问题 数据库字段是 pwd id name pwd 1 张三 123456 2 李四 123456 3 王五 123456 4 赵六 123456 实体类字段是 password public class User { private int id; private String name; private String password; } 查出来结果发现, password 是 null User{id=1, name='张三

  • Mybatis CURD及模糊查询功能的实现

    命名空间namespace: 配置文件中namespace中的名称为对应Mapper接口或者Dao接口的完整包名,必须一致! 1.查询(select) select: 接口中的方法名与映射文件中的SQL语句ID 一一对应 id parameterType resultType 案例:根据id查询用户 1.写接口(在UserMapper中添加对应的方法) public interface UserMapper { //根据ID查询用户 User getuserByID(int id); } 2.U

  • MyBatis实现两种查询树形数据的方法详解(嵌套结果集和递归查询)

    目录 方法一:使用嵌套结果集实现 1,准备工作 2,实现代码 方法二:使用递归查询实现 树形结构数据在开发中十分常见,比如:菜单数.组织树, 利用 MyBatis 提供嵌套查询功能可以很方便地实现这个功能需求.而其具体地实现方法又有两种,下面分别通过样例进行演示. 方法一:使用嵌套结果集实现 1,准备工作 (1)假设我们有如下一张菜单表 menu,其中子菜单通过 parendId 与父菜单的 id 进行关联: (2)对应的实体类如下: @Setter @Getter public class M

  • MyBatis多表操作查询功能

    一对一查询 用户表和订单表的关系为,一个用户多个订单,一个订单只从属一个用户 一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户 在只查询order表的时候,也要查询user表,所以需要将所有数据全部查出进行封装SELECT *,o.id oid FROM orders o,USER u WHERE o.uid=u.id 创建Order和User实体 order public class Order { private int id; private Date ordertime;

随机推荐