MyBatis如何实现动态SQL和多参数组合查询?

2026-05-26 00:421阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2422个文字,预计阅读时间需要10分钟。

MyBatis如何实现动态SQL和多参数组合查询?

目录 + MyBatis动态SQL + 动态SQL处理简单多参数查询 + 动态SQL更新功能 + 动态SQL扩展 + 动态SQL处理集合参数 + foreach标签处理数组类型参数 + foreach标签处理List类型参数 + foreach标签处理Map类型参数

目录
  • MyBatis动态sql
    • 动态sql处理简单的多参数查询
    • 动态sql处理更新功能
  • 动态sql扩展
    • 动态sql处理集合参数
      • foreach标签处理数组类型参数
      • foreach标签处理List类型参数
      • foreach标签处理Map类型参数
    • 分页功能
      • 基于MySql的分页查询

    MyBatis动态sql

    动态sql处理简单的多参数查询

    常用标签

    标签说明if条件判断,与java中的if语句类似where为sql语句动态添加where关键字choose条件判断,这是一个组合标签,需要与when,otherwise标签搭配使用。foreach以迭代方式处理集合类型的参数set为sql语句动态添加set关键字,动态实现数据更新trim对sql语句进行格式化处理,添加或移除前后缀

    if标签

    语法

    <if test="条件判断"> ....Sql语句 </if> <!--如果test内容为true则执行if内的sql语句,反之则不执行-->

    where标签

    MyBatis如何实现动态SQL和多参数组合查询?

    语法

    <where>     <if test="条件判断">     ....Sql语句     </if> </where> <!--where标签用来替换sql语句中where关键词-->

    Eg:

        //接口中     /**      * 根据名称,编码模糊查      * @param name      * @param code      * @return      */     List<SmbmsProvider> listbyCodeAndName(@Param("name")String name,                                           @Param("code")String code);    

        <!--相应的mapper映射文件-->     <!--因为传入的参数是基本数据类型,所以parameterType属性可省略--> <select id="listbyCodeAndName" resultType="com.smbms.pojo.SmbmsProvider">         select * from  smbms_provider     <!--where标签 代替sql中的where关键词-->         <where>             <!--符合if条件的则执行相应的sql语句-->             <if test="name!=null"> and proName like concat('%',#{name},'%')                 </if>             <if test="code!=null"> and proCode like concat('%',#[code],'%')</if>         </where>     </select>

        //测试类      @Test     void listbyCodeAndName() {         List<SmbmsProvider> list=mapper.listbyCodeAndName("北","0");         for (SmbmsProvider smbmsProvider : list) {             System.out.println(smbmsProvider.getProName());         }     }

    choose(when,otherwise)标签

    语法

    <choose>     <when test="判断条件">             sql语句...     </when>     <when test="判断条件">          sql语句...     </when>     <otherwise>          sql语句...     </otherwise> </choose> <!--此标签相当于java中的switch语句功能-->

    总结:

    ​ 1,choose(when,otherwise)是一个组合标签,when和otherwise写在choose标签中。

    ​ 2,当when标签中的test属性判断为true,就会执行他所包含的语句。

    ​ 3,choose中的多个when标签指挥执行匹配成功的第一个,执行之后就跳出choose标签。

    ​ 4,当所有的when标签中的test属性判断都为false时,进入otherwise标签。

    Eg:

        //接口中定义方法     /**      *多参查找      * @param map      * @return      */     List<SmbmsProvider> listByMoreParam(Map<String,Object> map);

    <!--相应的mapper映射文件--> <select id="listByMoreParam" parameterType="map" resultType="com.smbms.pojo.SmbmsProvider">         select * from smbms_provider         <where>             <!--多选一的choose标签-->             <choose>                 <when test="name!=null and name!=''"> and proName LIKE         CONCAT('%',#{name},'%')</when>                 <when test="code!=null and code!=''"> and proCode LIKE CONCAT('%',#[code],'%')</when>                 <when test="contact!=null and contact!=''"> and proName LIKE CONCAT('%',#{proContact},'%')</when>                  <otherwise> and YEAR(creationDate) = YEAR(#{creationDate})</otherwise>             </choose>         </where>     </select>

        //测试类     @Test     void listByMoreParam() {         try {             Map<String,Object> map=new HashMap<>();             map.put("name","优百");             map.put("code","002");             map.put("contact",null);             map.put("creationDate",new SimpleDateFormat("yyyy-MM-dd").parse("2013-03-21"));             List<SmbmsProvider> list=mapper.listByMoreParam(map);             for (SmbmsProvider smbmsProvider : list) {                 System.out.println(smbmsProvider.getProName());             }         } catch (ParseException e) {             e.printStackTrace();         }     }

    动态sql处理更新功能

    set标签

    语法

    <set>     <if test="判断条件">         sql语句...     </if> </set>

    Eg:

        //接口中的方法     /**      *修改的方法      * @param provider      * @return      */     int updateProviderInfo(SmbmsProvider provider);

    <!--相应的mapper映射文件--> <update id="updateProviderInfo" parameterType="com.smbms.pojo.SmbmsProvider">         update `smbms_provider`     <!--set标签可以智能的忽略多余的逗号-->         <set>             <if test="proCode!=null">proCode=#{proCode},</if>             <if test="proName!=null">proName=#{proName},</if>             <if test="proDesc!=null">proDesc=#{proDesc},</if>             <if test="proContact!=null">proContact=#{proContact},</if>             <if test="proPhone!=null">proPhone=#{proPhone},</if>             <if test="proAddress!=null">proAddress=#{proAddress},</if>             <if test="proFax!=null">proFax=#{proFax},</if>             <if test="createdBy!=null">createdBy=#{createdBy,</if>             <if test="creationDate!=null">creationDate=#{creationDate},</if>             <if test="modifyDate!=null">modifyDate=#{modifyDate},</if>             <if test="modifyBy!=null">modifyBy=#{modifyBy},</if>         </set>          where id=#{id}     </update>     <!--此方法中的if判断条件针对的是传入对象参数中部分属性有值-->

        //测试类       @Test     void updateProviderInfo() {         result= mapper.updateProviderInfo(new SmbmsProvider("aaaa","sdsd",15L));         System.out.println(result);     }

    ​总结:

    where,set标签能够动态的为sql语句添加前后缀,并可以只能的忽略标签前后多余的and,or或者逗号等字符。

    动态sql扩展

    trim标签

    语法

    <trim prefix="前缀" suffix="后缀" prefixOverrides="忽略前缀" suffixOverrides="忽略后缀">     .... </trim>

    其属性介绍

    属性说明perfix前缀,可自动对trim标签所包含的语句是否有返回值进行判断,如果有返回值,则为sql语句拼接相应前缀suffix后缀,在trim标签包含的语句末尾拼接后缀。prefixOverrides忽略的前缀,忽略trim标签内部首部指定的内容。此属性中字符 | 意为 或 。字符 ‘|’ 与前后的字符之间不能有空格。suffixOverrides忽略的后缀,忽略trim标签包含内容尾部指定的内容。

    eg:

    <!--相应的mapper映射文件--> <update id="updateProviderInfo" parameterType="com.smbms.pojo.SmbmsProvider"> update `smbms_provider` <!--使用冬天标签进行修改操作--> <trim prefix="set" suffixOverrides="," suffix=" where id=#{id}"> <if test="proCode!=null">proCode=#{proCode},</if> <if test="proName!=null">proName=#{proName},</if> <if test="proDesc!=null">proDesc=#{proDesc},</if> <if test="proContact!=null">proContact=#{proContact},</if> <if test="proPhone!=null">proPhone=#{proPhone},</if> <if test="proAddress!=null">proAddress=#{proAddress},</if> <if test="proFax!=null">proFax=#{proFax},</if> <if test="createdBy!=null">createdBy=#{createdBy,</if> <if test="creationDate!=null">creationDate=#{creationDate},</if> <if test="modifyDate!=null">modifyDate=#{modifyDate},</if> <if test="modifyBy!=null">modifyBy=#{modifyBy},</if> </trim> </update>

    动态sql处理集合参数

    语法:

        <foreach collection="参数名称" item="元素别名"          open="(" separator="," close=")" index="当前元素位置下标">             #{元素别名}     </foreach>

    其属性介绍

    属性说明item为集合或数组中的元素取的别名。open起始位置的拼接字符,表示in语句以 ( 开始。separator元素之间的连接符,表示 in 语句中的元素之间以 ,连接。close结束位置的拼接字符,表示 in语句以 )结束。collection参数名称当参数类型为数组时,默认参数名为array。当参数类型为list集合时,默认参数为list。当参数类型为Map集合时,参数名为Map集合元素所在键值对的key。当参数类型为对象时,参数名为对象中集合类型的属性名。

    foreach标签处理数组类型参数

        //接口中的方法     /**      * 同时查询多个供货商关联的入库单列表数据      * @param args      * @return      */     List<SmbmsBill> listBySomeProviderId(Integer [] args);

        <!--相应的mapper映射文件-->    <select id="listBySomeProviderId" resultType="com.smbms.pojo.SmbmsBill">         SELECT *         FROM `smbms_bill`         WHERE `providerId`  in          <foreach collection="array" item="item" open="(" separator="," close=")" >             #{item}         </foreach>     </select>

        //测试类       @Test     void listBySomeProviderId() {         Integer []  someId={1,2,3};         List<SmbmsBill> list= billMapper.listBySomeProviderId(someId);         System.out.println(list.size());         for (SmbmsBill bill : list) {             System.out.println(bill.getProductName());         }     }

    foreach标签处理List类型参数

    //相应接口     /**      * 查询多个供货商关联的入库单列表数据参数未list集合      * @param list      * @return      */     List<SmbmsBill> listBySomeProviderIdInList(@Param("list")List<Integer> list);

        <!--相应的mapper映射文件-->     <select id="listBySomeProviderIdInList" resultType="com.smbms.pojo.SmbmsBill">         SELECT *         FROM `smbms_bill`         WHERE `providerId`  in         <foreach collection="list" item="item" open="(" separator="," close=")" >             #{item}         </foreach>     </select>

        //测试类      @Test     void listBySomeProviderIdInList() {         List<Integer> listParam=new ArrayList<>();         listParam.add(1);         listParam.add(2);         listParam.add(3);         List<SmbmsBill> list= billMapper.listBySomeProviderIdInList(listParam);         System.out.println(list.size());         for (SmbmsBill bill : list) {             System.out.println(bill.getProductName());         }     }

    foreach标签处理Map类型参数

        //接口中的方法     /**      * 多参数查询条件封装Map入参      * @param map      * @return      */     List<SmbmsBill> listByCodeAndSomeProviderId(Map<String,Object> map);1

    <!--相应的mapper映射文件-->         <!--入参类型为map-->      <select id="listByCodeAndSomeProviderId" parameterType="map"               resultType="com.smbms.pojo.SmbmsBill">         SELECT *         FROM `smbms_bill`         <where>             <!--code为map集合中的key-->             <if test="code!=null">                 AND `billCode` LIKE CONCAT('%',#[code],'%')             </if>             <if test="providerIds!=null">                 AND `providerId` IN                      <!--providerIds为map集合中的key-->                 <foreach collection="providerIds"                          open="(" separator="," close=")" item="items">                     #{items}                 </foreach>             </if>         </where>     </select>

        //测试类      @Test     void listByCodeAndSomeProviderId() {         List<Integer> providerIds=new ArrayList<>();         providerIds.add(1);         providerIds.add(2);         providerIds.add(3);         Map<String,Object> map=new HashMap<>();         map.put("providerIds",providerIds);         map.put("code","1");         List<SmbmsBill> list= billMapper.listByCodeAndSomeProviderId(map);         System.out.println(list.size());     }

    注意:

    1,当参数为基本数据类型或数组,List集合类型时,myBatis框架会将参数封装在一个Map对象中。

    2,当参数为数组时,collection对应值默认为array.

    3,当参数为List集合类型时,collection对应值默认为list.

    4,当参数为Map对象时,collection对应值为该Map对象中数组或集合元素对应的key.

    5,如果使用@Param注解为参数设置了名称,collection对应值为参数名。

    6,当参数为对象类型时,独享中有查询条件所需的集合属性,collection对应值为该集合属性名称。

    分页功能

    基于MySql的分页查询

    //相应接口 /** * 分页查询---多条件 * @param newsId 根据类型id * @param title 根据标题名称模糊查 * @param startRow 其实行号 * @param pageSize 每页显示数量 * @return 返回集合 */ List<NewsDetail> listByPageInMoreParam(@Param("newsId")int newsId, @Param("title")String title, @Param("startRow")int startRow, @Param("pageSize")int pageSize);

    <!--相应的mapper映射文件--> <select id="listByPageInMoreParam" resultType="com.news.pojo.NewsDetail"> SELECT * FROM `news_detail` <where> <if test="title != null and title != ''"> and `title` LIKE CONCAT('%',#{title},'%') </if> <if test="newsId != null and newsId!=-1"> AND `categoryId`=#{newsId} </if> </where> limit #{startRow} ,#{pageSize} </select>

    //测试类 @Test void listByPageInMoreParam() { NewDetailMapper mapper= MyBatisUtil.getSqlSession().getMapper(NewDetailMapper.class); List<NewsDetail> list= mapper.listByPageInMoreParam(2,null,0,2); System.out.println(list.size()); for (NewsDetail detail : list) { System.out.println(detail.getTitle()); } }

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。

    本文共计2422个文字,预计阅读时间需要10分钟。

    MyBatis如何实现动态SQL和多参数组合查询?

    目录 + MyBatis动态SQL + 动态SQL处理简单多参数查询 + 动态SQL更新功能 + 动态SQL扩展 + 动态SQL处理集合参数 + foreach标签处理数组类型参数 + foreach标签处理List类型参数 + foreach标签处理Map类型参数

    目录
    • MyBatis动态sql
      • 动态sql处理简单的多参数查询
      • 动态sql处理更新功能
    • 动态sql扩展
      • 动态sql处理集合参数
        • foreach标签处理数组类型参数
        • foreach标签处理List类型参数
        • foreach标签处理Map类型参数
      • 分页功能
        • 基于MySql的分页查询

      MyBatis动态sql

      动态sql处理简单的多参数查询

      常用标签

      标签说明if条件判断,与java中的if语句类似where为sql语句动态添加where关键字choose条件判断,这是一个组合标签,需要与when,otherwise标签搭配使用。foreach以迭代方式处理集合类型的参数set为sql语句动态添加set关键字,动态实现数据更新trim对sql语句进行格式化处理,添加或移除前后缀

      if标签

      语法

      <if test="条件判断"> ....Sql语句 </if> <!--如果test内容为true则执行if内的sql语句,反之则不执行-->

      where标签

      MyBatis如何实现动态SQL和多参数组合查询?

      语法

      <where>     <if test="条件判断">     ....Sql语句     </if> </where> <!--where标签用来替换sql语句中where关键词-->

      Eg:

          //接口中     /**      * 根据名称,编码模糊查      * @param name      * @param code      * @return      */     List<SmbmsProvider> listbyCodeAndName(@Param("name")String name,                                           @Param("code")String code);    

          <!--相应的mapper映射文件-->     <!--因为传入的参数是基本数据类型,所以parameterType属性可省略--> <select id="listbyCodeAndName" resultType="com.smbms.pojo.SmbmsProvider">         select * from  smbms_provider     <!--where标签 代替sql中的where关键词-->         <where>             <!--符合if条件的则执行相应的sql语句-->             <if test="name!=null"> and proName like concat('%',#{name},'%')                 </if>             <if test="code!=null"> and proCode like concat('%',#[code],'%')</if>         </where>     </select>

          //测试类      @Test     void listbyCodeAndName() {         List<SmbmsProvider> list=mapper.listbyCodeAndName("北","0");         for (SmbmsProvider smbmsProvider : list) {             System.out.println(smbmsProvider.getProName());         }     }

      choose(when,otherwise)标签

      语法

      <choose>     <when test="判断条件">             sql语句...     </when>     <when test="判断条件">          sql语句...     </when>     <otherwise>          sql语句...     </otherwise> </choose> <!--此标签相当于java中的switch语句功能-->

      总结:

      ​ 1,choose(when,otherwise)是一个组合标签,when和otherwise写在choose标签中。

      ​ 2,当when标签中的test属性判断为true,就会执行他所包含的语句。

      ​ 3,choose中的多个when标签指挥执行匹配成功的第一个,执行之后就跳出choose标签。

      ​ 4,当所有的when标签中的test属性判断都为false时,进入otherwise标签。

      Eg:

          //接口中定义方法     /**      *多参查找      * @param map      * @return      */     List<SmbmsProvider> listByMoreParam(Map<String,Object> map);

      <!--相应的mapper映射文件--> <select id="listByMoreParam" parameterType="map" resultType="com.smbms.pojo.SmbmsProvider">         select * from smbms_provider         <where>             <!--多选一的choose标签-->             <choose>                 <when test="name!=null and name!=''"> and proName LIKE         CONCAT('%',#{name},'%')</when>                 <when test="code!=null and code!=''"> and proCode LIKE CONCAT('%',#[code],'%')</when>                 <when test="contact!=null and contact!=''"> and proName LIKE CONCAT('%',#{proContact},'%')</when>                  <otherwise> and YEAR(creationDate) = YEAR(#{creationDate})</otherwise>             </choose>         </where>     </select>

          //测试类     @Test     void listByMoreParam() {         try {             Map<String,Object> map=new HashMap<>();             map.put("name","优百");             map.put("code","002");             map.put("contact",null);             map.put("creationDate",new SimpleDateFormat("yyyy-MM-dd").parse("2013-03-21"));             List<SmbmsProvider> list=mapper.listByMoreParam(map);             for (SmbmsProvider smbmsProvider : list) {                 System.out.println(smbmsProvider.getProName());             }         } catch (ParseException e) {             e.printStackTrace();         }     }

      动态sql处理更新功能

      set标签

      语法

      <set>     <if test="判断条件">         sql语句...     </if> </set>

      Eg:

          //接口中的方法     /**      *修改的方法      * @param provider      * @return      */     int updateProviderInfo(SmbmsProvider provider);

      <!--相应的mapper映射文件--> <update id="updateProviderInfo" parameterType="com.smbms.pojo.SmbmsProvider">         update `smbms_provider`     <!--set标签可以智能的忽略多余的逗号-->         <set>             <if test="proCode!=null">proCode=#{proCode},</if>             <if test="proName!=null">proName=#{proName},</if>             <if test="proDesc!=null">proDesc=#{proDesc},</if>             <if test="proContact!=null">proContact=#{proContact},</if>             <if test="proPhone!=null">proPhone=#{proPhone},</if>             <if test="proAddress!=null">proAddress=#{proAddress},</if>             <if test="proFax!=null">proFax=#{proFax},</if>             <if test="createdBy!=null">createdBy=#{createdBy,</if>             <if test="creationDate!=null">creationDate=#{creationDate},</if>             <if test="modifyDate!=null">modifyDate=#{modifyDate},</if>             <if test="modifyBy!=null">modifyBy=#{modifyBy},</if>         </set>          where id=#{id}     </update>     <!--此方法中的if判断条件针对的是传入对象参数中部分属性有值-->

          //测试类       @Test     void updateProviderInfo() {         result= mapper.updateProviderInfo(new SmbmsProvider("aaaa","sdsd",15L));         System.out.println(result);     }

      ​总结:

      where,set标签能够动态的为sql语句添加前后缀,并可以只能的忽略标签前后多余的and,or或者逗号等字符。

      动态sql扩展

      trim标签

      语法

      <trim prefix="前缀" suffix="后缀" prefixOverrides="忽略前缀" suffixOverrides="忽略后缀">     .... </trim>

      其属性介绍

      属性说明perfix前缀,可自动对trim标签所包含的语句是否有返回值进行判断,如果有返回值,则为sql语句拼接相应前缀suffix后缀,在trim标签包含的语句末尾拼接后缀。prefixOverrides忽略的前缀,忽略trim标签内部首部指定的内容。此属性中字符 | 意为 或 。字符 ‘|’ 与前后的字符之间不能有空格。suffixOverrides忽略的后缀,忽略trim标签包含内容尾部指定的内容。

      eg:

      <!--相应的mapper映射文件--> <update id="updateProviderInfo" parameterType="com.smbms.pojo.SmbmsProvider"> update `smbms_provider` <!--使用冬天标签进行修改操作--> <trim prefix="set" suffixOverrides="," suffix=" where id=#{id}"> <if test="proCode!=null">proCode=#{proCode},</if> <if test="proName!=null">proName=#{proName},</if> <if test="proDesc!=null">proDesc=#{proDesc},</if> <if test="proContact!=null">proContact=#{proContact},</if> <if test="proPhone!=null">proPhone=#{proPhone},</if> <if test="proAddress!=null">proAddress=#{proAddress},</if> <if test="proFax!=null">proFax=#{proFax},</if> <if test="createdBy!=null">createdBy=#{createdBy,</if> <if test="creationDate!=null">creationDate=#{creationDate},</if> <if test="modifyDate!=null">modifyDate=#{modifyDate},</if> <if test="modifyBy!=null">modifyBy=#{modifyBy},</if> </trim> </update>

      动态sql处理集合参数

      语法:

          <foreach collection="参数名称" item="元素别名"          open="(" separator="," close=")" index="当前元素位置下标">             #{元素别名}     </foreach>

      其属性介绍

      属性说明item为集合或数组中的元素取的别名。open起始位置的拼接字符,表示in语句以 ( 开始。separator元素之间的连接符,表示 in 语句中的元素之间以 ,连接。close结束位置的拼接字符,表示 in语句以 )结束。collection参数名称当参数类型为数组时,默认参数名为array。当参数类型为list集合时,默认参数为list。当参数类型为Map集合时,参数名为Map集合元素所在键值对的key。当参数类型为对象时,参数名为对象中集合类型的属性名。

      foreach标签处理数组类型参数

          //接口中的方法     /**      * 同时查询多个供货商关联的入库单列表数据      * @param args      * @return      */     List<SmbmsBill> listBySomeProviderId(Integer [] args);

          <!--相应的mapper映射文件-->    <select id="listBySomeProviderId" resultType="com.smbms.pojo.SmbmsBill">         SELECT *         FROM `smbms_bill`         WHERE `providerId`  in          <foreach collection="array" item="item" open="(" separator="," close=")" >             #{item}         </foreach>     </select>

          //测试类       @Test     void listBySomeProviderId() {         Integer []  someId={1,2,3};         List<SmbmsBill> list= billMapper.listBySomeProviderId(someId);         System.out.println(list.size());         for (SmbmsBill bill : list) {             System.out.println(bill.getProductName());         }     }

      foreach标签处理List类型参数

      //相应接口     /**      * 查询多个供货商关联的入库单列表数据参数未list集合      * @param list      * @return      */     List<SmbmsBill> listBySomeProviderIdInList(@Param("list")List<Integer> list);

          <!--相应的mapper映射文件-->     <select id="listBySomeProviderIdInList" resultType="com.smbms.pojo.SmbmsBill">         SELECT *         FROM `smbms_bill`         WHERE `providerId`  in         <foreach collection="list" item="item" open="(" separator="," close=")" >             #{item}         </foreach>     </select>

          //测试类      @Test     void listBySomeProviderIdInList() {         List<Integer> listParam=new ArrayList<>();         listParam.add(1);         listParam.add(2);         listParam.add(3);         List<SmbmsBill> list= billMapper.listBySomeProviderIdInList(listParam);         System.out.println(list.size());         for (SmbmsBill bill : list) {             System.out.println(bill.getProductName());         }     }

      foreach标签处理Map类型参数

          //接口中的方法     /**      * 多参数查询条件封装Map入参      * @param map      * @return      */     List<SmbmsBill> listByCodeAndSomeProviderId(Map<String,Object> map);1

      <!--相应的mapper映射文件-->         <!--入参类型为map-->      <select id="listByCodeAndSomeProviderId" parameterType="map"               resultType="com.smbms.pojo.SmbmsBill">         SELECT *         FROM `smbms_bill`         <where>             <!--code为map集合中的key-->             <if test="code!=null">                 AND `billCode` LIKE CONCAT('%',#[code],'%')             </if>             <if test="providerIds!=null">                 AND `providerId` IN                      <!--providerIds为map集合中的key-->                 <foreach collection="providerIds"                          open="(" separator="," close=")" item="items">                     #{items}                 </foreach>             </if>         </where>     </select>

          //测试类      @Test     void listByCodeAndSomeProviderId() {         List<Integer> providerIds=new ArrayList<>();         providerIds.add(1);         providerIds.add(2);         providerIds.add(3);         Map<String,Object> map=new HashMap<>();         map.put("providerIds",providerIds);         map.put("code","1");         List<SmbmsBill> list= billMapper.listByCodeAndSomeProviderId(map);         System.out.println(list.size());     }

      注意:

      1,当参数为基本数据类型或数组,List集合类型时,myBatis框架会将参数封装在一个Map对象中。

      2,当参数为数组时,collection对应值默认为array.

      3,当参数为List集合类型时,collection对应值默认为list.

      4,当参数为Map对象时,collection对应值为该Map对象中数组或集合元素对应的key.

      5,如果使用@Param注解为参数设置了名称,collection对应值为参数名。

      6,当参数为对象类型时,独享中有查询条件所需的集合属性,collection对应值为该集合属性名称。

      分页功能

      基于MySql的分页查询

      //相应接口 /** * 分页查询---多条件 * @param newsId 根据类型id * @param title 根据标题名称模糊查 * @param startRow 其实行号 * @param pageSize 每页显示数量 * @return 返回集合 */ List<NewsDetail> listByPageInMoreParam(@Param("newsId")int newsId, @Param("title")String title, @Param("startRow")int startRow, @Param("pageSize")int pageSize);

      <!--相应的mapper映射文件--> <select id="listByPageInMoreParam" resultType="com.news.pojo.NewsDetail"> SELECT * FROM `news_detail` <where> <if test="title != null and title != ''"> and `title` LIKE CONCAT('%',#{title},'%') </if> <if test="newsId != null and newsId!=-1"> AND `categoryId`=#{newsId} </if> </where> limit #{startRow} ,#{pageSize} </select>

      //测试类 @Test void listByPageInMoreParam() { NewDetailMapper mapper= MyBatisUtil.getSqlSession().getMapper(NewDetailMapper.class); List<NewsDetail> list= mapper.listByPageInMoreParam(2,null,0,2); System.out.println(list.size()); for (NewsDetail detail : list) { System.out.println(detail.getTitle()); } }

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持自由互联。