TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
一、被注解了的javaBean类
- @DBTable(name = "MEMBER")
- public class Member {
- @SQLString(30) String firstName;
- @SQLString(50) String lastName;
- @SQLInteger Integer age;
- @SQLString(value = 30, constraints = @Constraints(primaryKey = true)) String handle;
- static int memberCount;
- public String getHandle() { return handle; }
- public String getFirstName() { return firstName; }
- public String getLastName() { return lastName; }
- public String toString() { return handle; }
- public Integer getAge() { return age; }
- } ///:~
- 二、自定义的注解
- import java.lang.annotation.*;
- //这个注解用于生成数据库表
- @Target(ElementType.TYPE) // 该注解用于类
- @Retention(RetentionPolicy.RUNTIME)//运行期也保留注解
- public @interface DBTable {
- public String name() default "";
- } ///:~
- import java.lang.annotation.*;
- //该注解用于修饰JavaBean的域
- @Target(ElementType.FIELD)
- @Retention(RetentionPolicy.RUNTIME)
- public @interface SQLInteger {
- String name() default "";
- Constraints constraints() default @Constraints;
- } ///:~
- import java.lang.annotation.*;
- //该注解用于修饰JavaBean的域
- @Target(ElementType.FIELD)
- @Retention(RetentionPolicy.RUNTIME)
- public @interface SQLString {
- int value() default 0;
- String name() default "";
- Constraints constraints() default @Constraints;
- } ///:~
- import java.lang.annotation.*;
- //该注解用于修饰JavaBean的域
- @Target(ElementType.FIELD)
- @Retention(RetentionPolicy.RUNTIME)
- public @interface Constraints {
- boolean primaryKey() default false;
- boolean allowNull() default true;
- boolean unique() default false;
- } ///:~
- 三、处理类
- 下面的程序,从命令行传入一个类名并读取类文件,检查其上的数据库注解,然后生成用来创建数据库表的SQL命令.
- import java.lang.annotation.*;
- import java.lang.reflect.*;
- import java.util.*;
- public class TableCreator {
- public static void main(String[] args) throws Exception {
- if(args.length < 1) {
- System.out.println("arguments: annotated classes");
- System.exit(0);
- }
- for(String className : args) {
- Class< ? > cl = Class.forName(className);
- DBTable dbTable = cl.getAnnotation(DBTable.class);
- if(dbTable == null) {
- System.out.println(
- "No DBTable annotations in class " + className);
- continue;
- }
- String tableName = dbTable.name();
- // If the name is empty, use the Class name:
- if(tableName.length() < 1)
- tableName = cl.getName().toUpperCase();
- List
-
- columnDefs = new ArrayList
-
- ();
- for(Field field : cl.getDeclaredFields()) {
- String columnName = null;
- Annotation[] anns = field.getDeclaredAnnotations();
- if(anns.length < 1)
- continue; // Not a db table column
- if(anns[0] instanceof SQLInteger) {
- SQLInteger sInt = (SQLInteger) anns[0];
- // Use field name if name not specified
- if(sInt.name().length() < 1)
- columnName = field.getName().toUpperCase();
- else
- columnName = sInt.name();
- columnDefs.add(columnName + " INT" +
- getConstraints(sInt.constraints()));
- }
- if(anns[0] instanceof SQLString) {
- SQLString sString = (SQLString) anns[0];
- // Use field name if name not specified.
- if(sString.name().length() < 1)
- columnName = field.getName().toUpperCase();
- else
- columnName = sString.name();
- columnDefs.add(columnName + " VARCHAR(" +
- sString.value() + ")" +
- getConstraints(sString.constraints()));
- }
- StringBuilder createCommand = new StringBuilder(
- "CREATE TABLE " + tableName + "(");
- for(String columnDef : columnDefs)
- createCommand.append("
- " + columnDef + ",");
- // Remove trailing comma
- String tableCreate = createCommand.substring(
- 0, createCommand.length() - 1) + ");";
- System.out.println("Table Creation SQL for " +
- className + " is :
- " + tableCreate);
- }
- }
- }
- 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;
- }
- }
- /* 运行结果:
- Table Creation SQL for annotations.database.Member is :
- CREATE TABLE MEMBER(
- FIRSTNAME VARCHAR(30));
- Table Creation SQL for annotations.database.Member is :
- CREATE TABLE MEMBER(
- FIRSTNAME VARCHAR(30),
- LASTNAME VARCHAR(50));
- Table Creation SQL for annotations.database.Member is :
- CREATE TABLE MEMBER(
- FIRSTNAME VARCHAR(30),
- LASTNAME VARCHAR(50),
- AGE INT);
- Table Creation SQL for annotations.database.Member is :
- CREATE TABLE MEMBER(
- FIRSTNAME VARCHAR(30),
- LASTNAME VARCHAR(50),
- AGE INT,
- HANDLE VARCHAR(30) PRIMARY KEY);
- *///:~
-
-
复制代码
源码下载:http://file.javaxxz.com/2014/10/28/235636640.zip |
|