Mybatis:使用map代替对象传值
在Mybatis中,实体类的属性需要与数据库字段一一映射;
使用对象传值时,
1.
1.
1. SQL语句#{}中的参数名需要与实体类属性名保持一致;
2.
2.
2. SQL语句中的字段个数需要与实体类的构造方法参数个数相同;
所以说用对象传值时有实体类的约束。
使用map传值,在SQL语句中可以自定义字段名,以及字段的个数
map传值通过键值对关联字段,就去除了实体类的约束;
字段个数设置有个前提:数据库中设置字段允许为空;
insert
<mapper namespace="com.tl.dao.UserMapper">
<insert id="addUser" parameterType="map">
insert into user(id,name) values (#{uid},#{pename});
</insert>
</mapper>
public class Test {
@org.junit.Test
public void Test() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("uid",7);
map.put("pename","唐僧");
int i = mapper.addUser(map);
System.out.println(i);
sqlSession.commit();
sqlSession.close();
}
}
update
<?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">
<mapper namespace="com.tl.dao.UserMapper">
<update id="updateUser" parameterType="map">
update user set name=#{pename} where id=#{uid};
</update>
</mapper>
public class Test {
@org.junit.Test
public void Test() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("uid",7);
map.put("pename","至尊宝");
int i = mapper.updateUser(map);
System.out.println(i);
sqlSession.commit();
sqlSession.close();
}
}