第十三篇:SpringBoot 2.x整合Mybatis以及通用Mapper的问题

简介: 今天听说在SpringBoot整合mybatis和通用mapper的时候会产生一个奇怪的问题,即执行sql语句的时候会找不到主键,比如下面这个样子//这是我要执行的方法,很明显就只是查询user表中的所有数据userMapper.

今天听说在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
@Table
public 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:
 */
@Mapper
public interface UserMapper extends BaseMapper<User>{

}

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

package priv.gabriel.model;

import javax.persistence.*;

/**
 * Created with Intellij IDEA.
 *
 * @Author: Gabriel
 * @Date: 2018-11-20
 * @Description:
 */
@Entity
@Table
public 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中经常会判断属性值是否为空,为了避免这样的问题最好在类中声明属性时都使用包装类

目录
相关文章
|
19天前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
56 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
19天前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
36 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
26天前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
186 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
19天前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
27 10
|
18天前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
29 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
19天前
|
SQL Java 数据库连接
mybatis使用二:springboot 整合 mybatis,创建开发环境
这篇文章介绍了如何在SpringBoot项目中整合Mybatis和MybatisGenerator,包括添加依赖、配置数据源、修改启动主类、编写Java代码,以及使用Postman进行接口测试。
12 0
mybatis使用二:springboot 整合 mybatis,创建开发环境
|
20天前
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
|
27天前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
33 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
22天前
|
Java 数据库连接 Maven
Spring整合Mybatis
Spring整合Mybatis
|
6月前
|
XML Java 关系型数据库
【SpringBoot系列】SpringBoot集成Fast Mybatis
【SpringBoot系列】SpringBoot集成Fast Mybatis