【Mybatis】未封装返回结果的字段自己返回值的问题
在spring boot中使用mybatis过程中,发现有个实体的时间字段未在mapper方法执行完的封装结果中进行封装,但是却有值返回。
如下展示问题:
实体如下:
package com.sxd.swapping.domain; import com.sxd.swapping.base.BaseBean;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.jpa.domain.Specification; import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.io.Serializable;
import java.util.*; @Entity
@Table
@Getter
@Setter
public class HuaYangArea extends BaseBean implements Serializable {
private static final long serialVersionUID = -1851783771574739215L; @Column(nullable = false)
private String areaName; @Column(nullable = false)
private Long areaPerson; public static Specification<HuaYangArea> where(HuaYangArea huaYangArea){ return new Specification<HuaYangArea>() {
@Override
public Predicate toPredicate(Root<HuaYangArea> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
//创建查询列表
List<Predicate> predicates = new ArrayList<>(); //字段areaName是否查询
String areaName = huaYangArea.getAreaName();
if (StringUtils.isNotBlank(areaName)){
predicates.add(criteriaBuilder.like(root.get("areaName"),"%"+areaName+"%"));
}
//字段areaPerson是否查询
Long areaPerson = huaYangArea.getAreaPerson();
if (areaPerson != null) {
predicates.add(criteriaBuilder.equal(root.get("areaPerson"),areaPerson));
} return criteriaQuery.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction();
}
};
} }
package com.sxd.swapping.base; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort; import javax.persistence.*;
import java.util.*;
import java.util.stream.Collectors; /**
* 基础bean
*/
@MappedSuperclass
public class BaseBean { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;// 主键 自增 @Column(nullable = false, updatable = false)
private Date createDate = new Date();// 创建时间 private Date updateDate = new Date();// 修改时间 private String updateId; // 修改人 @Column(nullable = false)
private String createId; // 创建人 @Column(nullable = false)
private String uid; //业务主键 @Transient
private Integer pageNum = 0; //分页 页号 @Transient
private Integer pageSize = 10; //分页 页量 public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public Date getCreateDate() {
return createDate;
} public void setCreateDate(Date createDate) {
this.createDate = createDate;
} public Date getUpdateDate() {
return updateDate;
} public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
} public String getUpdateId() {
return updateId;
} public void setUpdateId(String updateId) {
this.updateId = updateId;
} public String getCreateId() {
return createId;
} public void setCreateId(String createId) {
this.createId = createId;
} public String getUid() {
return uid;
} public void setUid(String uid) {
this.uid = uid;
} public Integer getPageNum() {
return pageNum;
} public void setPageNum(Integer pageNum) {
this.pageNum = pageNum;
} public Integer getPageSize() {
return pageSize;
} public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
} public void initEntity(){
this.createDate = new Date();
this.createId = UUID.randomUUID().toString();//如果有当前登陆人,则初始化为当前登陆人
this.uid = UUID.randomUUID().toString();
} public void updateEntity(){
this.updateDate = new Date();
this.updateId = UUID.randomUUID().toString();//如果有当前登陆人,则赋值为当前登陆人
} /**
* 分页 工具方法
* @return
*/
public PageRequest page(){
return PageRequest.of(pageNum,this.pageSize);
} /**
* 分页 排序工具方法
*
* 中文字段排序 需要在查询出来后处理 sort无法解决中文排序的问题
* @param map
* @param obj
* @return
* @throws Exception
*/
public PageRequest page(Map<String,Sort.Direction> map,Object obj) throws Exception{
//反射获取实体所有属性
List<String> properties = Arrays.stream(obj.getClass().getDeclaredFields()).map(i->i.getName()).collect(Collectors.toList());
Set<String> keySet = map.keySet();
Sort sort = null;
if (properties.containsAll(keySet)){
for (String str:keySet){
if (sort == null){
sort = Sort.by(map.get(str),str);
}else{
sort = sort.and(Sort.by(map.get(str),str));
}
}
}else{
throw new Exception("排序字段非本实体字段");
}
return PageRequest.of(this.pageNum,this.pageSize,sort);
}
}
Mapper.java如下:
public interface HuaYangAreaMapper {
/**
* 根据业务主键查询
* @param uid
* @return
*/
@Select("SELECT * FROM hua_yang_area where uid = #{uid}")
@Results({
@Result(property = "areaName",column = "area_name",javaType = String.class),
@Result(property = "areaPerson",column = "area_person",javaType = Long.class),
@Result(property = "createId",column = "create_id",javaType = String.class)
})
HuaYangArea findOne(String uid);
调用这个方法,返回结果如下:
如上所示,因为createDate和updateDate都没有在结果集进行封装,所以按道理来说应该是获取不到值的嘛,但是这里却能获取到值。
,展示结果集封装
追溯原因:
最后找到根源,原来是因为在实体类中,部分不按逻辑出牌的字段 进行了new操作

所以,如果想要mybatis查询的结果集完全按照自己封装的效果来进行返回,就可以将这里的初始化给去掉!!!!
【Mybatis】未封装返回结果的字段自己返回值的问题的更多相关文章
- mybatis plus 增删改自动填充字段值
说明 本文实现以下需求效果 创建数据时自动填充 createUserId 和 createTime 更新数据时自动填充 updateUserId 和 updateTime(每次修改都自动填充新的 up ...
- mybatis动态调用表名和字段名
以后慢慢启用个人博客:http://www.yuanrengu.com/index.php/mybatis1021.html 一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用 ...
- mysql 去除重复 Select中DISTINCT关键字的用法 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记 ...
- [转]MyBatis动态传入表名、字段名参数的解决办法
一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这 ...
- 【死磕jeesite源码】mybatis动态调用表名和字段名
本文转载自夏雪冬日 一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字 ...
- MongoDB查询指定字段(field)返回指定字段的方法
使用MongoDB的时候需要只查询指定的字段进行返回,也就是类似mysql里面的 SELECT id,name,age 这样而不是SELECT *.在MongoDB里面映射(projection)声明 ...
- 判断逻辑 先判断协议字段返回,再判断业务返回,最后判断交易状态 API密钥
[微信支付]微信小程序支付开发者文档 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_1 协议规则 商户接入微信支付, ...
- mybatis&plus系列------Mysql的JSON字段的读取和转换
mybatis&plus系列------Mysql的JSON字段的读取和转换 一. 背景 在平常的开发中,我们可能会有这样的需求: 业务数据在存储的时候,并不是以mysql中的varchar丶 ...
- MongoDB(13)- 查询操作返回指定的字段
插入测试数据 db.inventory.insertMany( [ { item: "journal", status: "A", size: { h: 14, ...
随机推荐
- struct&&class 空的大小
#include using namespace std; class ClassA { }; class ClassB { private: int b; }; class ClassC : pub ...
- ASP.NET——视频总结
ASP.NET的视频很早就看完了,但一直还没顾上总结.虽然在备战软考,学习任务很重,但是阶段的总结还是不要推太久了,不然也就起不到总结的效果了.在看视频之前,虽然已经做过了新闻发布系统,但是对B/S一 ...
- 可以在函数中间打点了,以分析bpf_prog_load函数为例
可以在函数中间打点了, sudo stap -L 'process("./test").statement("func@test.c:10")' //12.10 ...
- MyBatis中使用OGNL表达式与操作符
String与基本数据类型 _parameter 自定义类型(对象) 属性名 集合 数组 array List list Map _parameter 获取集合中的一条数据 数组 array[索引] ...
- windows安装 Nodejs,NPM, CNPM
1, dowload Nodejs from : http://nodejs.cn/download/ 下载完毕后,可以安装node,建议不要安装在系统盘(本例安装在 D:\vueProject) ...
- BZOJ4001 [TJOI2015]概率论 【生成函数】
题目链接 BZOJ4001 题解 Miskcoo 太神了,orz #include<algorithm> #include<iostream> #include<cstr ...
- Pandas之DataFrame——Part 3
''' [课程2.] 数值计算和统计基础 常用数学.统计方法 ''' # 基本参数:axis.skipna import numpy as np import pandas as pd df = pd ...
- myeclipse maven web项目配置
启用maven:window-->preference-->MyEclipse-->Maven4MyEclipse, 勾选复选框(Enable Mave4MyEclipse feat ...
- Flask学习总结笔记推荐
https://blog.csdn.net/kikaylee/article/category/6551426
- POCO库中文编程参考指南(5)Poco::Net::SocketAddress
1 枚举 最大地址长度,这个与Poco::Net::IPAddress中的定义可以类比,不过这里指的是`struct sockaddr_in6 enum { MAX_ADDRESS_LENGTH = ...