基于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.hqwc.cn/news/701840.html

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

相关文章

如何在 Ubuntu 12.10 上使用 Python 创建 Nagios 插件

介绍 Python 是一种在 Linux 上默认可用的流行命令处理器。 我们之前已经介绍过如何在 Ubuntu 12.10 x64 上安装 Nagios 监控服务器。 这一次&#xff0c;我们将扩展这个想法&#xff0c;使用 Python 创建 Nagios 插件。 这些插件将在客户 VPS 上运行&#xff0c;并通过 NR…

利用KMeans进行遥感NDWI进行聚类分割

&#xff08;1&#xff09;解释 KMeans算法是一种非监督式的聚类算法&#xff0c;于1967年由J. MacQueen提出&#xff0c;聚类的依靠是欧式距离&#xff0c;其核心思想就是将样本划分为几个类别&#xff0c;类里面的数据与类中心的距离最小。类的标签采用类里面样本的均值。 这…

Android Compose四: 常用的组件 Text

Text Composable fun Text(text: String, //用于设置显示文本modifier: Modifier Modifier, //设置形状大小点击事件等color: Color Color.Unspecified, //fontSize: TextUnit TextUnit.Unspecified,fontStyle: FontStyle? null,fontWeight: FontW…

动态规划-两个数组的dp问题3

文章目录 1. 两个字符串的最小ASCII删除和&#xff08;712&#xff09;2. 最长重复子数组&#xff08;718&#xff09; 1. 两个字符串的最小ASCII删除和&#xff08;712&#xff09; 题目描述&#xff1a; 状态表示&#xff1a; 根据经验以及题目要求&#xff0c;建立二维数…

数据结构与算法学习笔记三---栈和队列

目录 前言 一、栈 1.栈的表示和实现 1.栈的顺序存储表示和实现 1.C语言实现 2.C实现 2.栈的链式存储表示和实现 1.C语言实现 2.C实现 2.栈的应用 1.数制转换 二、队列 1.栈队列的表示和实现 1.顺序队列的表示和实现 2.链队列的表示和实现 2.循环队列 前言 这篇文…

JVM 自定义类加载器

文章目录 1. 为什么要自定义类加载器1.1 隔离加载类1.2 修改类加载的方式1.3 扩展加载源1.4 防止源码泄漏 2. 自定义类加载器应用场景有哪些3. 两种实现方式 自定义类加载器是Java中的一个高级特性&#xff0c;允许您在运行时动态加载类。通过自定义类加载器&#xff0c;您可以…

postman 使用教程

1. get 请求 &#xff1f;号后为 get 请求的参数 参数之间用符号"&" 分隔。 假设url 为&#xff1a;http://10.71.7.101/cgi-bin/gw-config.cgi?methodgetway_param&t1715658871647 复制进来到postman的地址栏 后 &#xff1f;后面的参数会自动添加到参…

JS中的宏任务和微任务

JavaScript 引擎是建立在一个事件循环系统之上的&#xff0c;它实时监控事件队列&#xff0c;如果有事件就执行&#xff0c;如果没有事件就等待。事件系统是一个典型的生产消费模式&#xff0c;生产者发出事件&#xff0c;接收者监听事件&#xff0c;在UI 开发中是常见的一个设…

OFDM802.11a的FPGA实现(十五)短训练序列:STS(含Matlab和verilog代码)

原文链接&#xff08;相关文章合集&#xff09;&#xff1a;OFDM 802.11a的xilinx FPGA实现 1.前言 在之前已经完成了data域数据的处理&#xff0c;在构建整个802.11a OFDM数据帧的时候&#xff0c;还剩下前导码和signal域的数据帧&#xff0c;这两部分的内容。 PLCP的前导部分…

【MySQL】Mysql——卸载文档(windows版本)

MySQL卸载文档-Windows版 1. 停止MySQL服务 winR 打开运行&#xff0c;输入 services.msc 点击 “确定” 调出系统服务。 停止Mysql服务 2. 卸载MySQL相关组件 打开控制面板 —> 卸载程序 —> 卸载MySQL相关所有组件 3. 删除MySQL安装目录 4. 删除MySQL数据目录 数…

Axure网上超市用户端APP原型 (O2O生鲜电商/买菜到家/数字零售/京东到家/抖音超市领域)

作品概况 页面数量&#xff1a;共 100 页 源文件格式&#xff1a;rp格式&#xff0c;兼容 Axure RP 9/10&#xff0c;非程序软件无源代码 适用领域&#xff1a;O2O生鲜电商、网上超市、买菜到家、数字零售 作品特色 本作品为网上超市用户消费端Axure交互原型&#xff0c;属于…

食品饮料厂做配送小程序的作用是什么

食品饮料厂品牌旗下通常有多个产品类型&#xff0c;多数是以批发为主&#xff0c;也有直营店及线上直播零售等方式&#xff0c;商家如何将品牌宣传和产品销售的更广是需要思考的&#xff0c;其销售模式也多种多样。 私域店铺也是品牌增长的重要方式&#xff0c;在【雨科】平台…