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

Tags: