个人记录——使用mytatis通用mapper时实体类没写setter,getter踩坑

        今天在springcloud项目中使用mybatis通用mapper,没注意到实体类没写setter,getter方法(没写lombok的@Data注解),然后客户端一直获取不到返回的数据.

        大体过程如下:

引入依赖:

 实体类:

Dao接口: 

 service层,返回的是分页后的几条数据:

service实现类:

package com.leyou.item.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.leyou.common.pojo.PageResult;
import com.leyou.item.mapper.BrandMapper;
import com.leyou.item.pojo.Brand;
import com.leyou.item.service.BrandService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

/**
 * @Author Mr.Lee
 * @create 2021/12/15 22:03
 */
@Service
public class BrandServiceImpl implements BrandService {
    @Autowired
    private BrandMapper brandMapper;
    public PageResult<Brand> queryBrandByPageAndSort(Integer page, Integer rows, String sortBy, Boolean desc, String key) {
        // 开始分页
        PageHelper.startPage(page, rows);
        // 过滤
        Example example = new Example(Brand.class);
        if (StringUtils.isNotBlank(key)) {
            example.createCriteria().andLike("name", "%" + key + "%")
                    .orEqualTo("letter", key);
        }
        if (StringUtils.isNotBlank(sortBy)) {
            // 排序
            String orderByClause = sortBy + (desc ? " DESC" : " ASC");
            example.setOrderByClause(orderByClause);
        }
        System.out.println("example.getCountColumn():"+example.getCountColumn());
        System.out.println("example.getDynamicTableName():"+example.getDynamicTableName());
        System.out.println("example.getOrderByClause():"+example.getOrderByClause());
        System.out.println("example.getOrderCriteria():"+example.getOredCriteria());
        System.out.println("example.getSelectColumns():"+example.getSelectColumns());
        // 查询
        List<Brand> brandList = brandMapper.selectByExample(example);
        System.out.println("brandList:"+brandList);
        //创建pageInfo封装brandList
        PageInfo<Brand> pageInfo = new PageInfo<>(brandList);
        System.out.println("pageInfo:"+pageInfo);
        //返回结果
        return new PageResult<>(pageInfo.getTotal(),brandList);
    }
}

 controller层,默认第一页的前五条数据:

 测试:

 items就是返回的数据,结果全是空的,然后查看控制台:

发现数据库返回的数据正常,但输出的brandList输出了个寂寞,没看到数据.但是可以肯定的是在数据库返回的数据封装成javabean过程出了问题.

尝试添加setter,getter:

或者改成public:

 

再测试:

 

 

        联系Java反射知识,可以推测出,mybatis-mapper框架从数据库返回数据再注入到javabean中,利用的反射的getMethod,getDeclaredMethod等取得各字段的setter,getter方法.没有setter,getter方法就无法给javabean注入属性.

       

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值