美文网首页
Mybatis进阶

Mybatis进阶

作者: 蓝色Hippie | 来源:发表于2020-06-09 14:49 被阅读0次

    一、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();

    相关文章

      网友评论

          本文标题:Mybatis进阶

          本文链接:https://www.haomeiwen.com/subject/dbpxfhtx.html