博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第十三篇 SpringBoot 2 x整合Mybatis以及通用Mapper的问题
阅读量:6123 次
发布时间:2019-06-21

本文共 3383 字,大约阅读时间需要 11 分钟。

今天听说在SpringBoot整合mybatis和通用mapper的时候会产生一个奇怪的问题,即执行sql语句的时候会找不到主键,比如下面这个样子

//这是我要执行的方法,很明显就只是查询user表中的所有数据userMapper.selectAll();//结果是这样的2018-11-20 16:17:54.111 DEBUG 10640 --- [nio-8111-exec-1] p.gabriel.mapper.UserMapper.selectAll    : ==>  Preparing: SELECT username,password FROM user 2018-11-20 16:17:54.111 DEBUG 10640 --- [nio-8111-exec-1] p.gabriel.mapper.UserMapper.selectAll    : ==> Parameters: 2018-11-20 16:17:54.129 DEBUG 10640 --- [nio-8111-exec-1] p.gabriel.mapper.UserMapper.selectAll    : <==      Total: 1复制代码

明显看到id这个列并没有被查询到,第一反应是先去查看User

package priv.gabriel.model;import javax.persistence.*;/** * Created with Intellij IDEA. * * @Author: Gabriel * @Date: 2018-11-20 * @Description: */@Entity@Tablepublic class User {	@Id	@GeneratedValue(strategy = GenerationType.IDENTITY)	private int id;	@Column	private String username;	@Column	private String password;	public int getId() {		return id;	}	public void setId(int id) {		this.id = id;	}	public String getUsername() {		return username;	}	public void setUsername(String username) {		this.username = username;	}	public String getPassword() {		return password;	}	public void setPassword(String password) {		this.password = password;	}	@Override	public String toString() {		return "User{" +				"id=" + id +				", username='" + username + '\'' +				", password='" + password + '\'' +				'}';	}}复制代码

然而并没有什么问题,该标识的都标识了,然后又去查了一波dao

package priv.gabriel.mapper;import org.apache.ibatis.annotations.Mapper;import priv.gabriel.model.User;import tk.mybatis.mapper.common.BaseMapper;/** * Created with Intellij IDEA. * * @Author: Gabriel * @Date: 2018-11-20 * @Description: */@Mapperpublic interface UserMapper extends BaseMapper
{}复制代码

···根本不可能出现问题嘛,然后绞尽脑汁的考虑的各方面的问题,怀疑是版本问题甚至把tk.mapper的2.x版本挨个下载完了,但是,并没有什么用。 就在我怀疑人生的时候,突然瞟了一眼User类,灵光一闪,改造成了如下的款式

package priv.gabriel.model;import javax.persistence.*;/** * Created with Intellij IDEA. * * @Author: Gabriel * @Date: 2018-11-20 * @Description: */@Entity@Tablepublic class User {	@Id	@GeneratedValue(strategy = GenerationType.IDENTITY)	private Long id;	@Column	private String username;	@Column	private String password;	public Long getId() {		return id;	}	public void setId(Long id) {		this.id = id;	}	public String getUsername() {		return username;	}	public void setUsername(String username) {		this.username = username;	}	public String getPassword() {		return password;	}	public void setPassword(String password) {		this.password = password;	}	@Override	public String toString() {		return "User{" +				"id=" + id +				", username='" + username + '\'' +				", password='" + password + '\'' +				'}';	}}复制代码

看得出来区别吗?在这里我仅仅是把idint类型 转为了 Long类型居然就好了???

2018-11-20 16:33:10.236 DEBUG 10076 --- [nio-8111-exec-1] p.gabriel.mapper.UserMapper.selectAll    : ==>  Preparing: SELECT id,username,password FROM user 2018-11-20 16:33:10.257 DEBUG 10076 --- [nio-8111-exec-1] p.gabriel.mapper.UserMapper.selectAll    : ==> Parameters: 2018-11-20 16:33:10.281 DEBUG 10076 --- [nio-8111-exec-1] p.gabriel.mapper.UserMapper.selectAll    : <==      Total: 1复制代码

。。。

具体情况还不清楚,我已经准备潜伏到
tk.mapper的群里问个明白,等搞清楚了再更新

#更新 2018.11.21 在github的文档上找到了

默认情况下,简单类型会被识别为表中的字段,但是不 包 含 Java 的 基 本 类 型

继续翻翻文档,发现下面有一项配置可以支持基本类型 usePrimitiveType=true

#总结 虽然之后找到了解决方案,但同时也发现了对应的问题

使用基本数据类型就会有默认值,而在Mybatis中经常会判断属性值是否为空,为了避免这样的问题最好在类中声明属性时都使用包装类

转载于:https://juejin.im/post/5c1ca9db6fb9a049db731b66

你可能感兴趣的文章
部署SSL证书后,网页内容造成页面错误提示的处理办法
查看>>
MS SQLSERVER通用存储过程分页
查看>>
60.使用Azure AI 自定义视觉服务实现物品识别Demo
查看>>
Oracle 冷备份
查看>>
jq漂亮实用的select,select选中后,显示对应内容
查看>>
C 函数sscanf()的用法
查看>>
python模块之hashlib: md5和sha算法
查看>>
linux系统安装的引导镜像制作流程分享
查看>>
解决ros建***能登录不能访问内网远程桌面的问题
查看>>
pfsense锁住自己
查看>>
vsftpd 相关总结
查看>>
bash complete -C command
查看>>
解决zabbix 3.0中1151端口不能运行问题
查看>>
售前工程师的成长---一个老员工的经验之谈
查看>>
Get到的优秀博客网址
查看>>
dubbo
查看>>
【Git入门之四】操作项目
查看>>
老男孩教育每日一题-第107天-简述你对***的理解,常见的有哪几种?
查看>>
Python学习--time
查看>>
在OSCHINA上的第一篇博文,以后好好学习吧
查看>>