当前位置: 首页 > news >正文

MyBatisPlus查询数据库中所有表的数据(AI)

简介

提供一个完整的解决方案,使用MyBatisPlus查询数据库中所有表的数据,并通过Vue前端展示。

代码

DatabaseExplorerApplication.java


@SpringBootApplication
public class DatabaseExplorerApplication {public static void main(String[] args) {SpringApplication.run(DatabaseExplorerApplication.class, args);}
}

TableInfoController.java

@RestController
@RequestMapping("/api/tables")
public class TableInfoController {@Autowiredprivate DataSource dataSource;@GetMapping("/list")public List<String> listTables() throws SQLException {List<String> tables = new ArrayList<>();try (Connection connection = dataSource.getConnection()) {DatabaseMetaData metaData = connection.getMetaData();ResultSet rs = metaData.getTables(null, null, "%", new String[]{"TABLE"});while (rs.next()) {tables.add(rs.getString("TABLE_NAME"));}}return tables;}@GetMapping("/data/{tableName}")public Map<String, Object> getTableData(@PathVariable String tableName,@RequestParam(defaultValue = "1") int page,@RequestParam(defaultValue = "10") int size) {Page<Map<String, Object>> pageInfo = new Page<>(page, size);SqlRunner sqlRunner = SqlRunner.db();String countSql = "SELECT COUNT(*) FROM " + tableName;String dataSql = "SELECT * FROM " + tableName + " LIMIT " + pageInfo.getSize() + " OFFSET " + (pageInfo.getCurrent() - 1) * pageInfo.getSize();Map<String, Object> result = new HashMap<>();result.put("total", sqlRunner.selectOne(countSql));result.put("records", sqlRunner.selectList(dataSql));return result;}
}

DatabaseExplorer.vue

<template><div class="container mx-auto p-4"><h1 class="text-2xl font-bold mb-4">数据库浏览器</h1><div class="flex gap-4"><div class="w-1/4 bg-gray-100 p-4 rounded"><h2 class="text-lg font-semibold mb-2">表列表</h2><ul class="space-y-1"><li v-for="table in tables" :key="table" @click="selectTable(table)"class="p-2 hover:bg-blue-100 cursor-pointer rounded":class="{ 'bg-blue-200': selectedTable === table }">{{ table }}</li></ul></div><div class="w-3/4"><div v-if="selectedTable" class="bg-white p-4 rounded shadow"><h2 class="text-lg font-semibold mb-4">{{ selectedTable }} 数据</h2><div class="overflow-x-auto"><table class="min-w-full border"><thead><tr class="bg-gray-50"><th v-for="column in columns" :key="column" class="px-4 py-2 text-left border-b">{{ column }}</th></tr></thead><tbody><tr v-for="(row, index) in tableData" :key="index"><td v-for="(value, key) in row" :key="key" class="px-4 py-2 border-b">{{ value }}</td></tr></tbody></table></div><div class="mt-4 flex justify-between items-center"><div>{{ total }} 条记录</div><div class="flex gap-2"><button @click="prevPage" :disabled="currentPage === 1"class="px-3 py-1 bg-gray-200 rounded disabled:opacity-50">上一页</button><span>{{ currentPage }}</span><button @click="nextPage":disabled="currentPage * pageSize >= total"class="px-3 py-1 bg-gray-200 rounded disabled:opacity-50">下一页</button></div></div></div></div></div></div>
</template><script>
import axios from 'axios';export default {data() {return {tables: [],selectedTable: null,tableData: [],columns: [],currentPage: 1,pageSize: 10,total: 0};},async created() {await this.fetchTables();},methods: {async fetchTables() {const response = await axios.get('/api/tables/list');this.tables = response.data;},async selectTable(table) {this.selectedTable = table;this.currentPage = 1;await this.fetchTableData();},async fetchTableData() {const response = await axios.get(`/api/tables/data/${this.selectedTable}`, {params: {page: this.currentPage,size: this.pageSize}});this.tableData = response.data.records;this.total = response.data.total;if (this.tableData.length > 0) {this.columns = Object.keys(this.tableData[0]);}},prevPage() {if (this.currentPage > 1) {this.currentPage--;this.fetchTableData();}},nextPage() {if (this.currentPage * this.pageSize < this.total) {this.currentPage++;this.fetchTableData();}}}
};
</script>

总结

  1. 后端实现使用MyBatisPlus的SqlRunner直接执行SQL查询
  2. 通过DatabaseMetaData获取数据库所有表信息
  3. 前端使用Vue3和TailwindCSS构建响应式界面
  4. 实现表列表展示和表数据分页查询功能
  5. 支持点击表名查看表数据并分页浏览
  6. 自动识别表字段并动态生成表格列
  7. 包含完整的分页导航功能
http://www.dtcms.com/a/315720.html

相关文章:

  • 使标签垂直水平居中的多种方法
  • 自动驾驶控制算法——MPC控制算法
  • 数据结构 实现单链表
  • Vue3核心语法进阶(Props)
  • C语言:选择排序算法深度剖析!
  • nodejs 编码初体验
  • JAVA无人共享球杆柜系统球杆柜租赁系统源码支持微信小程序
  • 嵌入式硬件中运放的基本控制原理
  • 基于k8s环境下的pulsar常用命令(上)
  • 达梦分布式集群DPC_分布式任务执行拆分流程_yxy
  • 安全测绘之敏感网络资产排查指南
  • 在Linux上部署RabbitMQ、Redis、ElasticSearch
  • Taro Hooks 完整分类详解
  • 深度解析随机森林 API:参数奥秘与调优指南
  • 在AI时代,如何制定有效的职业规划?AI时代职业规划+AI产品经理角色
  • 【学习笔记】NTP时间同步验证
  • Kali Linux 2025.2基于MITRE ATTCK框架
  • DPU(数据处理单元)架构中,SoC(系统级芯片)与FPGA(现场可编程门阵列)之间的数据交互
  • 山东移动e企组网技术分析:底层架构与实现方式
  • 第12届蓝桥杯Scratch_选拔赛_初级组_真题2020年11月21日
  • SpringBoot3.x入门到精通系列:4.2 整合 Kafka 详解
  • Linux第十二讲:线程概念与控制
  • 前端保持和服务器时间同步的方法【使用vue3举例】
  • Qt 音频播放全攻略:常用函数、实战示例与资源获取
  • 升级 Elasticsearch 到新的 AWS Java SDK
  • 基于LDA主题的网络舆情与情感分析——以云南某景区话题为例
  • 8.5 CSS3多列布局
  • 继承知识总结
  • 【AI】提示词与自然语言处理:从NLP视角看提示词的作用机制
  • 【Lua】题目小练8