Parameter Maps collection does not contain value for com.liu.domain.User
今天遇到了这个错误,在学习Mybatis实现sql插入的时候出现。
错误原因:
误将ParamType属性写成了ParamMap导致报错。
注:ParamType属性用于指定实体类,在进行插入操作的时候,通常是将实体类中的数据保存到数据库中,当我们指定了实体类,Mybatis会直接将实体类中的对象,插入到sql语句中。
语句:
<insert id="save" parameterType="com.liu.domain.User">
insert into user values (#{id},#{username},#{password})
</insert>
这里需要指定实体类的属性和数据库字段的对应属性:
使用 #{} 的形式,#{id}表示User类的id属性作为数据库的第一个字段属性值。
User user=new User();
user.setId(5);
user.setUsername("tom");
user.setPassword("tomp");
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = build.openSession();
sqlSession.insert("userMap.save",user);
//mybatis默认不提交事务,需要我们手动提交事务
sqlSession.commit();
sqlSession.close();
这里我们new一个User代表业务层传递下来的用于封装数据的实体类对象。
注意:这里Mybatis默认是不会将事务提交的,我们需要手动提交事务,否则插入操作不会成功。(当进行查询操作的时候,是不进行事务管理的,所以查询操作时,即使不进行事务的提交操作,也可以查询成功,commit)