首先我们要知道为什么要用Map传递参数?
我们之前一直是直接用对象传递参数,也很方便,但是会出现问题,就是当表的字段非常多的时候,当我们只需要对个别字段进行操作时,却还是只能实例化整个对象的所有数据,会造成不必要的资源浪费和麻烦。
而用map你要用什么参数就写什么参数,用实体类的话new的时候要写所有的成员,用map 就会省下很多写构造方法的无用操作。但实际上我们只会用到一些,当表的成员变多的时候,map的优势就能体现了。
Map传递参数,直接在sql中取到key即可。
对象传递参数,直接在sql中取对象的属性名。
看代码
int addMapUser(Map<String,Object> map);
int updateMapUser(Map<String, Object> map);
<update id="updateMapUser" parameterType="map">
update user set name=#{username} where id=#{userid}
</update>
<!-- 对象里面的值可以用map.get取到, 传递map的key-->
<!-- 而且用map的话如果传输数据非法会报错的-->
<insert id="addMapUser" parameterType="map">
insert into user(id,pwd) value (#{userid},#{userpwd})
</insert>
@Test
public void updateMapUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
Map<String,Object> map=new HashMap<>();
map.put("userid",6);
map.put("username","xiaocheng");
mapper.updateMapUser(map);
sqlSession.commit();
sqlSession.close();
}
@Test
public void addMapUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
Map<String, Object> map = new HashMap<>();
map.put("userid",6);
map.put("userpwd","11111");
mapper.addMapUser(map);
sqlSession.commit();
sqlSession.close();
}
思考怎么写模糊查询?
1.java代码执行时,传递通配符
List<User> userList=mapper.getUerList("%李%");
2.在sql拼接中使用通配符
select * from mybatis.user where name like "%"#{value} "%"