Merge branch 'master' of http://dev.vci-tech.com:1065/r/ubcs
| | |
| | | } |
| | | // 属性映射保存方法 |
| | | export const batchAddSave = (params) => { |
| | | console.log(params) |
| | | return request({ |
| | | url: '/api/ubcs-applyjtcodeservice/DockingPreApplyCode/batchAddSave', |
| | | method: 'get', |
| | | params: params |
| | | method: 'post', |
| | | data: params |
| | | }) |
| | | } |
| | | // 同步集团属性模型视图 |
| | | export const syncClassifyModel = (params) => { |
| | | console.log(params) |
| | | return request({ |
| | | url: '/api/ubcs-applyjtcodeservice/DockingPreApplyCode/syncClassifyModel', |
| | | method: 'post', |
| | | data: params |
| | | }) |
| | | } |
| | |
| | | <el-form-item label="集团分类" label-width="70px" size="small"> |
| | | <el-select clearable ref="selectTree" v-model="form.groupValue" placeholder="请选择" |
| | | popper-class="popperTreeSelect"> |
| | | <el-option :value="groupVal" :label="groupVal"> |
| | | <el-option :value="groupVal" :label="groupVal"> |
| | | <el-tree ref="groupTree" :data="groupTreeData" empty-text="暂无数据" :props="defaultProps" |
| | | @node-click="handleNodeClick"> |
| | | </el-tree> |
| | |
| | | |
| | | </el-form-item> |
| | | </el-form> |
| | | <avue-crud :table-loading="loading" :data="tableData" :option="option" ref="crud" @cell-class-name="handelCellRow" |
| | | @cell-click="handleCellClick"> |
| | | <template slot="menuLeft"> |
| | | <el-button icon="el-icon-plus" size="small" type="primary" @click="dialogPush = true">新 增 |
| | | </el-button> |
| | | <el-button icon="el-icon-check" size="small" type="primary" @click="handleSave">保 存 |
| | | </el-button> |
| | | <el-button icon="el-icon-connection" size="small" type="primary" @click="handleSync">同步模型 |
| | | </el-button> |
| | | </template> |
| | | <template slot="defaultValue" slot-scope="{scope}"> |
| | | <!-- <el-input v-model="scope.row.defaultValue" v-if="scope.row.index === tableRowIndex && scope.column.index === tableColumnIndex" @blur="inputBlur"> </el-input> --> |
| | | <span>{{ scope }}</span> |
| | | </template> |
| | | </avue-crud> |
| | | <el-card> |
| | | <avue-crud :table-loading="loading" :data="mappingData" :option="optionMapping" ref="crudMapping" |
| | | @row-update="handleUpdate" @row-click="handleMapingRowClick"> |
| | | <template slot="menuLeft"> |
| | | <el-button icon="el-icon-plus" size="small" type="primary" @click="dialogPush = true">新 增 |
| | | </el-button> |
| | | <el-button icon="el-icon-check" size="small" type="primary" @click="handleSave">保 存 |
| | | </el-button> |
| | | <el-button icon="el-icon-connection" size="small" type="primary" @click="handleSync">同步模型 |
| | | </el-button> |
| | | </template> |
| | | </avue-crud> |
| | | </el-card> |
| | | <el-card :style="{ marginTop: '20px' }"> |
| | | <avue-crud :data="tablesData" :option="optinos" ref="crud" |
| | | @cell-click="handleCellClick"> |
| | | <avue-crud :data="rangeData" :option="optinoRange" ref="crudRange" @row-update="handleUpdate" |
| | | @row-dblclick="handleRowClick"> |
| | | </avue-crud> |
| | | </el-card> |
| | | </el-card> |
| | |
| | | </el-form> |
| | | <p class="text_tip">*选择分类进行属性过滤, 或者输入属性的全拼或者简拼进行查询! 如: 姓名 (可输入xm或xinming )</p> |
| | | <transfer v-model="transferValue" :data="transferData" :filter-method="filterMethod" |
| | | filter-placeholder="请输入属性拼音全拼或者拼音缩写" @left-check-change="handelLeftCheck"></transfer> |
| | | filter-placeholder="请输入拼音全拼或者拼音缩写" @left-check-change="handelLeftCheck"></transfer> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="dialogPush = false">取 消</el-button> |
| | | <el-button type="primary" @click="dialogPush = false">保 存</el-button> |
| | |
| | | <script> |
| | | import transfer from '@/components/transfer/index' |
| | | import pinyin from 'js-pinyin' |
| | | import { referCodeClassifyTree, referTree, gridAttrMapping } from '@/api/integration/integration.js' |
| | | import { referCodeClassifyTree, referTree, gridAttrMapping, gridAttrRanges, batchAddSave, listCodeAttributeByClassId, syncClassifyModel } from '@/api/integration/integration.js' |
| | | export default { |
| | | components: { |
| | | transfer |
| | |
| | | }); |
| | | return data; |
| | | }; |
| | | const options = { |
| | | menu: false, |
| | | delBtn: false, |
| | | addBtn: false, |
| | | index: true, |
| | | columnBtn: false, |
| | | searchShow: true, |
| | | emptyBtn: false, |
| | | searchBtn: false, |
| | | searchShowBtn: false, |
| | | cellBtn: true, |
| | | border: true, |
| | | searchMenuSpan: 8, |
| | | } |
| | | return { |
| | | form: { |
| | | name: '', |
| | |
| | | transferData: generateData(), |
| | | transferValue: [], |
| | | dialogPush: false, |
| | | tableData: [], |
| | | tablesData: [ |
| | | { |
| | | id:'01', |
| | | groupTypeName:'李四', |
| | | codeView:'张三', |
| | | sex:'', |
| | | typeName:'' |
| | | } |
| | | ], |
| | | mappingData: [], |
| | | rangeData: [], |
| | | filterText: '', |
| | | tableRowIndex:null, |
| | | tableColumnIndex:null, |
| | | optinos: { |
| | | tableRowIndex: null, |
| | | tableColumnIndex: null, |
| | | optinoRange: { |
| | | title: '集团属性', |
| | | maxHeight: '300px', |
| | | menu: true, |
| | | delBtn: false, |
| | | addBtn: false, |
| | | index: true, |
| | | header: false, |
| | | columnBtn: false, |
| | | searchShow: true, |
| | | emptyBtn: false, |
| | | searchBtn: false, |
| | | searchShowBtn: false, |
| | | cellBtn: true, |
| | | border: true, |
| | | searchMenuSpan: 8, |
| | | rowKey: 'oid', |
| | | column: [ |
| | | { label: '属性集团枚举值', prop: 'groupTypeName', minWidth: 80, }, |
| | | { label: '集团属性枚举显示名称', prop: 'codeView', minWidth: 80 }, |
| | | { label: 'MDM枚举值', prop: 'sex', minWidth: 80, cell: true }, |
| | | { label: 'MDM枚举显示名称', prop: 'typeName', minWidth: 80, cell: true }, |
| | | ] |
| | | { label: '属性集团枚举值', prop: 'numTextValue', minWidth: 80 }, |
| | | { label: '集团属性枚举显示名称', prop: 'numText', minWidth: 80 }, |
| | | { label: 'MDM枚举值', prop: 'targetNumTextValue', minWidth: 80, cell: true, blur: (value) => window.handleBlur(value, 'range') }, |
| | | { label: 'MDM枚举显示名称', prop: 'targetNumText', minWidth: 80, cell: true, blur: (value) => window.handleBlur(value, 'range') }, |
| | | ], |
| | | ...options |
| | | }, |
| | | option: { |
| | | optionMapping: { |
| | | maxHeight: '500px', |
| | | menu: true, |
| | | delBtn: false, |
| | | addBtn: false, |
| | | index: true, |
| | | header: true, |
| | | columnBtn: false, |
| | | searchShow: true, |
| | | emptyBtn: false, |
| | | searchBtn: false, |
| | | searchShowBtn: false, |
| | | cellBtn: false, |
| | | border: true, |
| | | searchMenuSpan: 8, |
| | | rowKey: 'oid', |
| | | column: [ |
| | | { label: '集团分类', prop: 'sourceClassifyName', minWidth: 80, }, |
| | | { label: '集团分类', prop: 'sourceClassifyName', minWidth: 80 }, |
| | | { label: '所属视图', prop: 'viewName', minWidth: 80 }, |
| | | { label: '集团属性', prop: 'sourceAttrName', minWidth: 80 }, |
| | | { label: '分类名称', prop: 'targetClassifyName', minWidth: 80, overHidden: true }, |
| | | { label: '属性名称', prop: 'targetAttrName', minWidth: 80}, |
| | | { label: '默认值', prop: 'defaultValue', minWidth: 140, cell: true }, |
| | | ] |
| | | { label: '分类名称', prop: 'targetClassifyName', minWidth: 80 }, |
| | | { label: '属性名称', prop: 'targetAttrName', minWidth: 80 }, |
| | | { label: '默认值', prop: 'defaultValue', minWidth: 140, cell: true, blur: (value) => window.handleBlur(value, 'mapping') }, |
| | | ], |
| | | ...options |
| | | }, |
| | | treeData: [], |
| | | groupTreeData: [], |
| | |
| | | isLeaf: '' |
| | | }, |
| | | groupVal: '', |
| | | treeParam: {} |
| | | treeParam: {}, |
| | | rangeForm: {}, |
| | | mappingForm: {}, |
| | | } |
| | | }, |
| | | watch: { |
| | |
| | | created() { |
| | | this.getReferCodeClassifyTree() |
| | | pinyin.setOptions({ checkPolyphone: false, charCase: 1 }); |
| | | console.log(pinyin.getFullChars('管理员')) |
| | | console.log(pinyin.getCamelChars('管理员')) |
| | | }, |
| | | mounted() { |
| | | window.handleBlur = this.handleBlur |
| | | }, |
| | | methods: { |
| | | // 接口左侧树 |
| | | async getReferCodeClassifyTree() { |
| | | const param = { |
| | | parentBtmName: "jclass", |
| | |
| | | this.treeData = data.map(item => item.children ? { ...item, ...{ isLeaf: false } } : { ...item, ...{ isLeaf: true } }) |
| | | } |
| | | }, |
| | | async getlistCodeAttributeByClassId(oid) { |
| | | // 接口获取属性映射 |
| | | async getGridAttrMapping(oid) { |
| | | this.loading = true |
| | | console.log(this.treeParam) |
| | | const response = await gridAttrMapping({ sourceClassifyId: oid, ...this.treeParam }) |
| | | console.log(response) |
| | | if (response.status === 200) { |
| | | this.loading = false |
| | | this.tableData = response.data.data |
| | | this.mappingData = response.data.data |
| | | } |
| | | }, |
| | | // 接口获取属性映射取值范围 |
| | | async getGridAttrRanges(oid) { |
| | | this.tablesData = [] |
| | | const response = await gridAttrRanges({ meatId: oid }) |
| | | console.log(response) |
| | | if (response.status === 200) { |
| | | this.rangeData = response.data |
| | | } |
| | | }, |
| | | // 接口获取主数据分类属性信息 |
| | | async getListCodeByClassId(oid) { |
| | | // this.tablesData = [] |
| | | const response = await listCodeAttributeByClassId({ codeClassifyId: oid }) |
| | | console.log(response) |
| | | }, |
| | | // 接口获取集团分类树 |
| | | async referTree(oid, checked) { |
| | | this.groupTreeData = [] |
| | | const response = await referTree({ 'conditionMap[codeclsfid]': oid, parentOid: null }) |
| | |
| | | } |
| | | } |
| | | }, |
| | | // 左侧树过滤搜索 |
| | | filterNode(value, data) { |
| | | console.log(value) |
| | | console.log(data) |
| | | if (!value) return true; |
| | | return data.name.indexOf(value) !== -1; |
| | | }, |
| | | handleSave() { |
| | | |
| | | // 保存按钮 |
| | | async handleSave() { |
| | | console.log(this.mappingData) |
| | | // const response = await batchAddSave({ dockingPreAttrMappingVOList: this.tableData }) |
| | | // console.log(response) |
| | | }, |
| | | handlePush() { |
| | | |
| | | // 同步数据 |
| | | async handleSync() { |
| | | const response = await syncClassifyModel({ dockingPreAttrMappingVOList: this.tableData }) |
| | | console.log(response) |
| | | }, |
| | | handelLeftCheck(event) { |
| | | console.log(event) |
| | | }, |
| | | handelCellRow( {row, column, rowIndex, columnIndex }) { |
| | | row.index = rowIndex |
| | | column.index = columnIndex |
| | | }, |
| | | // 新增弹窗查询按钮 |
| | | handleQuery(event) { |
| | | console.log(event) |
| | | this.form.name = event |
| | |
| | | filterMethod(item) { |
| | | return item.pinyins.indexOf(this.form.name) > -1; |
| | | }, |
| | | // 左侧树点击 |
| | | handelTreeCell(event) { |
| | | console.log(event) |
| | | if (event.leaf) { |
| | | this.treeParam.codeClassifyId = event.oid |
| | | this.form.groupValue = '' |
| | | this.groupVal = '' |
| | | this.tableData = [] |
| | | this.referTree(event.oid, event.checked) |
| | | this.getListCodeByClassId(event.oid) |
| | | } |
| | | }, |
| | | // 集团分类树点击 |
| | | handleNodeClick(data) { |
| | | console.log(data) |
| | | this.form.groupValue = data.name |
| | | this.groupVal = data.name |
| | | this.$refs.selectTree.blur() |
| | | this.getlistCodeAttributeByClassId(data.oid) |
| | | }, |
| | | handleCellClick(row, column,cell, event) { |
| | | console.log(row) |
| | | console.log(column) |
| | | console.log(cell) |
| | | console.log(event) |
| | | this.tableRowIndex = row.index |
| | | this.tableColumnIndex = column.index |
| | | this.getGridAttrMapping(data.oid) |
| | | }, |
| | | inputBlur() { |
| | | this.tableColumnIndex = '' |
| | | this.tableRowIndex = null |
| | | }, |
| | | // 属性映射点击每行 |
| | | handleCellClick(event) { |
| | | console.log('单击', event) |
| | | // this.tableRowIndex = row.index |
| | | // this.tableColumnIndex = column.index |
| | | // this.getGridAttrRanges(event.metaListId) |
| | | }, |
| | | handleBlur(value, event) { |
| | | console.log(value) |
| | | if (event === 'range') this.$refs.crudRange.rowCell(this.rangeForm, this.rangeForm.$index) |
| | | if (event === 'mapping') this.$refs.crudMapping.rowCell(this.mappingForm, this.mappingForm.$index) |
| | | }, |
| | | // 属性取值范围单元格编辑 |
| | | handleMapingRowClick(row, column, cell, event) { |
| | | this.mappingForm = row |
| | | if (column.label === '默认值') this.$refs.crudMapping.rowCell(row, row.$index) |
| | | else this.getGridAttrRanges(row.metaListId) |
| | | |
| | | }, |
| | | // 属性取值范围单元格编辑 |
| | | handleRowClick(row, column, cell, event) { |
| | | this.rangeForm = row |
| | | console.log('单击', row) |
| | | this.$refs.crudRange.rowCell(row, row.$index) |
| | | }, |
| | | // 属性取值范围单元格编辑 |
| | | handleUpdate(row, index, done, loading) { |
| | | const findRow = this.mappingData.findIndex(item => item.metaListId === row.metaListId) |
| | | console.log(findRow) |
| | | this.mappingData[0].dockingPreAttrRangeVoList = [row] |
| | | console.log('修改后', row) |
| | | this.$message({ |
| | | showClose: true, |
| | | message: "修改成功", |
| | | type: "success", |
| | | }); |
| | | done(); |
| | | } |
| | | } |
| | | } |
| | |
| | | */ |
| | | //@Column(columnDefinition = "所属属性分组") |
| | | private String attributeGroup; |
| | | /** |
| | | * 输入显示 |
| | | */ |
| | | //@Column(columnDefinition = "输入显示") |
| | | private String inputTip; |
| | | |
| | | /** |
| | | * 使用枚举英文编号 |
| | |
| | | String API_PREFIX = "/mdmEngineClient"; |
| | | String SELECT_BY_TYPE_OID = API_PREFIX + "/selectByTypeAndOid"; |
| | | String INSERT_BATCH_BY_TYPE = API_PREFIX + "/insertBatchByType"; |
| | | String UPDATE_BATCH_BY_TYPE = API_PREFIX + "/updateBatchByType"; |
| | | |
| | | /** |
| | | * 传入业务类型以及相oid集合查询数据进行返回 |
| | |
| | | */ |
| | | @PostMapping(INSERT_BATCH_BY_TYPE) |
| | | R<Integer> insertBatchByType(@RequestParam("btmType")String btmType,@RequestBody List<BaseModel> baseModels); |
| | | /** |
| | | * 传入业务类型以及相关数据进行批量更新操作 |
| | | * |
| | | * @param btmType 业务类型 |
| | | * @param baseModels 处理数据 |
| | | * @return 处理状态 |
| | | */ |
| | | @PostMapping(UPDATE_BATCH_BY_TYPE) |
| | | R<Integer> updateBatchByType(@RequestParam("btmType")String btmType,@RequestBody List<BaseModel> baseModels); |
| | | } |
| | |
| | | |
| | | @Override |
| | | public R<Integer> insertBatchByType(String btmType, List<BaseModel> baseModels){ |
| | | return R.fail("获取数据失败"); |
| | | return R.fail("插入数据失败"); |
| | | } |
| | | |
| | | @Override |
| | | public R<Integer> updateBatchByType(String btmType, List<BaseModel> baseModels) { |
| | | return R.fail("更新数据失败"); |
| | | } |
| | | } |
| | |
| | | * 级联查询属性 |
| | | */ |
| | | private String parentQueryAttr; |
| | | /** |
| | | * 输入提示 |
| | | */ |
| | | private String inputTip; |
| | | |
| | | @Override |
| | | public String toString() { |
| | |
| | | ", libraryIdentification='" + libraryIdentification + '\'' + |
| | | ", parentCode='" + parentCode + '\'' + |
| | | ", parentName='" + parentName + '\'' + |
| | | ", inputTip='" + inputTip + '\'' + |
| | | ", parentQueryAttr='" + parentQueryAttr + '\'' + |
| | | '}'; |
| | | } |
| | |
| | | * 后缀 |
| | | */ |
| | | private String suffix; |
| | | /** |
| | | * 输入提示 |
| | | */ |
| | | private String inputTip; |
| | | |
| | | public boolean isKeyAttr() { |
| | | return keyAttr; |
| | |
| | | public void setField(String field) { |
| | | this.field = field; |
| | | } |
| | | public String getInputTip() { |
| | | return inputTip; |
| | | } |
| | | |
| | | public void setInputTip(String inputTip) { |
| | | this.inputTip = inputTip; |
| | | } |
| | | |
| | | public String getText() { |
| | | return text; |
| | |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | /** |
| | | * 传入业务类型以及相关数据进行批量插入操作 |
| | | * |
| | | * @param btmType 业务类型 |
| | | * @param baseModels 处理数据 |
| | | * @return 处理状态 |
| | | */ |
| | | @Override |
| | | @PostMapping(UPDATE_BATCH_BY_TYPE) |
| | | public R<Integer> updateBatchByType(String btmType, List<BaseModel> baseModels) { |
| | | try { |
| | | return mdmEngineService.updateBatchByBaseModel(btmType,baseModels); |
| | | } catch (Exception e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | package com.vci.ubcs.code.mapper; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.InterceptorIgnore; |
| | | import org.apache.ibatis.annotations.MapKey; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | |
| | | List<Map> selectBySql(@Param("inSql") String inSql); |
| | | |
| | | /** |
| | | * 传入表明,map,list<map>完成批量更新操作 |
| | | * 传入表名,map,list<map>完成批量更新操作 |
| | | * @param tableName 表名 |
| | | * @param columnMap 单条map用于获取key作为字段 |
| | | * @param mapList 需要插入的所有记录 |
| | | * @return 插入成功的条数 |
| | | */ |
| | | Integer insertByBaseModel(String tableName,Map<String,String> columnMap,List<Map<String,String>> mapList); |
| | | Integer insertByBaseModel(String tableName,Map<String,String> columnMap,List<Map<String,String>> mapList);/** |
| | | * 传入表名,map,list<map>完成批量更新操作 |
| | | * @param tableName 表名 |
| | | * @param mapList 需要更新的所有记录 |
| | | * @return 插入成功的条数 |
| | | */ |
| | | @InterceptorIgnore(tenantLine = "true") |
| | | Integer updateBatchByBaseModel(String tableName,List<Map<String,String>> mapList); |
| | | |
| | | } |
| | |
| | | * @return 查询出的数据 |
| | | */ |
| | | List<BaseModel> selectByTypeAndOid(String btmType, String oids) throws IllegalAccessException, NoSuchFieldException, InstantiationException, InvocationTargetException, IntrospectionException, SQLException; |
| | | /** |
| | | * 传入业务类型以及相关数据进行批量更新操作 |
| | | * |
| | | * @param btmType 业务类型 |
| | | * @param baseModels 处理数据 |
| | | * @return 处理状态 |
| | | */ |
| | | R updateBatchByBaseModel(String btmType, List<BaseModel> baseModels) throws Exception; |
| | | |
| | | } |
| | |
| | | // conditionMap.put("classifytemplateoid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(templateOids.toArray(new String[0])) + ")"); |
| | | // PageHelper pageHelper = new PageHelper(-1); |
| | | // pageHelper.addDefaultAsc("orderNum"); |
| | | List<CodeClassifyTemplateAttr> attrDOS = baseMapper.selectByClassifytemplateoid(VciBaseUtil.toInSql(templateOids.toArray(new String[0]))); |
| | | QueryWrapper<CodeClassifyTemplateAttr> wrapper = new QueryWrapper<>(); |
| | | wrapper.in("classifytemplateoid",templateOids); |
| | | wrapper.orderByAsc("orderNum"); |
| | | List<CodeClassifyTemplateAttr> attrDOS = baseMapper.selectList(wrapper); |
| | | // baseMapper.selectByClassifytemplateoid(VciBaseUtil.toInSql(templateOids.toArray(new String[0]))); |
| | | |
| | | if(!CollectionUtils.isEmpty(attrDOS)){ |
| | | attrDOList.addAll(attrDOS); |
| | |
| | | itemVO.setPrefix(attrVO.getPrefixValue()); |
| | | itemVO.setSuffix(attrVO.getSuffixValue()); |
| | | itemVO.setTooltips(attrVO.getExplain()); |
| | | itemVO.setInputTip(attrVO.getInputTip()); |
| | | itemVO.setSelectLibFlag(attrVO.getLibraryIdentification()); |
| | | //看看是否有枚举 |
| | | if ((StringUtils.isNotBlank(attrVO.getEnumString()) |
| | |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * 传入业务类型以及相关数据进行批量更新操作 |
| | | * |
| | | * @param btmType 业务类型 |
| | | * @param baseModels 处理数据 |
| | | * @return 处理状态 |
| | | */ |
| | | @Override |
| | | public R updateBatchByBaseModel(String btmType, List<BaseModel> baseModels) throws Exception { |
| | | //使用传入的业务类型查询表 |
| | | R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(btmType)); |
| | | if(listR.getData().size() == 0){ |
| | | throw new VciBaseException("传入业务类型未查询到相应表单,请检查!"); |
| | | } |
| | | //将bean转为map,mybatis统一处理 |
| | | List<Map<String,String>> maps = new ArrayList<>(); |
| | | |
| | | baseModels.stream().forEach(model-> { |
| | | try { |
| | | maps.add(VciBaseUtil.convertBean2Map(model)); |
| | | } catch (Exception e) { |
| | | throw new VciBaseException("类型转换错误:" + e.getMessage()); |
| | | } |
| | | }); |
| | | try { |
| | | //注意此处更新成功是返回的-1 |
| | | commonsMapper.updateBatchByBaseModel(listR.getData().get(0).getTableName(), maps); |
| | | }catch (Exception e){ |
| | | return R.fail("更新失败!"+e.getMessage()); |
| | | } |
| | | |
| | | return R.success("更新成功!"); |
| | | } |
| | | } |
| | |
| | | </foreach> |
| | | </insert> |
| | | |
| | | <update id="updateBatchByBaseModel" parameterType="java.util.List" > |
| | | BEGIN |
| | | <foreach collection="mapList" item="columnMap" index="index" separator=";"> |
| | | update ${tableName} |
| | | <set> |
| | | <foreach collection="columnMap" item="value" index="key" separator=","> |
| | | ${key} = #{value} |
| | | </foreach> |
| | | </set> |
| | | where oid = #{columnMap.oid} |
| | | </foreach>; |
| | | END; |
| | | </update > |
| | | |
| | | </mapper> |