Spring boot使用MyBatis-plus遇到的坑


初次學習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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM