目录
- 引言
- 实例
- 新建两个注解
- 标注实体类
- 拼接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语句成功。有时间的朋友可以自己实现增删改查的功能,无非就是把生成过程提出来然后传一些需要修改和指定的值进行操作。