使用MyBatis返回其它类对象的字段处理

目录
  • MyBatis返回其它类对象的字段处理
    • 需求
      • 此时两种处理方式
  • MyBatis返回自定义字段接收
    • 1、有时候需要查询的返回的结果不是javaBean的属性
    • 2、DAO接口
    • 3、后台取值

MyBatis返回其它类对象的字段处理

需求

在A.xml中联合查询A表所有字段及B表中的nikename字段,B表和A表没有关系但是和C表有关联,C表和A表有关联,其处理方式如下

1、sql先写好,比如当前只做A表所有符合条件的查询

SELECT
        *
FROM
sce_salegoods

2、取sce_users表中的nickname,sce_salegoods关联sce_sale表,sce_sale在关联sce_users表

SELECT
        g.*,u.nickname as nickname
FROM
sce_salegoods g
   LEFT JOIN sce_sale s ON s.id = g.sale_id
   LEFT JOIN sce_users u ON u.uid = s.user_id

3、业务层要求返回的结果如下,返回的是List<SaleGoods>

@Override
public void findSaleGoodsByGoodsType(PageInfo pageInfo) {
   List<SaleGoods> saleGoodsList = saleGoodsMapper.findSaleGoodsByGoodsType(pageInfo);
   int count = saleGoodsMapper.findSaleGoodsByGoodsTypeCount(pageInfo); // 条数
   pageInfo.setRows(saleGoodsList);
   pageInfo.setTotal(count);

}

4、要求返回Salegoods对象,但是sql查询包含sce_users表中字段nickname

此时两种处理方式

方式一:SQL中使用继承salegoods的方式

示例如下:

<!-- extends:表示继承的类所有会使用到的字段 id:使用返回方式resultMap="BaseResultMapAndSaleAttr" -->

<resultMap extends="BaseResultMap" id="BaseResultMapAndSaleAttr" type="com.newcsp.oracle.pojo.SaleGoods">
      <result column="ordersn" jdbcType="VARCHAR" property="ordersn" />
<!-- ofType:表示需要加进去的类  property:表示在被继承的类SaleGoods中加入userList这个字段 -->
<collection ofType="com.newcsp.oracle.pojo.User" property="userList">
    <result column="cvisible" jdbcType="VARCHAR" property="cvisible" />
</collection>

Salegoods类如下:

但这种方式我基本不用,比较麻烦,还不好用,容易出问题。我一般会采用方式二

方式二

1、SQL不变,返回方式更改为Salegoods类即可,但是需要在Salegoods类中加入nickname这个所需字段,名字必须一致,也就是resultType="com.newcsp.oracle.pojo.SaleGoods"

2、在Salegoods中加入nickname字段及对应的get和set方法

3、在此之前还需做一步,这也是防止出错的好习惯,先在Navicat中运行sql是否正常可以查到

4、代码里debug调试查看是否拿到

5、页面(由于前端每人写的不一样,这里就不写前端实现方式了)

MyBatis返回自定义字段接收

1、有时候需要查询的返回的结果不是javaBean的属性

这个时候可以定义resultType="map"

<select id="statisticsByMonth" resultType="map">
   SELECT a.tallyTime,SUM(a.paid) sumPaid FROM(
  SELECT LOGIN_ID loginId,SUBSTR(TALLY_TIME,1,6) tallyTime,AMOUNT_PAID paid FROM tally) a
  WHERE a.loginId=${loginId} AND a.tallyTime LIKE '${year}%'
  GROUP BY a.tallyTime
  ORDER BY a.tallyTime
  </select>

比如此处,查询的时候按照月份来返回每个月的支出的总金额.

2、DAO接口

public List<Map<Object,Object>> statisticsByMonth(
                   @Param(value="loginId")Integer loginId,@Param(value="year")String year);

mybatis返回的时候会将结果分别封装在map中,多条结果集就是多个map,可以用List接收

3、后台取值

List<Map<Object,Object>> m = tallyDao.statisticsByMonth(loginId, year);
for(int i=0;i<m.size();i++){
   Map<Object,Object> got = m.get(i);//取出集合中的每一个map,map内容是月份-支出总金额的键值对
}

先用List接收,然后遍历,List中的map就是我们需要查询的字段值了

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

(0)

相关推荐

  • mybatis查询结果返回至实体类的示例代码

    近期,利用mybatis做一个简单查询,先看主要代码: Service层: package com.example1.service; import java.util.List; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.exampl

  • mybatis中实现让返回值与bean中字段相匹配

    1. 编写目的 这个介绍的与那些修改mybatis.xml文件的方法不一样,目的也不一样. 当我们需要查询的数据跟entity的bean完全不匹配的时候(比如说需要统计的时候),我们不可能写多个dao层的查询接口,然后一个一个map到xml中去. 我们可以专门写一个类,根据自己的需要把统计的属性都写到里面去,然后一次性查询,就可以获得所有需要统计的数据. 2. 重要方法 专门编写一个实体类.实体类中包含的都是自己需要统计的属性. 编写dao层的接口方法的返回值就是这个实体类. 在映射的map.x

  • mybatis-plus 返回部分字段的解决方式

    mybatis-plus的代码生成器会在实体类中生成数据库所有字段,我们去用mapper接口查询时,会返回数据库所有的字段. 但有些字段不是我们想要的,比如:deleted,所以我们可以在不需要的字段上面加@JsonIgnore注解,返回给前端的时候会自动把这个字段去除. 补充知识:Mybatis-Plus只查询特定字段与创建子类方法 Mybatis-Plus查询特定字段例子: Seal seal = sealService.selectOne( new EntityWrapper<Seal>

  • MyBatis查询结果resultType返回值类型的说明

    一.返回一般数据类型 比如要根据 id 属性获得数据库中的某个字段值. mapper 接口: // 根据 id 获得数据库中的 username 字段的值 String getEmpNameById(Integer id); SQL 映射文件: <!-- 指定 resultType 返回值类型时 String 类型的, string 在这里是一个别名,代表的是 java.lang.String 对于引用数据类型,都是将大写字母转小写,比如 HashMap 对应的别名是 'hashmap' 基本数

  • 使用MyBatis返回其它类对象的字段处理

    目录 MyBatis返回其它类对象的字段处理 需求 此时两种处理方式 MyBatis返回自定义字段接收 1.有时候需要查询的返回的结果不是javaBean的属性 2.DAO接口 3.后台取值 MyBatis返回其它类对象的字段处理 需求 在A.xml中联合查询A表所有字段及B表中的nikename字段,B表和A表没有关系但是和C表有关联,C表和A表有关联,其处理方式如下 1.sql先写好,比如当前只做A表所有符合条件的查询 SELECT * FROM sce_salegoods 2.取sce_u

  • mybatis返回map类型数据空值字段不显示的解决方案

    目录 mybatis返回map数据空值字段不显示 查询sql添加每个字段的判断空 ResultType利用实体返回 springMVC+mybatis查询数据 mybatis返回map空值未返回字段 mybatis开启CallSettersOnNulls mybatis返回map数据空值字段不显示 查询sql添加每个字段的判断空 IFNULL(rate,'') as rate ResultType利用实体返回 不用map springMVC+mybatis查询数据 返回resultType=”m

  • python 类对象的析构释放代码演示

    目录 一.类的构造函数与析构函数 二.代码演示 1. 引用的更迭 2. 只在函数内部的类对象 三.函数内部返回的类对象 1. 使用全局变量 引用 函数内部的类对象 一.类的构造函数与析构函数 _init__ 函数是python 类的构造函数,在创建一个类对象的时候,就会自动调用该函数:可以用来在创建对象的时候,设置该对象的一些初始化信息和设置. __del__ 函数是python 类的析构函数,在一个类对象生命周期结束.被销毁的时候,就会自动调用该函数:主要用来释放对象占用的一些资源等. 二.代

  • mybatis plus实体类中字段映射mysql中的json格式方式

    目录 mybatis plus实体类中字段映射mysql中的json格式 1.实体类中有个属性是其他对象 2.那么取出时怎么进行映射呢,有分为两种情况 mybatis-plus 实体 json 处理 本文总共三个步骤 mybatis plus实体类中字段映射mysql中的json格式 1.实体类中有个属性是其他对象 或者是List:在数据库中存储时使用的是mysql的json格式,此时可以用mybatis plus的一个注解 @TableField(typeHandler = JacksonTy

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

    目录 mybatis返回单一对象或对象列表 一.说明 二.代码测试 UserMap.xml映射文件 dao文件UserMap.java 测试代码和结果文件 mybatis 返回的对象包含集合 mybatis返回单一对象或对象列表 一.说明 返回数据类型由dao中的接口和map.xml文件共同决定.另外,不论是返回单一对象还是对象列表,***map.xml中的配置都是一样的,都是resultMap="***Map"或resultType="* .* .*"类型. 每一

  • Mybatis实体类对象入参查询的笔记

    目录 Mybatis实体类对象入参查询 测试实体类对象结构如下 测试文件内容 Mybatis中的参数深入 一.mybatis的参数 parameterType参数 二.mybatis的输出结果的封装 resultType(输出类型) Mybatis实体类对象入参查询 测试实体类对象结构如下 /** 使用lobmok插件 */ @Getter @Setter @NoArgsConstructor @ToString @EqualsAndHashCode public class Vendor {

  • Java的MyBatis框架中关键的XML字段映射的配置参数详解

    properties 这些是外部化的,可替代的属性,这些属性也可以配置在典型的Java属性配置文件中,或者通过properties元素的子元素来传递.例如: <properties resource="org/mybatis/example/config.properties"> <property name="username" value="dev_user"/> <property name="pas

  • Mybatis返回单个实体或者返回List的实现

    Mybatis 的强大之处之一体现在映射语句上,让我们可以使用简单的配置,就可以实现对参数和返回结果的映射. 实体 package com.test.User public class User{ private String userId; private String userName; private String userPassword; private Date createTime; ... setter getter.... } DAO public interface User

  • Mybatis返回插入的主键问题解决方案

    MyBatis添加记录后获取主键ID,这是一个很常见的需求.这个需求有分为两种情况:(1)添加单条记录时获取主键值:(2)获取批量添加记录时各记录的主键值. 备注:MyBatis从3.3.1版本开始支持批量添加记录并返回各记录主键字段值. 1.添加单一记录时返回主键ID(方法一) 此种方法主要思路是:使用<insert>标签或者@Insert注解的属性:useGeneratedKeys.keyProperty.keyColumn.下面分别以xml映射器和注解映射器分别详细阐述一下. 2.添加单

随机推荐