Mybatis进阶

2020-06-09  本文已影响0人  蓝色Hippie

一、Mybatis 参数处理

    1.1 单参

           单参数时,Mybatis会直接取出参数值给Mapper文件赋值,如#{id}

            如:DAO层:         void delete (Integer id);

            XML Mapper:<delete> delete from user where id=#{id}  </delete>

    1.2 多参

        三种形式:JavaBean传递参数、Map接口、@param注解

        1.2.1  JavaBean传递参数

             DAO:  User select(User user);// User实体类包含  name、sex属性

             mapper:  <select> select * from user where name=#{name} and sex=#{sex} </select>

        1.2.2 Map接口形式

             DAO:  User select(Map<String,Object> map);// map集合中放入 name、sex以及对应的值

             mapper:  <select> select * from user where name=#{name} and sex=#{sex} </select>

        1.2.3  @param注解

             DAO:  User select(@Param("username") String name,@Param("param2") String sex);

             mapper:  <select> select * from user where name=#{username} and sex=#{param2} </select>

    1.3 集合类型参数

       如:    DAO:  User select(Collection list);

              mapper:  <select> select * from user where name=#{collection[0]} and sex=#{collection[1]} </select>

        PS:可自定义集合的key

        如:      DAO:  User select(@Param("test") int[] arr);

              mapper:  <select> select * from user where name=#{test[0]} and sex=#{test[1]} </select>

二、动态sql

    2.1 foreach

        特点:循环遍历集合,支持数组和List、Set接口,对其提供遍历功能

        配置:collection-要循环的集合;    item-迭代出的每项;

        index-索引;    open\close-以什么开头和结尾;        separator-分隔符;

        如: DAO:  User select(@Param("test") int[] arr);

         mapper: 

         <select> 

        select * from user where  id  in 

        <foreach collection="test"  item="id" index="i" open="("  close=")" separator=",">

        #{id}

        </foreach>

         </select>

三、批量操作

    3.1 、回顾传统 jdbc 批量插入的方式

        两种:使用for循环执行sql插入;

        statement/parestatement中的addBatch,批量提交;

    3.2 、 mybatis批量-1

        借助foreach标签,使用insert into table()

方式1

    3.3 、mybatis批量-2

        借助mysql数据库连接属性 allowMultiQueries=true

        url="jdbc:mysql://localhost:3306/mybatis?allowMultiQueries=true";

方式2

    3.4、mybatis批量-3

        基于sqlsession的ExecutorType进行批量添加

        private static String RESOURCE="mybatis-config.xml";

        InputStream is= Resources.getResourceAsStream(RESOURCE);

        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);

        SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);

        sqlSession .update("updateUser", user);//可利用for循环更新或新增多个用户

        sqlSession.commit();

        sqlSession.close();

上一篇下一篇

猜你喜欢

热点阅读