解决办法:删除原来的包和target文件,重新建包,编译运行
若编译后 target 内的接口文件和映射文件在同一个文件夹下,那就是其他问题,需要进一步排查
四、mybatis中两种获取参数值的方式
1、#{},其本质为占位符赋值,在为字符串类型的字段赋值时可以自动添加单引号
2、${},其本质为字符串拼接,因此在为字符串类型的字段赋值时需要手动添加单引号
五、mapper接口方法的参数不同情况下的取值方式
1. 若mapper接口方法的参数为单个的字面量类型
#{}和${}都可以通过 任意的名字 获取参数值,但是注意${}的单引号问题
2. 若mapper接口方法的参数为多个的字面量类型
此时mybatis会将这些参数 放在一个map集合中,通过两种方式进行存储:
① 以arg0,arg1...为键,以参数为值
② 以param1,param2...为键,以参数为值
因此就可以通过#{}和${}访问map集合的键的方式,获取相应的值,但是注意${}的单引号问题
3. 若mapper接口方法的参数为多个的字面量类型,可以手动将这些数据放在map中
可以通过#{}和${}访问map集合的键的方式,获取相应的值,但是注意${}的单引号问题
4. 若mapper接口方法的参数为一个实体类对象
可以通过#{}和${}访问实体类中属性的方式,获取相应的属性值,但是注意${}的单引号问题
5. mybatis中提供了一个命名参数的注解 @Param ,可以用来标识 mapper 接口方法的参数。在当使用了此
注解之后,mybatis会自动将参数放在map集合中,通过两种方式存储参数:
a> 以@Param注解的value属性值为键,以参数为值
b> 以param1,param2...为键,以参数为值
<!--
User checkLoginByMap(Map<String, Object> map);
-->
<select id="checkLoginByMap" resultType="User">
select * from t_user where username = #{username} and password = #
{password}
</select>
<!--int insertUser(User user);-->
<insert id="insertUser">
<!--
insert into t_user values(null,#{username},#{password},#{age},#{sex})
-->
insert into t_user values(null,'${username}','${password}',${age},'${sex}')
</insert>