文章转自:河北凝讯科技订阅号
文章名称:spring注解是如何实现的
1、DBTable注解,标注在类上
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface DBTable {
public String name() default "";
}
2、SQLString注解,标注在字段上
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 SQLString {
int id() default 0;
int value() default 0;
String name() default "";
}
3、表Member(需要创建的表)
@DBTable(name = "member")
public class Member {
@SQLString(value = 50, name = "last_name")
String lastName;
@SQLString(value = 80, name = "first_name")
String firstName;
}
4、使用反射将注解转换成sql
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.ArrayList;
public class TableCreator {
public static void main(String[] args) throws ClassNotFoundException {
args = new String[] { "com.xiaofeng.shiro.anno.Member" };
for (String className : args) {
Class<?> cl = Class.forName(className);
DBTable dbTable = cl.getAnnotation(DBTable.class);
String tableName = dbTable.name();
if (tableName.length() < 1) {
tableName = cl.getSimpleName().toUpperCase();
}
System.out.println("表名称:" + tableName);
ArrayList<String> columnDefs = new ArrayList<String>();
for (Field field : cl.getDeclaredFields()) {
String columnName = null;
Annotation[] anns = field.getDeclaredAnnotations();
if (anns.length < 1) {
continue;
}
Annotation sqlStrAnno = anns[0];
if (sqlStrAnno instanceof SQLString) {
SQLString s = (SQLString) sqlStrAnno;
if (s.name().length() < 1) {
columnName = field.getName().toUpperCase();
} else {
columnName = s.name();
}
columnDefs.add(columnName + " VARCHAR(" + s.value() + ")");
}
}
StringBuilder createCommand = new StringBuilder("CREATE TABLE " + tableName + "(");
for (String columndef : columnDefs) {
createCommand.append("\n " + columndef + ",");
}
String tableCreate = createCommand.substring(0, createCommand.length() - 1) + ")";
System.out.println("建表语句:"+tableCreate);
}
}
}
结果:
表名称:member
建表语句:CREATE TABLE member(
last_name VARCHAR(50),
first_name VARCHAR(80))