1. 程式人生 > 其它 >Mybatis(Map)

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("李");