首先保证正常的分页可以使用,没有缺少配置
然后打开官网查看官方文档MyBatis-Plus——XML自定义分页
由于之前一直用MyBatis-Plus没怎么写过xml,所以在记录一下开发步骤。
1、调整xml位置
2、添加路径配置application.yml
mybatis-plus:
global-config:
type-aliases-package: com.storage.**.entity
mapper-locations: classpath*:mybatis/mapper/**/*.xml
3、在XXMapper.xml
、XXMapper
和XXController
中写入测试代码,验证是否能跑通
/**
* <p>
* Mapper.xml
* </p>
* @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>
/**
* <p>
* Mapper 接口
* </p>
* @author cst
* @since 2021-08-03
*/
@Component
public interface XXMapper extends BaseMapper<XX> {
List<XX> testAt();
}
/**
* <p>
* Controller
* </p>
* @author cst
* @since 2021-08-03
*/
@GetMapping
public Object getAll(){
return XXMapper.testAt();
}
4、成功返回数据
遇到的问题
1、找不到.xml
文件
错误信息org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
在新建包的时候 .
是会变成父子集但是文件夹不行
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);
方案二、按下图中的对应可以请求成功
问题②
使用pojo传参时会遇到参数不匹配的问题
(1)当mapper层有两个参数时
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)补充
这样是可以的