首页 > 编程语言 > 详细

Spring boot使用MyBatis-plus遇到的坑

时间:2019-10-14 22:46:00      阅读:406      评论:0      收藏:0      [点我收藏+]

初次学习Spring boot安装MyBatis-plus遇到的问题:

1、Invalid bound statement (not found)

  网上有很多大佬遇到同样的问题并且给出相应的解决方法,我在这总结一下,以备以后遇到相同的问题能够快速解决:

  1)接口中方法名(delete)与xml文件中 id="delete"是否一致:

示例: 

Mapper类:
public
interface UserMapper extends BaseMapper<User> { /** * 获取用户信息接口测试 * @param userId 用户ID; * @return */ List<User> getUserInfo(String userId); }
*.xml中的getUserInfo和UserMapper中的不一样:
<select id="getUserInfo" parameterType="map" resultType="com.merrial.system.main.entity.User">
  /*SQL语句*/
</select>

   2)xml文件中的 namespace="xxx.xxx.xxx.Mapper" 中的路径是否与接口文件路径一致;

   3)parameterType类型 与 resultType类型是否准确;resultMap与resultType是不一样的;

   4)请任意修改下对应的xml文件,比如删除一个空行,保存.问题解决;

   5)看下mapper的XML配置路径是否正确(我的是因为这个没有配置出错的);

在application.yml或者application.properties中配置:

mybatis:
  mapper-locations: classpath:xyz/merrial/project/mapper/*.xml   #注意:一定要对应mapper映射xml文件的所在路径
  type-aliases-package: xyz.merrial.project.entity  # 注意:对应实体类的路径

 2、我在建立数据库测试数据时建立的表带有‘_‘,(比如说:user_id)然后创建实体类的时候使用了相同的字段名,结果出现null值,但是在数据表里这个数据不是空的,是有值的

实体类:

package com.merrial.system.main.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;


@Data
@ApiModel("用户实体")
@Accessors(chain = true)
@TableName("user_login")
@EqualsAndHashCode(callSuper = false)
public class User {

    @TableId(value = "user_id",type = IdType.NONE )
    private String user_id;

    @TableField("user_name")
    private String user_name;


    @TableField("pass_word")
    private String pass_word;


    @TableField("ticket")
    private String ticket;


    @TableField("mobile")
    private String mobile;

    @TableField("status")
    private String status;

    @TableField("add_time")
    private String add_time;

}

数据库数据:

"00001" "zhangsan" "123456" "YY" "11111111111" "ADMIN" "2019-9-25 16:11:58"
"00002"    "lisi"    "111111"    "NN"    "2222222222"    "CLIENT"    "2019-9-25 16:13:56"

得到的结果:

[User(user_id=null, user_name=null, password=123456, ticket=YY, mobile=11111111111, status=ADMIN, addTime=2019-09-25 16:11:58)]

错误原因:

由于mybatis的驼峰命名方式,带‘_’的实体类字段名字,也就是user_id,系统无法翻译,或者说不认识它,需要将名字改成userId,才可以,修改之后的实体类:

package com.merrial.system.main.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;


@Data
@ApiModel("用户实体")
@Accessors(chain = true)
@TableName("user_login")
@EqualsAndHashCode(callSuper = false)
public class User {

    @TableId(value = "user_id",type = IdType.NONE )
    private String userId;

    @TableField("user_name")
    private String userName;


    @TableField("pass_word")
    private String password;


    @TableField("ticket")
    private String ticket;


    @TableField("mobile")
    private String mobile;

    @TableField("status")
    private String status;

    @TableField("add_time")
    private String addTime;

}

这样就可以识别了,查询出来的数据也是正确的。

技术分享图片

 

 

参考文献:

https://www.cnblogs.com/momoweiduan/p/9844069.html

https://blog.csdn.net/hao134838/article/details/87286458

https://blog.csdn.net/weixin_33957648/article/details/93453002

 

Spring boot使用MyBatis-plus遇到的坑

原文:https://www.cnblogs.com/merrial/p/11674264.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!