package com.entity;
import com.annocation.Col;
import com.annocation.Table;
@Table(name = "user")//user为数据库中表名
//定义User属性
public class User {
@Col(name = "userName")//user表中列名
private String userName;
@Col(name = "id")//user表中列名
private int id;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
package com.annocation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)//1.
@Retention(RetentionPolicy.RUNTIME)//2.自定义注解 编译完,运行时有效
//表
public @interface Table {
//定义方法 表名称
String name();
}
package com.annocation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
//字段名、列名
public @interface Col {
//列名
String name();
}
package com.main;
import java.lang.reflect.Field;
import com.annocation.Col;
import com.annocation.Table;
public class Test {
public static void main(String[] args) throws ClassNotFoundException {
// 定义sql语句对象,追加
StringBuffer sb = new StringBuffer();
// select 语句开头
sb.append("select ");
// 加载User类
Class<?> forname = Class.forName("com.entity.User");
// 拿到成员属性
Field[] declaredFields = forname.getDeclaredFields();
// 遍历属性
for (int i = 0; i < declaredFields.length; i++) {
// 拿到注解获取Col name值
Col col = declaredFields[i].getAnnotation(Col.class);
String name = col.name();
sb.append(name);
//判断是否为最后一个属性,最后一个追加from不是追加,
if (i == declaredFields.length - 1) {
sb.append(" from ");
} else {
sb.append(" ,");
}
}
// 拿到注解获取Table name值
Table table = forname.getAnnotation(Table.class);
String name = table.name();
sb.append(name);
// 输出sql语句
System.out.println(sb.toString());
}
}