1、背景
2、运行启动问题
问题一
运行spring boot项目时报错:‘factoryBeanObjectType‘: java.lang.String
解决一
版本问题,springframework版本和mybatis/mybatis-plus版本不兼容。现spring-boot使用3.3.0版本,mybatis-plus使用3.5.7版本(或mybatis使用3.0.3版本),暂无其他兼容性问题。
问题二
运行spring boot项目时报错:Failed to determine a suitable driver class
解决二
在启动类上加上exclude排除自动配置数据源
@SpringBootApplication(exclude= DataSourceAutoConfiguration.class)
未解决
检查配置文件yml或properties
未发现错误的配置
最后解决了,解决方法是将mapper、service、controller等文件夹路径放在与xxxApplication启动类同一路径下,然后不再报错。(之前新建了一个J2EE文件夹,然后将mapper、service、controller文件夹放在了该里面,暂不知道错误原因)
问题三
运行报错:No qualifying bean of type 'com.example.mybatisdemo.mapper.xxxMapper'
解决三
原因是没有将Mapper类的bean注册到IOC中,解决方法是以下二选一:
- 需要在相关Mapper类上加上
@Mapper
或者 - 在启动类上加上mapper路径扫描:
@MapperScan("com.example.mybatisdemo.mapper")
问题四
运行报错:IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
解决四
在启动类设置注解:@SpringBootApplication(exclude= DataSourceAutoConfiguration.class)
导致的。此时要么删除后面的exclude,又或者手动配置数据源
3、xml映射文件问题
问题1
报错Cause: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0)
解决1
中只能包含一条sql语句(且不能有注释),例如删除红框部分的注释。
问题2:#{}和${}的区别
解决2
${}是Properties 文件的变量占位符,进行原样文本替换(sql拼接),可能导致sql注入,尽量避免使用。
#{}是sql语句的参数占位符,相当于原生jdbc流程中的preparedStatement,将#{}替换为?占位符,然后依次对占位符设置参数值。