Mybatis(萬能map)
mybatis(萬能map)
我們使用對象作為參數有一個缺點:
- 我們要在mapper.xml文件和測試中要把所有的欄位都寫出來,那麼,假如一個對象有100個欄位,那我們要把這些欄位都寫出來嗎?
所以這時我們就要用到map作為參數
實例:
對象 VS map
介面
int addUser(User user);
int addUser2(Map<String,Object> map);
mapper.xml
<insert id="addUser" parameterType="com.kuang.pojo.User">
insert into mybatis.user (id,name,pwd) values (#{id},#{name },#{pwd});
</insert>
<insert id="addUser2" parameterType="map">
insert into mybatis.user(id,name,pwd)values (#{helloid},#{helloname},#{hellopwd});
</insert>
測試
@Test
public void addUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.addUser(new User(4,"趙六","4664785"));
sqlSession.commit();
sqlSession.close();
}
@Test
public void addUser2(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
HashMap<String, Object> map = new HashMap<>();
map.put("helloid",8);
map.put("helloname","田七");
map.put("hellopwd","5465555");
userMapper.addUser2(map);
sqlSession.close();
}
如果對象中欄位非常多的話,我們寫起來就很麻煩,所以一定要使用map
總結:
- 參數為一個時,我們使用基本類型作為參數
- 參數為多個時,我們使用map作為參數
我今天運行這個測試,怎麼都成功不了,一直報錯,程式碼還是沒有一點問題,經過一番折騰,發現是因為我在的xml文件的注釋中含有中文,萬萬沒有想到這裡都會出錯
解決方法:將UTF-8改為UTF8