石家庄医院网站建设,扬中门户网,房屋装修网,建e室内设计网官网图库记录#xff1a;419
场景#xff1a;使用MyBatis的foreach/foreach标签的循环遍历List类型的入参。使用collection属性指定List#xff0c;item指定List中存放的对象#xff0c;separator指定分割符号#xff0c;open指定开始字符#xff0c;close指定结…记录419
场景使用MyBatis的foreach/foreach标签的循环遍历List类型的入参。使用collection属性指定Listitem指定List中存放的对象separator指定分割符号open指定开始字符close指定结束字符。
版本JDK 1.8,Spring Boot 2.6.3,mybatis-3.5.9。
1.基础知识
1.1MyBatis的标签
(1)查看MyBatis支持的标签
地址http://mybatis.org/dtd/mybatis-3-mapper.dtd
(2)查看标签使用
以mapper/mapper标签元素为例在mybatis-3-mapper.dtd中如下
!ELEMENT mapper (cache-ref | cache | resultMap* | parameterMap* | sql* | insert* | update* | delete* | select* )
!ATTLIST mapper
namespace CDATA #IMPLIED!ELEMENT mapper(...)表示这是一个标签元素mapper.
(..| insert*| update* | delete* | select*),表示在mapper元素中可以嵌套使用的元素清单。
!ATTLIST mapper表示这是一个元素标签的支持的属性。
1.2MyBatis的使用
(1)在application.yml配置文件配置mybatis映射的xml文件位置。
mybatis:mapper-locations: classpath*:mapper/**/*.xml
(2)创建一个Java接口。在接口中添加方法。
(3)创建一个Java接口映射的xml文件。在xml中使用mapper/mapper标签的namespace属性指定Java接口的全路径。Java接口和xml映射文件就完成了绑定关系。
(4)在mapper/mapper标签内使用insertupdatedeleteselect等标签的id属性指定Java的方法名称。Java接口的方法和xml映射文件的mapper/mapper内部的标签就完成了绑定关系。
2.使用foreach/foreach标签元素
场景foreach/foreach标签元素在insertupdatedeleteselect等标签元素内使用。
示例功能示例使用foreach/foreach标签在insertupdatedeleteselect标签内遍历输入的List类型入参。
2.1Java接口
Repository
public interface Label03ForeachMapper {ListCityLabelPO queryCity(ListLong paraList);int insertCity(ListCityLabelPO cityList);int insertCityUnionAll(ListCityLabelPO cityList);int updateCity(ListCityLabelPO cityList);int deleteCity(ListCityLabelPO cityList);
}
2.2Java接口映射的xml文件
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.hub.example.mapper.Label03ForeachMapper!-- 1.查询时,使用foreach/foreach标签--select idqueryCity resultTypecom.hub.example.domain.CityLabelPOselect CITY_ID AS cityId,CITY_NAME AS cityName,LAND_AREA AS landArea,POPULATION AS population,GROSS AS gross,CITY_DESCRIBE AS cityDescribe,DATA_YEAR AS dataYear,UPDATE_TIME AS updateTimefrom t_cityWHERE CITY_ID INforeach collectionlist itemcityId open( separator, close)#{cityId}/foreach/select!-- 2.1插入时,使用foreach/foreach标签,使用逗号分割--insert idinsertCity parameterTypejava.util.Listinsert into t_city_01 (CITY_ID,CITY_NAME,LAND_AREA,POPULATION,GROSS,CITY_DESCRIBE,DATA_YEAR,UPDATE_TIME)valuesforeach collectionlist itemcityPO open separator, close(#{cityPO.cityId},#{cityPO.cityName},#{cityPO.landArea},#{cityPO.population},#{cityPO.gross},#{cityPO.cityDescribe},#{cityPO.dataYear},#{cityPO.updateTime})/foreach/insert!-- 2.2插入时,使用foreach/foreach标签,使用union all分割--insert idinsertCityUnionAll parameterTypejava.util.Listinsert into t_city_01 (CITY_ID,CITY_NAME,LAND_AREA,POPULATION,GROSS,CITY_DESCRIBE,DATA_YEAR,UPDATE_TIME)foreach collectionlist itemcityPO open separatorUNION ALL closeselect#{cityPO.cityId},#{cityPO.cityName},#{cityPO.landArea},#{cityPO.population},#{cityPO.gross},#{cityPO.cityDescribe},#{cityPO.dataYear},#{cityPO.updateTime}from dual/foreach/insert!-- 3.更新时,使用foreach/foreach标签--update idupdateCity parameterTypejava.util.Listupdatet_city_01set CITY_DESCRIBE杭州是一个发达城市WHERE CITY_ID INforeach collectionlist itemcityPO open( separator, close)#{cityPO.cityId}/foreach/update!-- 4.删除时,使用foreach/foreach标签--delete iddeleteCity parameterTypejava.util.Listdelete from t_city_01 where 11if testlist.size()0AND CITY_ID INforeach collectionlist itemcityPO open( separator, close)#{cityPO.cityId}/foreach/if/delete
/mapper
3.测试
3.1测试代码
Slf4j
RestController
RequestMapping(/hub/example/cityLabel)
public class CityLabelController {Autowiredprivate Label03ForeachMapper label03ForeachMapper;GetMapping(/load03)public Object load03() {log.info(测试开始...);// 生成查询参数ListLong paraList Arrays.asList(1L, 2L, 3L);// 1.查询时,使用foreach/foreach标签ListCityLabelPO list01 label03ForeachMapper.queryCity(paraList);// 2.1插入时,使用foreach/foreach标签,使用逗号分割label03ForeachMapper.insertCity(list01);// 2.2插入时,使用foreach/foreach标签,使用union all分割paraList Arrays.asList(4L, 5L, 6L);ListCityLabelPO list02 label03ForeachMapper.queryCity(paraList);label03ForeachMapper.insertCityUnionAll(list02);// 3.更新时,使用foreach/foreach标签label03ForeachMapper.updateCity(list01);// 4.删除时,使用foreach/foreach标签label03ForeachMapper.deleteCity(list01);log.info(测试结束...);return 执行成功;}
}
3.2测试请求
URLhttp://127.0.0.1:18080/hub-example/hub/example/cityLabel/load03
3.3执行SQL
示例使用foreach/foreach标签后遍历List类型入参从具体对象中取值。
示例一查询时,使用foreach/foreach标签。
SELECTCITY_ID AS cityId,CITY_NAME AS cityName,LAND_AREA AS landArea,POPULATION AS population,GROSS AS gross,CITY_DESCRIBE AS cityDescribe,DATA_YEAR AS dataYear,UPDATE_TIME AS updateTime
FROMt_city
WHERE CITY_ID IN (?, ?, ?)
示例二,插入时,使用foreach/foreach标签,使用逗号分割。
INSERT INTO t_city_01 (CITY_ID,CITY_NAME,LAND_AREA,POPULATION,GROSS,CITY_DESCRIBE,DATA_YEAR,UPDATE_TIME
)
VALUES(?, ?, ?, ?, ?, ?, ?, ?),(?, ?, ?, ?, ?, ?, ?, ?),(?, ?, ?, ?, ?, ?, ?, ?)
示例三,插入时,使用foreach/foreach标签,使用union all分割。
INSERT INTO t_city_01 (CITY_ID, CITY_NAME, LAND_AREA, POPULATION, GROSS, CITY_DESCRIBE, DATA_YEAR, UPDATE_TIME)
SELECT ?, ?, ?, ?, ?, ?, ?, ? FROM DUAL
UNION ALL
SELECT ?, ?, ?, ?, ?, ?, ?, ? FROM DUAL
UNION ALL
SELECT ?, ?, ?, ?, ?, ?, ?, ? FROM DUAL
示例四,更新时,使用foreach/foreach标签。
UPDATEt_city_01
SETCITY_DESCRIBE 杭州是一个发达城市
WHERE CITY_ID IN (?, ?, ?)
示例五,删除时,使用foreach/foreach标签。
DELETE
FROMt_city_01
WHERE 1 1AND CITY_ID IN (?, ?, ?)
4.支撑
4.1实体对象
(1)封装结果对象CityLabelPO
Data
Builder
NoArgsConstructor
AllArgsConstructor
public class CityLabelPO {private Long cityId;private String cityName;private Double landArea;private Long population;private Double gross;private String cityDescribe;private String dataYear;private Date updateTime;
}
4.2建表语句
CREATE TABLE t_city (CITY_ID BIGINT(16) NOT NULL COMMENT 唯一标识,CITY_NAME VARCHAR(64) COLLATE utf8_bin NOT NULL COMMENT 城市名,LAND_AREA DOUBLE DEFAULT NULL COMMENT 城市面积,POPULATION BIGINT(16) DEFAULT NULL COMMENT 城市人口,GROSS DOUBLE DEFAULT NULL COMMENT 生产总值,CITY_DESCRIBE VARCHAR(512) COLLATE utf8_bin DEFAULT NULL COMMENT 城市描述,DATA_YEAR VARCHAR(16) COLLATE utf8_bin DEFAULT NULL COMMENT 数据年份,UPDATE_TIME DATETIME DEFAULT NULL COMMENT 更新时间
) ENGINEINNODB DEFAULT CHARSETutf8 COLLATEutf8_bin COMMENT城市信息表;
以上感谢。
2023年4月23日 文章转载自: http://www.morning.hkcjx.cn.gov.cn.hkcjx.cn http://www.morning.cyjjp.cn.gov.cn.cyjjp.cn http://www.morning.fllx.cn.gov.cn.fllx.cn http://www.morning.ysqb.cn.gov.cn.ysqb.cn http://www.morning.hcsqznn.cn.gov.cn.hcsqznn.cn http://www.morning.attorneysportorange.com.gov.cn.attorneysportorange.com http://www.morning.mnwsy.cn.gov.cn.mnwsy.cn http://www.morning.fddfn.cn.gov.cn.fddfn.cn http://www.morning.xnnpy.cn.gov.cn.xnnpy.cn http://www.morning.pggkr.cn.gov.cn.pggkr.cn http://www.morning.jpgfq.cn.gov.cn.jpgfq.cn http://www.morning.rykw.cn.gov.cn.rykw.cn http://www.morning.jrksk.cn.gov.cn.jrksk.cn http://www.morning.fslxc.cn.gov.cn.fslxc.cn http://www.morning.china-cj.com.gov.cn.china-cj.com http://www.morning.skrww.cn.gov.cn.skrww.cn http://www.morning.nqpxs.cn.gov.cn.nqpxs.cn http://www.morning.rjqtq.cn.gov.cn.rjqtq.cn http://www.morning.pqkgb.cn.gov.cn.pqkgb.cn http://www.morning.nwynx.cn.gov.cn.nwynx.cn http://www.morning.plqqn.cn.gov.cn.plqqn.cn http://www.morning.jwmws.cn.gov.cn.jwmws.cn http://www.morning.qkrqt.cn.gov.cn.qkrqt.cn http://www.morning.bpmnj.cn.gov.cn.bpmnj.cn http://www.morning.qrwdg.cn.gov.cn.qrwdg.cn http://www.morning.lfpdc.cn.gov.cn.lfpdc.cn http://www.morning.qsxxl.cn.gov.cn.qsxxl.cn http://www.morning.fdxhk.cn.gov.cn.fdxhk.cn http://www.morning.jqlx.cn.gov.cn.jqlx.cn http://www.morning.muzishu.com.gov.cn.muzishu.com http://www.morning.zyndj.cn.gov.cn.zyndj.cn http://www.morning.bsqbg.cn.gov.cn.bsqbg.cn http://www.morning.wjqbr.cn.gov.cn.wjqbr.cn http://www.morning.tlrxt.cn.gov.cn.tlrxt.cn http://www.morning.phzrq.cn.gov.cn.phzrq.cn http://www.morning.hnzrl.cn.gov.cn.hnzrl.cn http://www.morning.qpnmd.cn.gov.cn.qpnmd.cn http://www.morning.fxzw.cn.gov.cn.fxzw.cn http://www.morning.dskzr.cn.gov.cn.dskzr.cn http://www.morning.ljbch.cn.gov.cn.ljbch.cn http://www.morning.dcccl.cn.gov.cn.dcccl.cn http://www.morning.wcqxj.cn.gov.cn.wcqxj.cn http://www.morning.blfll.cn.gov.cn.blfll.cn http://www.morning.ydrfl.cn.gov.cn.ydrfl.cn http://www.morning.nzcgj.cn.gov.cn.nzcgj.cn http://www.morning.nkkr.cn.gov.cn.nkkr.cn http://www.morning.mdjtk.cn.gov.cn.mdjtk.cn http://www.morning.qcymf.cn.gov.cn.qcymf.cn http://www.morning.gyylt.cn.gov.cn.gyylt.cn http://www.morning.zxqyd.cn.gov.cn.zxqyd.cn http://www.morning.nmfml.cn.gov.cn.nmfml.cn http://www.morning.pndhh.cn.gov.cn.pndhh.cn http://www.morning.jftl.cn.gov.cn.jftl.cn http://www.morning.ydyjf.cn.gov.cn.ydyjf.cn http://www.morning.qjdqj.cn.gov.cn.qjdqj.cn http://www.morning.qnywy.cn.gov.cn.qnywy.cn http://www.morning.kpypy.cn.gov.cn.kpypy.cn http://www.morning.ryqsq.cn.gov.cn.ryqsq.cn http://www.morning.rsjf.cn.gov.cn.rsjf.cn http://www.morning.mkfhx.cn.gov.cn.mkfhx.cn http://www.morning.hwlmy.cn.gov.cn.hwlmy.cn http://www.morning.yswxq.cn.gov.cn.yswxq.cn http://www.morning.lrskd.cn.gov.cn.lrskd.cn http://www.morning.ymqfx.cn.gov.cn.ymqfx.cn http://www.morning.rfbt.cn.gov.cn.rfbt.cn http://www.morning.zlfxp.cn.gov.cn.zlfxp.cn http://www.morning.kjgrg.cn.gov.cn.kjgrg.cn http://www.morning.cwpny.cn.gov.cn.cwpny.cn http://www.morning.pljdy.cn.gov.cn.pljdy.cn http://www.morning.mjbnp.cn.gov.cn.mjbnp.cn http://www.morning.wschl.cn.gov.cn.wschl.cn http://www.morning.tssmk.cn.gov.cn.tssmk.cn http://www.morning.jjxnp.cn.gov.cn.jjxnp.cn http://www.morning.stsnf.cn.gov.cn.stsnf.cn http://www.morning.wtlyr.cn.gov.cn.wtlyr.cn http://www.morning.btnmj.cn.gov.cn.btnmj.cn http://www.morning.fqtdz.cn.gov.cn.fqtdz.cn http://www.morning.jxhlx.cn.gov.cn.jxhlx.cn http://www.morning.rlpmy.cn.gov.cn.rlpmy.cn http://www.morning.tdxnz.cn.gov.cn.tdxnz.cn