我的编程空间,编程开发者的网络收藏夹
学习永远不晚

浅谈mybatis返回单一对象或对象列表的问题

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

浅谈mybatis返回单一对象或对象列表的问题

目录
  • mybatis返回单一对象或对象列表
    • 一、说明
    • 二、代码测试
      • UserMap.xml映射文件
      • dao文件UserMap.java
      • 测试代码和结果文件
  • mybatis返回的对象包含集合

    mybatis返回单一对象或对象列表

    一、说明

    • 返回数据类型由dao中的接口和map.xml文件共同决定。另外,不论是返回单一对象还是对象列表,***map.xml中的配置都是一样的,都是resultMap=”***Map”或resultType=“* .* .*”类型.
    • 每一次mybatis从数据库中select数据之后,都会检查数据条数和dao中定义的返回值是否匹配。
    • 若返回一条数据,dao中定义的返回值是一个对象或对象的List列表,则可以正常匹配,将查询的数据按照dao中定义的返回值存放。
    • 若返回多条数据,dao中定义的返回值是一个对象,则无法将多条数据映射为一个对象,此时mybatis报错。

    二、代码测试

    UserMap.xml映射文件

    
    <resultMap id="BaseResultMap" type="com.ks.ssm.domain.User" >
        <id column="id" property="id" jdbcType="BIGINT" />
        <result column="username" property="username" jdbcType="VARCHAR" />
        <result column="password" property="password" jdbcType="VARCHAR" />
        <result column="email" property="email" jdbcType="VARCHAR" />
        <result column="qq" property="qq" jdbcType="VARCHAR" />
        <result column="phone" property="phone" jdbcType="VARCHAR" />
        <result column="gender" property="gender" jdbcType="BIT" />
        <result column="birthday" property="birthday" jdbcType="DATE" />
        <result column="city" property="city" jdbcType="VARCHAR" />
        <result column="mood" property="mood" jdbcType="VARCHAR" />
        <result column="single" property="single" jdbcType="BIT" />
        <result column="enrolltime" property="enrolltime" jdbcType="TIMESTAMP" />
        <result column="level" property="level" jdbcType="TINYINT" />
        <result column="status" property="status" jdbcType="BIT" />
        <result column="titlepic" property="titlepic" jdbcType="VARCHAR" />
        <result column="job" property="job" jdbcType="VARCHAR" />
        <result column="logintime" property="logintime" jdbcType="TIMESTAMP" />
        <result column="loginip" property="loginip" jdbcType="VARCHAR" />
        <result column="token" property="token" jdbcType="VARCHAR" />
        <result column="modifytime" property="modifytime" jdbcType="TIMESTAMP" />
      </resultMap>
      <sql id="Base_Column_List" >
        id, username, password, email, qq, phone, gender, birthday, city, mood, single, enrolltime, 
        level, status, titlepic, job, logintime, loginip, token, modifytime
      </sql>
      <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
        select 
        <include refid="Base_Column_List" />
        from user_info
        where id = #{id,jdbcType=BIGINT}
      </select>
      <!-- add by ks -->
        <select id="selectByUserName" resultMap="BaseResultMap" parameterType="java.lang.String" >
        select 
        <include refid="Base_Column_List" />
        from user_info
        where username = #{username,jdbcType=VARCHAR}
       </select>
       <!-- mybatis 非常的智能,返回值统一使用 resultMap="BaseResultMap",mybatis会根据查询到的条目数量自动进行判断,如果是一条就返回对象,如果是多条就返回List对象列表-->
      <select id="selectByEmail" resultMap="BaseResultMap" parameterType="java.lang.String" >
        select 
        <include refid="Base_Column_List" />
        from user_info
        where email = #{email,jdbcType=VARCHAR}
       </select>
       <!-- end by ks -->

    dao文件UserMap.java

    
    public interface UserMapper {
        User selectByPrimaryKey(Long id);
        User selectByUserName(String username );
        
        List<User> selectByEmail(String email );
    }

    测试代码和结果文件

    
    @RunWith(SpringJUnit4ClassRunner.class)     //表示继承了SpringJUnit4ClassRunner类
    @ContextConfiguration(locations = {"classpath:spring-mybatis.xml"})
    public class TestMyBatis {
      private static Logger logger = Logger.getLogger(TestMyBatis.class);
      @Resource
      private UserMapper userDao;
      @Test
      public void testMybatis() {
        User user = userDao.selectByUserName("ks");
        logger.info("user.........................");
        logger.info(JSON.toJSONString(user));
        List<User> users=userDao.selectByEmail("ks");
        logger.info("list.........................");
        for(User userTemp : users)
        {
            logger.info(JSON.toJSONString(userTemp));
        }
      }
    }

    测试结果

    mybatis 返回的对象包含集合

    DeviceQuestionInstruction.java

    
    import com.hikari.cloud.data.entity.TbInstruction;
    import lombok.Data;
    import java.util.Date;
    import java.util.List;
    @Data
    public class DeviceQuestionInstruction {//tb_instruction  使用说明表
        private String dvqsTitle;
        private List<TbInstruction> instructionList;
    }
    

    TbInstruction.java

    
    import lombok.Data;
    import java.util.Date;
    @Data
    public class TbInstruction {//tb_instruction  使用说明表
        private Long id;
        private Long userId;
        private String title;
        private String detail;
        private String url;
        private Integer type;
        private Integer suffix;
        private String deviceCategory;
        private String deviceTypeName;
        private String deviceTypeNum;
        private Integer views;
        private Long dvqsId;
        private Integer dvqsLevel;
        private Date gmtCreate;
    }

    TbDeviceQuestionMapper.java

    
    import com.hikari.cloud.data.bean.DeviceQuestionInstruction;
    import org.apache.ibatis.annotations.Param;
    import java.util.List;
    public interface TbDeviceQuestionMapper {
        List<DeviceQuestionInstruction> findByNo(@Param("deviceTypeNo") String deviceTypeNo);
    }

    TbDeviceQuestionMapper.xml

    
    <?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.hikari.cloud.data.mapper.TbDeviceQuestionMapper">
        <resultMap id="dataMap" type="com.hikari.cloud.data.bean.DeviceQuestionInstruction">
            <result column="dvqs_title" property="dvqsTitle"/>
            <collection property="instructionList" resultMap="insResultMap"/>
        </resultMap>
        <resultMap id="insResultMap" type="com.hikari.cloud.data.entity.TbInstruction">
            <result column="id" property="id"/>
            <result column="user_id" property="userId"/>
            <result column="title" property="title"/>
            <result column="detail" property="detail"/>
            <result column="url" property="url"/>
            <result column="type" property="type"/>
            <result column="suffix" property="suffix"/>
            <result column="device_category" property="deviceCategory"/>
            <result column="device_type_name" property="deviceTypeName"/>
            <result column="device_type_num" property="deviceTypeNum"/>
            <result column="views" property="views"/>
            <result column="dvqs_id" property="dvqsId"/>
            <result column="dvqs_level" property="dvqsLevel"/>
            <result column="gmt_create" property="gmtCreate"/>
        </resultMap>
        <select id="findByNo" resultType="com.hikari.cloud.data.bean.DeviceQuestionInstruction" resultMap="dataMap">
            SELECT tb_device_question.title AS dvqs_title,tb_instruction.* FROM tb_device_question
            LEFT JOIN tb_instruction
            ON tb_device_question.id=tb_instruction.dvqs_id
            WHERE tb_device_question.device_type_no='HSAT-K5'
            ORDER BY tb_instruction.dvqs_level ASC
        </select>
    </mapper>
    

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

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    浅谈mybatis返回单一对象或对象列表的问题

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    浅谈mybatis返回单一对象或对象列表的问题

    目录mybatis返回单一对象或对象列表一、说明二、代码测试UserMap.xml映射文件dao文件UserMap.java测试代码和结果文件mybatis返回的对象包含集合mybatis返回单一对象或对象列表一、说明 返回数据类型由dao中的接口和ma
    2021-12-31

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录