使用MyBatis-Plus的XML自定义分页,包含mybatis_xml传参问题、找不到xml问题

首先保证正常的分页可以使用,没有缺少配置

然后打开官网查看官方文档MyBatis-Plus——XML自定义分页

由于之前一直用MyBatis-Plus没怎么写过xml,所以在记录一下开发步骤。
1、调整xml位置
使用MyBatis-Plus的XML自定义分页,包含mybatis_xml传参问题、找不到xml问题_第1张图片
2、添加路径配置application.yml

mybatis-plus:
  global-config:
  type-aliases-package: com.storage.**.entity
  mapper-locations: classpath*:mybatis/mapper/**/*.xml

3、在XXMapper.xmlXXMapperXXController中写入测试代码,验证是否能跑通

/**
 * 

* Mapper.xml *

* @author cst * @since 2021-08-03 */
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.XX.core.person.mapper.XXMapper"> <select id="testAt" resultType="com.XX.core.person.entity.XX"> select * from person; </select> </mapper>
/**
 * 

* Mapper 接口 *

* @author cst * @since 2021-08-03 */
@Component public interface XXMapper extends BaseMapper<XX> { List<XX> testAt(); }
/**
 * 

* Controller *

* @author cst * @since 2021-08-03 */
@GetMapping public Object getAll(){ return XXMapper.testAt(); }

4、成功返回数据
使用MyBatis-Plus的XML自定义分页,包含mybatis_xml传参问题、找不到xml问题_第2张图片


遇到的问题

1、找不到.xml文件

错误信息org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

使用MyBatis-Plus的XML自定义分页,包含mybatis_xml传参问题、找不到xml问题_第3张图片
使用MyBatis-Plus的XML自定义分页,包含mybatis_xml传参问题、找不到xml问题_第4张图片
在新建包的时候 . 是会变成父子集但是文件夹不行

2、找不到参数

问题①

错误信息org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'list' not found. Available parameters are [ids, page, param1, param2]

方案一、在XXmapper中使用@Param("list")指定一下就行

报错时

    IPage<InoculationPersonVO> selectAll(Page<?> page, List<Integer> ids);

修复后

    IPage<InoculationPersonVO> selectAll(Page<?> page, @Param("list") List<Integer> ids);
方案二、按下图中的对应可以请求成功

在这里插入图片描述

使用MyBatis-Plus的XML自定义分页,包含mybatis_xml传参问题、找不到xml问题_第5张图片

问题②

使用pojo传参时会遇到参数不匹配的问题

(1)当mapper层有两个参数时

使用MyBatis-Plus的XML自定义分页,包含mybatis_xml传参问题、找不到xml问题_第6张图片
xml修改前(有参数无法匹配的错误)

<if test="hospital!=null and hospital!=''">
            t2.`name` LIKE concat('%',#{hospital},'%') AND
        </if>

修改后(没有错误)

<if test="userPageVO.hospital!=null and userPageVO.hospital!=''">
            t2.`name` LIKE concat('%',#{userPageVO.hospital},'%') AND
        </if>
(2)当mapper层只有一个参数的时候

在这里插入图片描述
xml修改前(有参数无法匹配的错误)

<if test="rolePageVO.name!=null and rolePageVO.name!=''">
           name like concat('%',#{rolePageVO.name},'%') and
        </if>

修改后(没有错误)

<if test="name!=null and name!=''">
           name like concat('%',#{name},'%') and
</if>
(3)总结:

个人理解是当有两个参数时,xml和mapper匹配时会把这两个参数看成一个新的pojo,所以直接使用原来pojo中的属性会找不到,需要pojiName.属性才能取到值。
当只有一个参数时,这个直接使用该pojo的属性即可
(主要是目前还不太会看源码。。。。)

(4)补充

这样是可以的
使用MyBatis-Plus的XML自定义分页,包含mybatis_xml传参问题、找不到xml问题_第7张图片
使用MyBatis-Plus的XML自定义分页,包含mybatis_xml传参问题、找不到xml问题_第8张图片

你可能感兴趣的:(平时开发的笔记,日常开发的零碎bug,xml,java,spring)