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