oracle存储过程+mybatis实现动态表名取数
笔记仅记录最简单的实现,个性化需求可自行改造:
1. 存储过程:
create or replace PROCEDURE GET_DATA_BY_TABLENM(tableName VARCHAR2,resultSet out SYS_REFCURSOR) is sqlStr clob; fieldSqlStr clob; fieldStr clob; BEGIN fieldSqlStr:='select LISTAGG(decode(data_type,''DATE'',''to_char(''||COLUMN_NAME||'',''''yyyyMMdd'''')'',''TIMESTAMP(6)'',''to_char(''||COLUMN_NAME||'',''''YYYY-MM-DD hh24:mi:ss.ff6'''')'',COLUMN_NAME),''||''''#@#''''||'') within group(order BY column_id) from user_tab_columns where table_name='''||tableName||''''; dbms_output.put_line(fieldSqlStr); EXECUTE IMMEDIATE fieldSqlStr into fieldstr; dbms_output.put_line(fieldstr); sqlStr:='select '||fieldstr||' as data from '||tableName; dbms_output.put_line(sqlstr); open resultSet for sqlstr; end;
2. mybatis mapper.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="**.Mapper"> <!--namespace根据自己需要创建的的mapper的路径和名称填写--> <resultMap id="dataMap" type="**.Dto"> <result property="data" column="data"></result> </resultMap> <select id="getDataByTableNm" resultType="java.util.List" statementType="CALLABLE"> {call GET_DATA_BY_TABLENM(#{tableNm},#{resultSet,mode=OUT,jdbcType=CURSOR,javaType=ResultSet,resultMap=dataMap})} </select> </mapper>
3. java代码调用
1)返回结果集实体类
public class Dto { private String data; public Dto(){ } public Dto(String data){ this.data=data; } public String getData() { return data; } public void setData(String data) { this.data = data; } }
2)mapper接口
public interface Mapper { Map<String,Object> getDataByTableNm(Map<String, Object> paraMap); }
3)调用
//查询参数 Map<String,Object> paraMap=new HashMap<>(); //用于接收存储过程返回结果集 paraMap.put("resultSet",""); //表名 paraMap.put("tableNm",tableNm); mapper.getDataByTableNm(paraMap); //输出结果 for(Dto dto:(List<Dto>)paraMap.get("resultSet")){ System.out.println(dto); }
分类:
note
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现