初次学习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
原文:https://www.cnblogs.com/merrial/p/11674264.html