8、mybatis学习——sqlmapper配置文件参数处理(单个参数,多个参数,命名参数)

1、单个参数时

  

 此时sqlMapper中的配置

  

 或者

  

 都可以;因为参数只有一个,不会混乱,只有单个参数时红框中的取名可随意

2、多个参数时

    mapper接口中的方法:

  

     sqlmapper中的配置:

    <!-- 多个参数时,mybatis会做特殊处理;多个参数会被封装成一个map
      key:param1,param2,.......paramN
      value:传入的参数值
      #{ }就是从map中获取指定key的值 -->
    <select id="selectEmpByIdAndName" resultType="employee">
        select * from employee where id = #{param1} and name = #{param2}
    </select>

3、多个参数时(命名参数方式)

    mapper接口中的方法:利用@Param配置进行命名参数

     sqlmapper中的配置:

    <!-- 多个参数命名方式 -->
    <select id="selectEmpByIdAndName" resultType="employee">
        select * from employee where id = #{id} and name = #{name}
    </select>

4、参数为POJO类

  mapper接口中的方法:

   sqlmapper中的配置:

  #{属性名}:取出传入的pojo的对应属性值

    <insert id="addEmp" parameterType="employee" >
        insert into employee(name,gender) values(#{name},#{gender})
    </insert>

5、如果多个参数不是业务模型中的数据,没有对应的pojo,(这些参数不经常使用的前提下为了方便,也可以直接传入map(不用@Param注解时,mybatis默认把多个参数封装在一个map中),自己封装可以指定key值;可以和上面第二点对比

  mapper接口中的方法:

  sqlmapper中的配置

    <select id="selectEmpByIdAndName" resultType="employee">
        select * from employee where id = #{idtest} and name = #{nametest}
    </select>

  测试方法中传入map

    @Test
    public void test3() throws IOException {
        String source = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(source);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        
        //获取sqlSession实例,能直接执行映射的sql语句
        SqlSession sqlSession = sqlSessionFactory.openSession();
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
        Map map = new HashMap();
        map.put("idtest", 1);
        map.put("nametest", "xiaohon");
        Employee employee = employeeMapper.selectEmpByIdAndName(map);
        System.out.println(employee);
        sqlSession.close();
    }

6、如果多个参数不是业务模型中的数据,没有对应的pojo,(另外这些参数经常使用),可以编写一个TO(Transfer Object)数据传输对象进行封装对象,进行传参

posted @ 2020-02-21 18:20  Arbitrary233  阅读(1087)  评论(0编辑  收藏  举报