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

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

今天听说在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

。。。

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

更新 2018.11.21

在github的文档上找到了

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

img_a943dfe9661f712e06b944d610ef1820.jpe
timg (1).jpg

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

usePrimitiveType=true

总结

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

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

转载地址:http://lyjko.baihongyu.com/

你可能感兴趣的文章
完美解决NC502手工sql的查询引擎排序及合计问题
查看>>
PE文件之资源讲解
查看>>
windows 7/mac编译cocos2d-x-3.2*的android工程报错
查看>>
MYSQL导入导出.sql文件(转)
查看>>
git review报错一例
查看>>
《信息安全系统设计基础》 课程教学
查看>>
Linux平台下使用rman进行oracle数据库迁移
查看>>
全栈工程师学习Linux技术的忠告
查看>>
iOS自定制tabbar与系统的tabbar冲突,造成第一次点击各个item图片更换选中,第二次选中部分item图片不改变...
查看>>
C# Dictionary用法总结
查看>>
SVN服务器使用(二)
查看>>
反射获取内部类以及调用内部类方法
查看>>
C语言 - pthread
查看>>
App里面如何正确显示用户头像
查看>>
DATAGUARD维护:从库宕机后如何恢复到管理恢复模式
查看>>
U-BOOT之一:BootLoader 的概念与功能
查看>>
我的路上
查看>>
Velocity处理多余空白和多余空白行问题
查看>>
java值传递
查看>>
DB2与oracle有什么区别
查看>>