基于java 自定义注解Annotation设计简单ORM框架——进阶篇

news2025/1/16 11:12:50

目录

  • 引言
  • 实例
    • 新建两个注解
    • 标注实体类
    • 拼接sql语句
  • 总结

引言

一般Java规范编程(只是一种习惯,而不是强制)中,变量的命名方式一般采用驼峰式命名。比如userName,userImage。但是在数据库中一般不会采用驼峰式,而是采用下划线_的方式,比如user_name,user_image,这里就利用自定义注解的方式去进行一个转换。注解分为两种:JDK自带注解和自定义注解,这里利用反射去构建SQL语句。

实例

新建两个注解

Table.java
将实体类注解为表

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * @Description TODO
 * @Author liqinglong
 * @DateTime 2024-05-14 18:02
 * @Version 1.0
 */
//Retention(RetentionPolicy.RUNTIME)这个注解是jdk自带注解表示可以使用反射
@Retention(RetentionPolicy.RUNTIME)
public @interface Table {
    //name参数
    String name();

}

column.java
变量注解为列

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * @Description TODO
 * @Author liqinglong
 * @DateTime 2024-05-14 18:03
 * @Version 1.0
 */
//@Retention(RetentionPolicy.RUNTIME)这个注解是jdk自带注解表示可以使用反射
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
    String name();
}
 

标注实体类

UserEntity.java

/**
 * @Description TODO
 * @Author liqinglong
 * @DateTime 2024-05-14 18:04
 * @Version 1.0
 */
@Table(name = "t_user")
public class UserEntity {
    //注解时传入需要的name
    @Column(name="user_name")
    private String userName;
    @Column(name="user_image")
    private int userImage;

}

拼接sql语句

在Main函数中去利用这些注解进行反射得到我们想要的SQL语句了,这里只简单的写一个查询的语句,具体的其他语句类似。
Main.java

import java.lang.reflect.Field;

/**
 * @Description TODO
 * @Author liqinglong
 * @DateTime 2024-05-14 18:08
 * @Version 1.0
 */
public class Main {
    public static void main(String[] args) throws ClassNotFoundException {

        // 通过实体类的全路径拿到类的class字节码
        Class<?> forName = Class.forName("com.ruoyi.web.annotation.UserEntity");

        // 拿到类的成员属性
        Field[] declaredFields = forName.getDeclaredFields();
        StringBuffer sb = new StringBuffer();
        sb.append("select ");
        // 遍历成员属性
        for (int i = 0; i < declaredFields.length; i++) {
            // 拿到注解
            Column col = declaredFields[i].getDeclaredAnnotation(Column.class);
            //获取注解中的name值
            String col_name = col.name();
            sb.append(col_name);
            if(i == declaredFields.length-1) {
                sb.append(" from ");
            }else {
                sb.append(" , ");
            }
        }
        // 拿到Table注解
        Table table = forName.getAnnotation(Table.class);

        // Table注解的name值
        String table_name = table.name();
        sb.append(table_name);
        System.out.println(sb.toString());
    }
}

运行结果
select user_name , user_image from t_user
在这里插入图片描述

总结

控制台打印如下结果表示利用注解反射生成SQL语句成功。有时间的朋友可以自己实现增删改查的功能,无非就是把生成过程提出来然后传一些需要修改和指定的值进行操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1674910.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工业物联网解决方案:机房动环监控系统

工业物联网解决方案&#xff1a;机房动环监控系统 工业物联网&#xff08;IIoT&#xff09;作为数字化转型的关键驱动力&#xff0c;正深刻改变着各行各业的运作模式&#xff0c;其中机房动环监控系统是实现智能化运维管理的重要组成部分。该系统通过集成传感器技术、大数据分…

位图(c++)

文章目录 1.位图概念2.位图的实现3.应用&#xff08;解决整形存在或次数问题&#xff09;3.1存在问题3.2次数问题 5.搜索的方法对比&#xff1a; 1.位图概念 和哈希一样&#xff0c;都是一个表来记录某个元素的个数或者存在与否&#xff1b;不同的是哈希使用的计算机定义的完整…

跨境必看|TikTok账号运营的八大秘籍

国内的传统生意都是可以在抖音上做&#xff0c;那么也可以在TikTok 上重新做一遍。那该如何才能把握住这片巨大的蓝海&#xff0c;TikTok 账号的运营就成为了主要的关键了&#xff0c;对于TikTok账号运营的八大秘籍&#xff0c;大家一起看看是如何做的&#xff1f; 一、固定节…

部署管理征信链码

一 . 链码准备 需要删除上面后面标记的文件&#xff0c;之后拖入 二. 打包链码 注意需要先启动链 打包测试链码 export FABRIC_CFG_PATH${PWD}/config peer lifecycle chaincode package ./chaincode/chaincode_basic.tar.gz --path ./chaincode/credit_chaincode --lang n…

VMware虚拟机安装详细教程

VMware下载安装好后&#xff0c;下载好我们要安装的操作系统的镜像文件后&#xff0c;此处安装的为centos7版本&#xff0c;就可以开始安装了。 1点击下一步 image 2、勾选【我接受条件款协议中的条款】&#xff0c;然后点击【下一步】。 image 3、取消勾选&#xff0c;然后点…

【瑞萨RA6M3】1. 基于 vscode 搭建开发环境(后续)

编译 mkdir build cd build cmake .. -G"Unix Makefiles" make -j或者 cmake -Bbuild -G"Unix Makefiles" cmake --build build创建快捷指令&#xff1a; 删除 .vscode/tasks.json&#xff0c; 存储占用和生成 MAP 编译完成后&#xff0c;打印内存占用…

大数据可视化实验(五):Tableau数据可视化

目录 一、实验目的... 1 二、实验环境... 1 三、实验内容... 1 1&#xff09;打开数据源... 1 2&#xff09;进入工作簿... 2 3&#xff09;字段设置... 2 4&#xff09;数据筛选... 3 5&#xff09;绘制条形图... 3 四、思考问题... 4 五、总结与心得体会... 4 一、…

04-单片机商业项目编程,从零搭建低功耗系统设计

一、本文内容 上一节《03-单片机商业项目编程&#xff0c;从零搭建低功耗系统设计-CSDN博客》我们确定了设计思路&#xff0c;并如何更有效的保持低功耗&#xff0c;这节我们就准备来做软件框架设计。在AI飞速发展的时代&#xff0c;我们也会利AI来辅助我们完成&#xff0c;让自…

【Image captioning】In Defense of Grid Features for Visual Question Answering实现流程

In Defense of Grid Features for Visual Question Answering实现流程 网格特征预训练代码 这是该论文的特征预训练代码发布: @InProceedings{jiang2020defense,title={In Defense of Grid Features for Visual Question Answering},author={Jiang, Huaizu and Misra, Ishan…

机器学习实战宝典:用scikit-learn打造智能应用

书接上文——《数据探险家的终极指南&#xff1a;用Python挖掘机器学习的奥秘》 前文我们在这段精彩的机器学习探险之旅中&#xff0c;从基础概念出发&#xff0c;深入探索了使用Python和scikit-learn库进行数据分析和模型构建的全过程。 我们首先了解了机器学习的基本原理&am…

通义千问 1.5 -7B fine-tune验证

尝试对对中文数据进行finetune验证&#xff0c;测试模型的可优化方向。下面是代码的详细情况 代码实现 from datasets import load_dataset from transformers import (AutoModelForCausalLM,AutoTokenizer,BitsAndBytesConfig,HfArgumentParser,AutoTokenizer,TrainingArgum…

hadoop学习---基于Hive的数据仓库相关函数机制及其优化方案

Hive相关函数&#xff08;部分&#xff09;&#xff1a; if函数: 作用: 用于进行逻辑判断操作 语法: if(条件, true返回信息,false返回信息) 注意: if函数支持嵌套使用 select if(aa,’bbbb’,111) fromlxw_dual; bbbb select if(1<2,100,200) fromlxw_dual; 200nvl函数:…

【Python】理解WOE(Weight of Evidence)和IV(Information Value)

忠孝东路走九遍 脚底下踏著曾经你我的点点 我从日走到夜 心从灰跳到黑 我多想跳上车子离开伤心的台北 忠孝东路走九遍 穿过陌生人潮搜寻你的脸 有人走的匆忙 有人爱的甜美 谁会在意擦肩而过的心碎 &#x1f3b5; 动力火车《忠孝东路走九遍》 在信用评分和…

教育型内容的制胜秘诀:Kompas.ai如何结合知识与营销

在数字化营销的浪潮中&#xff0c;教育型内容已经成为品牌建立权威性和提供价值的重要手段。通过分享专业知识和见解&#xff0c;品牌不仅能够吸引目标受众&#xff0c;还能够在潜在客户心中建立起专业和可信赖的形象。本文将深入分析教育型内容的重要性&#xff0c;详细介绍Ko…

VALSE 2024合合信息 | 文档解析与向量化技术加速多模态大模型训练与应用

第十四届视觉与学习青年学者研讨会&#xff08;VALSE 2024&#xff09;近期在重庆悦来国际会议中心圆满举行&#xff0c;由中国人工智能学会&#xff08;CAAI&#xff09;、中国图象图形学会&#xff08;CSIG&#xff09;、中国民族贸易促进会主办&#xff0c;重庆邮电大学承办…

数据库系统概论(个人笔记)(第二部分)

数据库系统概论&#xff08;个人笔记&#xff09; 文章目录 数据库系统概论&#xff08;个人笔记&#xff09;2、关系模型简介2.1 关系数据库的结构2.2 数据库模式2.3 键2.4 模式图2.5 关系查询语言2.6 关系代数 2、关系模型简介 2.1 关系数据库的结构 Structure of Relational…

【目标检测】YOLOv5|YOLOv8模型QT界面可视化部署

YOLO-Deploy-QT_Interface 最近笔者做了YOLO系列算法的部署工作,现做一个总结。主要工作是做了用于部署YOLOv5和YOLOv8的可视化QT界面,可实现图片、文件夹、视频、摄像头的ONNX与OpenVino部署,具体效果如下: 代码链接:https://github.com/Zency-Sun/YOLO-Deploy-QT_Inte…

开源之夏又有新项目发布!快来认领!¥12,000 奖金等你来!

又有新项目加入开源之夏啦&#xff01;KubeBlocks 的亲兄弟 WeScale 也加入开源之夏啦&#xff01;一起来了解下 WeScale 社区及它带来的项目吧&#xff01; WeScale 是什么&#xff1f; WeScale 社区源自对更好的数据库访问体验的追求。在现代应用程序开发中&#xff0c;数据…

一文扫盲(13):电商管理系统的功能模块和设计要点

电商管理系统是一种用于管理和运营电子商务平台的软件系统。它提供了一系列功能模块&#xff0c;帮助企业进行商品管理、订单管理、会员管理、营销推广、数据分析等工作。本文将从以下四个方面介绍电商管理系统。 一、什么是电商管理系统 电商管理系统是一种集成了各种功能模块…

Android Q - 音频通路调试

对于当前模块不是很清楚&#xff0c;刚好有个项目这方面有点问题&#xff0c;根据展锐支持文档一步步检查就可以了。首先得先弄清楚硬件具体是怎么连接的&#xff0c;比如文档提到的案例&#xff1a;sprd codec speaker output 连接外部 PA。 耳机接的是什么&#xff0c;speake…