MyBatis万能插入语句
前言
最近需要做一个动态新增数据的接口,表名、列名、数据都是动态传进来的
需要一个接口就可以把所有表数据新增成功
-
第一种方式
- 首先看Mapper(dao层)接口
/** * 插入数据 * @param tableName 表名 * @param tableColumns 列集合 * @param dataList 数据集合 */ void insertTableData( @Param("tableName") String tableName, @Param("columnList") List<String> columnList, @Param("dataList") List<List<String>> dataList);
- 再看xml文件
<!-- 插入数据 --> <insert id="insertTableData"> insert ignore into ${tableName} <foreach collection="columnList" item="column" open="(" separator="," close=")"> `${column}` </foreach> values <foreach collection="dataList" item="item" separator="," > <foreach collection="item" item="column" open="(" separator="," close=")"> #{column} </foreach> </foreach> </insert>
-
第二种方式
- mapper(dao层)接口
/** * 插入数据 * @param tableName 表名 * @param columnList 列 * @param dataMap 数据 */ void insertTableData(@Param("tableName") String tableName, @Param("columnList") List<String> columnList, @Param("dataMap") List<Map> dataList);
- xml文件
<!-- 插入数据--> <insert id="insertData"> insert into ${tableName} <foreach collection="columnList" open="(" separator="," close=")" item="item"> `${item}` </foreach> values <foreach collection="dataList" separator="," item="itemData"> <foreach collection="itemData" open="(" separator="," close=")" item="item"> #{item} </foreach> </foreach> </insert>
SQL参数
- 接口参数
参数名称 | 参数解释 | 类型 |
---|---|---|
tableName | 表名称 | 字符串 |
columnList | 表字段集合 | List和Map都可以 |
dataList | 数据集合 | List<List<Object>>或List<Map>> |
- 注意
- 表名称必须使用 **${tableName}**方式取
- 因为通常使用API方式获取数据,取出的数据经过JSON_FORMATTER,所有第二种插入数据的方式比较常用
- 字段集合数必须和插入的数据数一致,否则报错
- 字段顺序必须和数据顺序一致,否则出现串行
转载请注明地址:https://blog.youkuaiyun.com/m0_37887812/article/details/121098954