菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
330
0

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

原创
05/13 14:22
阅读数 70937

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)数据传输对象进行封装对象,进行传参

发表评论

0/200
330 点赞
0 评论
收藏