Mybatis(Map)

Map

假设,我们的实体类,或者数据库中的表,字段或参数过多,我们应当考虑使用map

创建接口

 //万能的mapper,我们不需要知道数据库里面有什么,是一个键值对的表现
    //我们只需查询对应的字段
    int addUser2(Map<String,Object> map);

写xml文档

<insert id="addUser2" parameterType="map">
 insert into mybatis.user(id,name,pwd)values (#{userid},#{userName},#{password})
</insert>

测试

public void addUser2(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        HashMap<String, Object> map= new HashMap<String, Object>();
        map.put("userid",5);
        map.put("userName",5);
        map.put("password",123456);
        mapper.addUser2(map);
        sqlSession.close();
    }

总结:
使用场景:类中的属性较多时;但你要修改其中的一个或少数几个时候用map,new对象要给每一个参数赋值,比较麻烦。
Map传递参数,直接在sql中取出key即可!【parameterType ="map"】
对象传递参数,直接在sql中取对象的属性即可。【parameterType="Object"】
只有一个基本类型参数的情况下,可以直接在sql中取到。
多个参数用Map,或者注解!

思考题:

模糊查询

编写接口

 List<User> getUserLike(String name);

写xml文件标签属性

 <select id="getUserLike" resultType="com.my.pojo.User">
    select *from mybatis.user where name like #{value}
 </select>

测试

public void getUserLike() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.getUserLike("%李%");
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();
    }

注意

1.java代码执行的时候,传递通配符% %

 select *from mybatis.user where name like #{value}
 List<User> userList = mapper.getUserLike("%李%");

2.#{}底层就是Preparestatement,先编译sql语句在取值
如果使用${}片段注入,才会存在sql注入,就是取值以后再去编译语句

 select *from mybatis.user where name like "%"#{value}"%"
 List<User> userList = mapper.getUserLike("李");
上一篇:Python番外之 阻塞非阻塞,同步与异步,i/o模型


下一篇:Mybatis入门篇