Loading

mybatis 标签trim+foreach使用

trim的使用

认识trim内置的属性标签

运算符 含义
prefix 在trim标签内sql语句加上前缀。
suffix 在trim标签内sql语句加上后缀。
suffixOverrides 后缀判断的条件, 去掉最后一个逗号
prefixOverrides prefixoverride:去掉第一个and或者是or, 去除trim标签内sql语句多余的后缀

示例

<select id="selectByPrimaryKey" resultType="role">
    select * from smbms_role
    <trim prefix="where" prefixOverrides="and | or">
       and id = #{roleId}
    </trim>
</select>
  //prefix前缀加上where   然后prefixOverrides 去掉里面sql片段第一个and或者or

foreach

  foreach:
  1.collection:接收请求的参数,必填,值为要选代循环的属性名。这个属性值的情况有很多。
  2.item:遍历的每一项,变量名,值为从迭代对象中取出的每一个值。
  3.index:索引的属性名,在集合数组情况下值为当前索引值, 当选代循环的对象是 Map 类型时,这个值为 Map 的 key (键值)。 
  4.open:整个循环内容开头的字符串 。
  5.close: 整个循环内容结尾的字符串。 
  6.separator:每次循环的分隔

接口

  	public List<Provider>  selectProviderList(Map<String, Object> map)throws Exception;

xml

  <?xml version="1.0" encoding="UTF-8" ?>
  <!DOCTYPE mapper
          PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
          "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  <mapper namespace="com.rzk.mapper.provider.ProviderMapper">
      <select id="selectProviderList" resultType="provider" parameterType="map">
          select * from smbms_provider
          <where>
              <foreach collection="itemId" item="id" open="and (" separator="or" close=")">
                  id=#{id}
              </foreach>
          </where>
      </select>
  </mapper>

sql语句

 CREATE TABLE `smbms_provider` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`proCode` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '供应商编码',
`proName` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '供应商名称',
`proDesc` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '供应商详细描述',
`proContact` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '供应商联系人',
`proPhone` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '联系电话',
`proAddress` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '地址',
`proFax` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '传真',
`createdBy` bigint(20) DEFAULT NULL COMMENT '创建者(userId)',
`creationDate` datetime DEFAULT NULL COMMENT '创建时间',
`modifyDate` datetime DEFAULT NULL COMMENT '更新时间',
`modifyBy` bigint(20) DEFAULT NULL COMMENT '更新者(userId)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=COMPACT;


INSERT INTO `smbms_provider` VALUES ('1', 'BJ_GYS001', '北京三木堂商贸有限公司', '长期合作伙伴,主营产品:茅台、五粮液、郎酒、酒鬼酒、泸州老窖、赖茅酒、法国红酒等', '张国强', '135666677', '北京市丰台区育芳园北路', '010-58858787', '1', '2013-03-21 16:52:07', null, null);
INSERT INTO `smbms_provider` VALUES ('4', 'GZ_GYS002', '深圳市喜来客商贸有限公司', '长期合作伙伴,主营产品:坚果炒货.果脯蜜饯.天然花茶.营养豆豆.特色美食.进口食品.海味零食.肉脯肉', '林妮1', '185998975', '广东省深圳市福龙工业区B2栋3楼西', '0755-677341', '1', '2013-03-22 16:52:07', '2018-09-24 21:28:07', '1');
INSERT INTO `smbms_provider` VALUES ('8', 'ZJ_GYS001', '慈溪市广和绿色食品厂', '长期合作伙伴,主营产品:豆瓣酱、黄豆酱、甜面酱,辣椒,大蒜等农产品', '薛圣丹1', '180999532', '浙江省宁波市慈溪周巷小安村', '0574-34449090', '1', '2013-11-21 06:02:07', '2018-09-28 19:54:31', '1');
INSERT INTO `smbms_provider` VALUES ('9', 'GX_GYS001', '优百商贸有限公司', '长期合作伙伴,主营产品:日化产品', '李立国', '133266543', '广西南宁市秀厢大道42-1号', '0771-988614', '1', '2013-03-21 19:52:07', null, null);
INSERT INTO `smbms_provider` VALUES ('18', '12', '234', '123', '234', '15815891967', '213', '123', '1', '2018-09-26 12:55:42', null, null);

测试

@Test
public void selectProviderList() throws Exception {
    SqlSession session = MybatisUtils.getSqlSessionFactory();
    ProviderMapper mapper = session.getMapper(ProviderMapper.class);
    Map<String, Object> map = new HashMap<>();
    ArrayList<Integer> listId = new ArrayList<Integer>();
    listId.add(4);
    listId.add(1);
    map.put("itemId",listId);
    List<Provider> list = mapper.selectProviderList(map);
    for (Provider provider : list) {
        System.out.println(provider);
    }
}

总结:
1.listId:在List集合里面添加 id
2.然后把listIdput进map
3.通过foreach 的 collection集合接收itemId的参数,再把item的值(可不能随意填,要sql语句查询的字段名一致),通过你要查询的id放进去

posted @ 2020-05-11 22:40  Rzk  阅读(2425)  评论(0编辑  收藏  举报