@Override,表示当前的方法定义将覆盖超类中的方法。 @Deprecated,表示当前方法即将废弃,不推荐使用。 @SuppressWarnings,表示忽略编译器的警告信息。
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Constraints {
boolean primaryKey() default false;
boolean allowNull() default true;
boolean unique() default false;
}
所有基本数据类型(int,float,boolean,byte,double,char,long,short) String类型 Class类型 enum类型 Annotation类型 以上所有类型的数组
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SQLString {
int value() default 0;
String name() default "";
Constraints constraints() default @Constraints;
//@Constraints后没有括号表明使用默认值,可以加括号,在里面定义初始值,比如@Constraints(unique=true)
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface DBTable {
public String name() default "";
}
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SQLInteger {
String name() default "";
Constraints constraints() default @Constraints;
}
@DBTable(name = "MEMBER")
public class Member {
@SQLString(30) String firstName;
@SQLString(50) String lastName;
@SQLInteger int age;
@SQLString(value = 30, constraints = @Constraints(primaryKey = true)) String handle;
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public int getAge() {
return age;
}
public String getHandle() {
return handle;
}
public String toString() {
return handle;
}
}
public class TableCreator {
public static void main(String[] args) throws Exception{
//传入我们定义好的Bean类名,带上包名
Class<?> cl = Class.forName("annotation.Member");
//检查我们传入的类是否带有@DBTable注解
DBTable dbTable = cl.getAnnotation(DBTable.class);
List<String> columnDefs = new ArrayList<String>();
//得到类中的所有定义的属性
for(Field filed : cl.getDeclaredFields()){
String columnName = null;
//得到属性的注解,对一个目标可以使用多个注解
Annotation[] anns = filed.getAnnotations();
if(anns.length < 1){
continue;
}
//SQLString注解走着
if(anns[0] instanceof SQLString){
SQLString sString = (SQLString)anns[0];
//name()使用的是默认值,所以这里取属性名
if(sString.name().length() < 1){
columnName = filed.getName().toUpperCase();
}else{
columnName = sString.name();
}
//构建SQL语句
columnDefs.add(columnName + " VARCHAR(" + sString.value() + ")" + getConstraints(sString.constraints()));
}
//SQLInteger注解走着
if(anns[0] instanceof SQLInteger){
SQLInteger sInt = (SQLInteger)anns[0];
if(sInt.name().length() < 1){
columnName = filed.getName().toUpperCase();
}else{
columnName = sInt.name();
}
columnDefs.add(columnName + " INT" + getConstraints(sInt.constraints()));
}
}
StringBuilder creator = new StringBuilder("CREATE TABLE " + dbTable.name() + "( ");
for(String c : columnDefs){
creator.append("n" + c + ",");
}
creator.deleteCharAt(creator.length()-1);
creator.append(")");
System.out.println(creator.toString());
}
private static String getConstraints(Constraints con) {
String constraints = "";
if(!con.allowNull()){
constraints += " NOT NULL";
}
if(con.primaryKey()){
constraints += " PRIMARY KEY";
}
if(con.unique()){
constraints += " UNIQUE";
}
return constraints;
}
}
CREATE TABLE MEMBER( FIRSTNAME VARCHAR(30), LASTNAME VARCHAR(50), AGE INT, HANDLE VARCHAR(30) PRIMARY KEY)
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有