MyBatis动态创建表(未知列): 实现动态增删改查
2020/4/1 14:01:25
本文主要是介绍MyBatis动态创建表(未知列): 实现动态增删改查,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
业务场景:
大数据web平台有时需要查看不同指标按不同类型和筛选条件来出结果, 且系统做不到实时出结果, 故需要在web系统中选择指标和条件后创建任务进行非实时计算, 一段时间后计算结果写入结果表, 访问页面并查看处理结果.
设计流程:
- web系统提供录入不同指标和条件
- 根据录入的指标以json形式发送spark计算
- 解析json创建任务(任务表已存在), 任务相关信息存入配置表: 如任务id, 任务名称, 分配角色, 菜单, 任务模型等;
- 依据任务模型动态创建结果表(与任务关联比,如表名+{任务id}), sprak计算后写入
- 分配的角色登入web系统选择对应菜单后查看任务生产的图标
MyBatis动态创建表
逻辑与mybatis dml执行是一样的: xml提供sql->mapper映射->test
1.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.demo.DynaDemoMapper"> <!-- 建表 --> <!-- 1.ddl使用update标签 --> <!-- 2.ddl使用${}取值 --> <!-- 3.动态列实际上只是普通的foreach, 常见问题是使用#{}取值造成语法错误 --> <update id="createAutoTaskResult" parameterType="map"> create table ${tableName} ( date date, <foreach collection="cloums" item="listItem" separator=","> ${listItem} varchar(30) </foreach> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 </update> <!-- 1.表名取值${} --> <!-- 2.因为是未知列故返回结果不能再是对象, 此处使用map, 实际上返回的是list<map>, 如果表里有id等唯一值也可以 单纯返回map, key用ID --> <select id="selectTaskResult" parameterType="map" resultType="java.util.Map"> select * from ${tableName} where date between #{startDate,jdbcType=DATE} and #{endDate,jdbcType=DATE} </select> </mapper>
1.mapper
public interface DynaDemoMapper { void createAutoTaskResult(@Param("tableName")String tableName, @Param("cloums")List<String> cloums); /** * @Description: 单纯返回id作为key的map * @MapKey("id") * Map<Long, Object> selectTaskResult(@Param("tableName")String tableName, @Param("startDate")Date startDate, @Param("endDate")Date endDate) */ List<Map<String, Object>> selectTaskResult(@Param("tableName")String tableName, @Param("startDate")Date startDate, @Param("endDate")Date endDate); }
这篇关于MyBatis动态创建表(未知列): 实现动态增删改查的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-28中外程序员到底有啥区别?
- 2024-05-25外企也半夜发布上线吗?
- 2024-05-24鸿蒙原生应用再新丁!芒果TV 入局鸿蒙
- 2024-05-22基本概念
- 2024-05-22检索数据
- 2024-05-22排序数据
- 2024-05-22基础过滤数据
- 2024-05-22通过逻辑操作符过滤数据
- 2024-05-22通过通配符过滤数据
- 2024-05-22字段的拼接与计算