mybatis中的映射文件namespace,今天遇到了一个bug,其他的看了都没什么问题,只记得去查看全局映射文件mybatis-config.xml中的这个resource是否配置正确了,却没想起来去看映射文件本身的命名空间,这两个是一一对应的关系,一个不对,电脑也找不到啊,你要告诉电脑正确的信息
<mappers>
<mapper resource="UserDaoMapper.xml"/>
</mappers>
但是独独提示Caused by: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for UserDaoMapper.deleteUserById
,namespace是全局配置文件能找到的唯一对应的字段,也是映射文件的唯一标识,所以这个一定要对应好啊,
<?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">
<!-- namespace(命名空间):映射文件的唯一标识 -->
<mapper namespace="UserMapper">
<!--一定要记住,要记住,和本文件的名字一致一致,是唯一标识,唯一标识-->
<!-- 查询的statement,id:在同一个命名空间下的唯一标识,resultType:sql语句的结果集封装类型 -->
<!-- sql语句结尾要写;-->
<!-- resultType里面写的是User的copy reference-->
<select id="queryUserById" resultType="cn.itcast.pojo.User">
select * from tb_user where id=#{id};
</select>
<select id="queryUserAll" resultType="cn.itcast.pojo.User">
select * from tb_user;
</select>
<insert id="insertUser" parameterType="cn.itcast.pojo.User">
insert into tb_user(
user_name,
password,
name,
age,
sex,
birthday,
created,
updated
)
values(
#{userName},
#{password},
#{name},
#{age},
#{sex},
#{birthday},
NOW(),
NOW()
);
</insert>
<update id="updateUser" parameterType="cn.itcast.pojo.User">
update tb_user
set
user_name = #{userName},
password = #{password},
name = #{name},
age = #{age},
sex = #{sex},
birthday = #{birthday},
updated = NOW()
where
{id = #{id};
</update>
<delete id="deleteUserById" parameterType="java.lang.Long">
delete from tb_user where id = #{id}
</delete>