Student类
//注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在,
//通过该注解才能使用反射获取属性
@Retention(RetentionPolicy.RUNTIME)
//自定义数据库的表名
@interface Table {
String value();
}
@Retention(RetentionPolicy.RUNTIME)
//自定义数据库的列名,长度和类型
@interface Property {
String name();
//自定义长度,不写默认是0
int length() default 0;
String type();
}
@Table("lzh_student")
public class Student {
@Property(name="lzh_username",length = 10,type = "varchar")
private String username;
@Property(name="lzh_password",length = 10,type = "varchar")
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Demo
public class Demo1 {
public static void main(String[] args) throws Exception {
Class<?> forName = Class.forName("org.lzh.xxx.Student");
//获取当前所有的成员变量
Field[] fields = forName.getDeclaredFields();
//需要做字符串拼接
StringBuffer stringBuffer;
stringBuffer = new StringBuffer();
stringBuffer.append("select ");
//遍历
for (int i = 0; i < fields.length; i++) {
//得到每一个成员变量
Field fields1 = fields[i];
//获取每一个成员变量上的注解
Property property = fields1.getDeclaredAnnotation(Property.class);
//得到注解的内容
stringBuffer.append(property.name());
//当数组长度减去i大于1的时候需要拼接一个逗号
if (fields.length - i > 1) {
stringBuffer.append(",");
}
}
//获取类上注解的内容
Table table = forName.getDeclaredAnnotation(Table.class);
stringBuffer.append(" from ").append(table.value());
System.out.println(stringBuffer.toString());
}
}
输出:
select lzh_username,lzh_password from lzh_student