做小项目,把mybatis改成mybatisplus图方便。结果到了多表查询开始傻眼。自定义xml写sql多表查询语句一直出现Invalid bound statement (not found),但是原有的查询语句均能正常运行。
解决方案一:在Mapper中写@select注解
//根据用户id查找用户名
//左连接 根据用户id查找用户昵称
@Select("<script>" +
"SELECT information.*, `user`. `name` AS username " +
"FROM information " +
"LEFT JOIN `user` ON information.user_id = `user`.id " +
"WHERE information.`name` LIKE CONCAT('%', #{infoname}, '%') AND information.isdelete = 0" +
// 添加根据 user_id 查询的条件
"<if test='userId != null'>" +
"AND information.user_id = #{userId} " +
"</if>" +
//添加根据是否推荐的条件
"<if test='recommend != null'>" +
"AND information.recommend = #{recommend} " +
"</if>" +
//添加根据是否通过的条件
"<if test='status != null'>" +
"AND information.status = #{status} " +
"</if>" +
// 添加按照 id 从大到小排序的条件
"ORDER BY information.id DESC" +
"</script>")
List<Information> setInformationUsername(@Param("infoname") String infoname,
@Param("userId") Integer userId,
@Param("recommend") Integer recommend,
@Param("status") Integer status);
如果只是简单条件查询,注解方式还是挺快的
这仅仅只是查询两个表,远没有mybatis直接在xml文件写的简洁
然后官网对Invalid bound statement (not found)这个异常建议是这样的
虽然给了五种解决方式(都是针对扫描mapper包的问题),但是一个没解决我的问题。
随着业务需求,这种查询方式过于冗余!
解决方案二:检查mybatis-plus相关配置
pom.xml:
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.1</version>
</dependency>
appplication.yml(这步很关键)
mybatis-plus: #不要写成mybatis
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.yourspackage.entity #写自己的包路径就行
#执行的sql会在控制台打印
logging:
level:
com.yourspackage: DEBUG #写自己的包路径就行
可以愉快的玩耍啦~