初学mybatis产生两个问题:

  1. mybatis传入参数执行SQL语句好像并不是很智能?xml文件中指定parameterType只能是一种数据类型。假设我现在需要执行一条SQL语句,里面有两个参数:一个int类型,一个String类型又该怎么办?

  2. 如果执行SQL语句的数据表中有成千上百个字段,但是真正执行sql语句只需要针对其中两个字段进行更改操作,那么实例化一个pojo的类似乎显得有点小题大做。

其实这两个问题是同一个,就是mybatis能不能像JDBC那样自由指定参数进行执行SQL语句呢?答案是能的,parameterType 可以指定数据类型为map类型。在使用时传入一个map集合类即可。

//接口方法
int map_test(Map<String,Object> map);


//绑定接口方法
<update id="map_test" parameterType="map">
    update user set pwd = #{userpwd} where id = #{userid}
</update>



@Test
public void testmap(){
    SqlSession session = null;
    try{
        Map<String,Object> map = new HashMap<>();
        session = mybatisUtil.getSqlsession();				//加载工具类
        map.put("userid",1);
        map.put("userpwd","111111");
        UserDao mapper = session.getMapper(UserDao.class);
        int i = mapper.map_test(map);
        session.commit();
    } catch (Exception e){
        e.printStackTrace();
    } finally {
        session.close();
    }
}

唯一需要注意的就是xml配置文件中取map的key对应的value时,字段要和传入的一样即可。当遇上大量的数据字段时而又只操作其中的几个时,使用map会简易很多。

更多推荐

mybatis传入map参数