今天在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注入属性.