news 2026/4/23 12:53:30

java根据pojo生成mapper

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java根据pojo生成mapper


使用命令生成class文件,执行就生成了

package com.main.util; import java.io.File; import java.io.FileWriter; import java.io.IOException; public class UtilMapper { /** * 批量生成POJO对应的Mapper文件 * @param pojoDir POJO文件目录路径 * @param daoDir DAO文件目录路径 * @param basePackage 基础包名 */ public static void generateMappers(String pojoDir, String daoDir, String basePackage) { File pojoDirectory = new File(pojoDir); File daoDirectory = new File(daoDir); // 确保DAO目录存在 if (!daoDirectory.exists()) { daoDirectory.mkdirs(); } // 获取所有POJO文件 File[] pojoFiles = pojoDirectory.listFiles((dir, name) -> name.endsWith(".java")); if (pojoFiles == null) { System.out.println("未找到POJO文件"); return; } int generatedCount = 0; int skippedCount = 0; for (File pojoFile : pojoFiles) { String pojoName = pojoFile.getName().replace(".java", ""); String mapperFileName = pojoName + "Mapper.java"; File mapperFile = new File(daoDirectory, mapperFileName); // 如果Mapper文件已存在,跳过 if (mapperFile.exists()) { System.out.println("跳过已存在的Mapper: " + mapperFileName); skippedCount++; continue; } // 生成Mapper文件内容 String mapperContent = generateMapperContent(pojoName, basePackage); try (FileWriter writer = new FileWriter(mapperFile)) { writer.write(mapperContent); System.out.println("生成Mapper文件: " + mapperFileName); generatedCount++; } catch (IOException e) { System.err.println("生成Mapper文件失败: " + mapperFileName + " - " + e.getMessage()); } } System.out.println("\n生成完成!"); System.out.println("成功生成: " + generatedCount + " 个"); System.out.println("跳过已存在: " + skippedCount + " 个"); System.out.println("总计处理: " + (generatedCount + skippedCount) + " 个"); } /** * 生成单个Mapper文件内容 * @param pojoName POJO类名 * @param basePackage 基础包名 * @return Mapper文件内容 */ private static String generateMapperContent(String pojoName, String basePackage) { StringBuilder content = new StringBuilder(); content.append("package ").append(basePackage).append(".dao;\n\n"); content.append("import ").append(basePackage).append(".pojo.").append(pojoName).append(";\n"); content.append("import tk.mybatis.mapper.common.Mapper;\n\n"); content.append("public interface ").append(pojoName).append("Mapper extends Mapper<").append(pojoName).append("> {\n"); content.append("}\n"); return content.toString(); } /** * 主方法,用于直接运行 */ public static void main(String[] args) { // 默认路径配置 - 相对于当前工作目录 String pojoDir = "src/main/java/com/main/pojo"; String daoDir = "src/main/java/com/main/dao"; String basePackage = "com.main"; System.out.println("开始批量生成Mapper文件..."); System.out.println("POJO目录: " + pojoDir); System.out.println("DAO目录: " + daoDir); System.out.println("基础包名: " + basePackage); System.out.println("========================================="); generateMappers(pojoDir, daoDir, basePackage); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 0:47:15

Qwen3-14B-AWQ智能体开发与工具调用实战

Qwen3-14B-AWQ智能体开发与工具调用实战 在当前企业级AI应用快速落地的背景下&#xff0c;如何选择一款既能保证推理质量、又具备高效响应和低成本部署能力的大模型&#xff0c;成为开发者关注的核心问题。阿里云通义千问推出的 Qwen3-14B-AWQ 正是针对这一需求设计的中型商用…

作者头像 李华
网站建设 2026/4/23 12:48:17

LobeChat与Hugging Face模型库直连配置教程

LobeChat 与 Hugging Face 模型库直连配置深度实践 在今天&#xff0c;构建一个属于自己的 AI 助手不再是只有大公司才能做到的事。随着开源生态的成熟&#xff0c;越来越多的开发者开始尝试将强大的语言模型集成到直观易用的界面中——而 LobeChat Hugging Face 的组合&#…

作者头像 李华
网站建设 2026/4/23 12:48:44

springboot服务监控脚本1.0

背景&#xff1a; 系统刚上线&#xff0c;需要监控各网格服务的运行状态&#xff0c;仅靠人工监控&#xff0c;费事费力&#xff0c;费成本。但还要满足系统需求&#xff0c;还需要满足领导的要求。于是乎&#xff0c;开干~ 实现思路&#xff1a; 编写脚本&#xff0c;加入定时…

作者头像 李华
网站建设 2026/4/23 12:49:29

AI驱动的命令行工具集x-cmd鸿蒙化适配后通过DevBox安装使用

&#x1f4cb; 目录 1. &#x1f4d6; 背景介绍2. &#x1f6e0;️ 环境准备3. &#x1f4c1; 项目结构分析4. &#x1f50d; 问题诊断与解决5. ✏️ 详细修改步骤6. ✅ 构建验证7. &#x1f4bb; 使用示例8. &#x1f4da; 总结与最佳实践 1. &#x1f4d6; 背景介绍 1.1 &a…

作者头像 李华
网站建设 2026/4/21 19:53:59

GPT-SoVITS:零样本语音合成技术解析

GPT-SoVITS&#xff1a;零样本语音合成技术解析 在AI生成内容&#xff08;AIGC&#xff09;浪潮席卷全球的今天&#xff0c;个性化语音不再是大厂专属的技术壁垒。一款名为 GPT-SoVITS 的开源项目悄然走红——它让普通用户仅用1分钟语音、甚至5秒音频片段&#xff0c;就能“克…

作者头像 李华
网站建设 2026/4/19 13:01:40

使用在React Native中开发一个Sticky(粘性)布局,组合使用`ScrollView`和`View`组件的`style`属性来模拟Sticky布局,关键是要在滚动视图内部使用绝对定位和相对

在React Native中实现类似原生Harmony或Harmony中的Sticky&#xff08;粘性&#xff09;布局&#xff0c;通常指的是一个元素在滚动时保持固定位置&#xff0c;直到它滚动到视口之外并被下一个固定的元素所替代。这种布局在许多应用中非常有用&#xff0c;例如导航栏或侧边栏菜…

作者头像 李华