使用新技术的时候总会遇到一些很基础的问题,现在又来一个:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.test.shiro.mapper.PermissionMapper.save
at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:225) ~[mybatis-3.4.5.jar:3.4.5]
at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48) ~[mybatis-3.4.5.jar:3.4.5]..........
这里说是找不到save的实现方法。
首先按照一般解决思路先比对namespace
<mapper namespace="com.test.shiro.mapper.PermissionMapper">
<resultMap id="per" type="com.test.shiro.entity.Permission">
<id column="permissionId" jdbcType="INTEGER" property="permissionId" />
<result column="permission" jdbcType="VARCHAR" property="permission" />
</resultMap>
<insert id="save" parameterType="com.test.shiro.entity.Permission" useGeneratedKeys="true" keyProperty="permissionId">
INSERT INTO permission(permissionId,permission) VALUES (#{permissionId},#{permission})
</insert>
</mapper>
package com.test.shiro.mapper;
import com.test.shiro.entity.Permission;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Service;
/**
* @author Created by pangkunkun on 2017/11/20.
*/
@Mapper
@Service
public interface PermissionMapper {
/**
* 新增权限
* @param permission
* */
void save(Permission permission);
}
namespace OK,再比对id(即方法名save),这里也是一样的。
还有mapper.xml的路径和名称,对比后发现一切都OK。
后来实在没办法了,跟以前的项目逐一比对,发现application.properties中忘记了mybatise的两行配置:
mybatis.typeAliasesPackage=com.test.shiro.entity
mybatis.mapperLocations=classpath:mapper/*.xml
主要是mybatis.mapperLocations=classpath:mapper/*.xml
,加上之后OK了,说白了还是不够熟练,注意的地方过多。