mybatis-plus 问题记录
异常 : java.lang.NoSuchFieldError: CUBRID
原因: jar包冲突
问题出处: maven 聚合工程 PO模块的 mp 的注解包 与 父工程的 mp 包版本不一致导致
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.4</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
<version>3.4.3.4</version>
<scope>compile</scope>
</dependency>
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
1情况报错 描述
(1-1)配置文件正确 `classpath:/mapper/*.xml` 但是启动报错 创建bean时 找不到xml ;
(1-2)配置文件 加上了星号 `classpath*:*/mapper/*.xml`启动不报错; 但是运行查询语句 找不到XXmapper的查询方法
(1-3) 去除@MapperScan , mapper上添加 @Mapper 报错 找不到 创建xxmapper
最后3.4.3.1 升级到 3.5.1 配置文件是它(根据情况自行配置) `classpath:/mapper/*.xml` 正常运行
仔细检查你的 XML 对应情况 1-1 的配置正确 ,启动报错 创建bean时 找不到xml ;
这个XMl是肯定有问题的;
mapper的 namespace
resultMap的 type 对应的 pojo 路劲 (type 的类型别名 检查)
-检查配置
(1-) 启动类开启扫描 @MapperScan(“org.example.xxx.mapper”) 正确
@SpringBootApplication(scanBasePackages = {"org.xx.xx.**"})
@MapperScan("org.xx.xx.mapper") //是否正确
@EnableConfigurationProperties
(2)- xml 中配置的
namespace 对应的mapper 路劲正确
<mapper namespace="org.xx.xxx.mapper.XXMapper">
resultMap type 对应的 pojo 路劲 正确
<resultMap id="XResultMap" type="org.xx.xxx.pojo.XX">
sql id 是否对应 mapper 方法名
<select id="pageXX" parameterType="org.example.xx.xx.XXQuery" resultMap="XResultMap">
(3)- properties , yml文件中的 mapper.xml文件路劲配置
根据情况使用
默认的
mybatis-plus.mapper-locations=classpath*:/mapper/**/*.xml
自行根据情况修改
mybatis-plus.mapper-locations=classpath:/mapper/*.xml
mybatis-plus.mapper-locations=classpath*:*/mapper/*.xml
classpath* 代表 扫描 maven多个模块 下的
/**/ 多个或零个任意名称文件夹下
对于IDEA系列编辑器,XML 文件是不能放在 java 文件夹中的,IDEA 默认不会编译源码文件夹中的 XML 文件,可以参照以下方式解决:
将配置文件放在 resource 文件夹中
对于 Maven 项目,可指定 POM 文件的 resource
<build>
<resources>
<resource>
<!-- xml放在java目录下-->
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<!--指定资源的位置(xml放在resources下,可以不用指定)-->
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
Error creating bean with name ‘***’ defined in file
- 查看 mapper.java 映射的 xml文件是否存在多个
The alias ‘xxx’ is already mapped to the value ‘..xxx’
mybatis-plus:
type-aliases-package: 扫描下 相同的类名 存在多个
Has been loaded by XML or SqlProvider or Mybatis‘s Annotation, so ignoring this injection for
Mybatis-plus 自动生成的sql 执行方法 与 你自定义的 sql方法名 产生冲突;
-Parsed mapper file:‘file [D:xxxx\sys-db\target\classes\mapper\sys\SysUserRoleMapper.xml]’
-未知
1 - 版本问题
2- 配置问题 , xml 路劲扫描问题
根据情况使用
默认的
mybatis-plus.mapper-locations=classpath*:/mapper/**/*.xml
自行根据情况修改
mybatis-plus.mapper-locations=classpath:/mapper/*.xml
mybatis-plus.mapper-locations=classpath*:*/mapper/*.xml
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: “@P0”附近有语法错误。**
本案是 mssql --sqlserver 2012数据库
生成的语法 SELECT MOId FROM MO OFFSET ? ROWS FETCH NEXT ? ROWS ONLY
sql 正确语法示例 --order by ArtistId offset 页数 rows fetch next 条数 rows only –
缺少 orderby xx desc 需要添加 QueryWrapper.orderByDesc(“ID”);
mssql --sqlserver 数据库 offset 页数 rows fetch next 条数 rows only分页 必须加 排序规则 (orderby xx desc or asc)
数组越界问题
Error querying database. Cause: java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
The error may exist in file [D:xxxx\target\classes\mapper\XXMapper.xml]
The error may involve com.fb.sysmes.dao.XXMapper.pageXXX-Inline
The error occurred while setting parameters
解决1-
上述数组越界问题 - 首先是自己写的 动态分页 没有用 其他的分页插件;
本案是 mssql --sqlserver数据库
注意 # 与$ 的区别 分页需要使用 $
pageModel.page pageModel.size 为int类型
<if test="pageModel.page != null and pageModel.size != null ">
order by xx.Id desc
OFFSET ${pageModel.page} ROWS FETCH NEXT ${pageModel.size} ROWS ONLY ;
</if>
为啥不用分页插件–数据分页 一直在报错 似乎是
org.apache.shardingsphere ,
mssql ,
mybatiisplus 的分页插件 , (setxx 字段 为空)
分页插件pagehelpe-springboot版 (不显示 banner , setxx 为空)
都存在兼容问题…
问题出处 ------shardingsphere 的sql 有限制 子查询不可以用 函数.
2- 其他博客看到的数组越界问题异常 注意点-- POJO类上 必须存在 无参构造;
Mybatis框架会调用这个默认无参构造器来构造实例对象,即实体类需要通过Mybatis进行动态反射生成。反射的Class.forName(“className”).newInstance();需要对应的类提供一个无参构造器
3- 查询的 结果 为多个 , 返回接收类型 不是 List