Mybatis(Map)
阿新 • • 發佈:2021-11-22
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("李");