java注意事项演示 地图产生表 演示样本  来自thinking in java 4 20代码的章

thinking in java 4免费下载:http://download.csdn.net/detail/liangrui1988/7580155

package org.rui.annotation.database;

import java.lang.annotation.*;
/**
 * 生成一个数据库表
 * @author lenovo
 *
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface DBTable {
  public String name() default "";

}
package org.rui.annotation.database;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * sql类型
 * @author lenovo
 *
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SQLString {
	int value() default 0;
	String name() default "";
	Constraints constraints() default @Constraints;

}
package org.rui.annotation.database;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 *  sql类型
 * @author lenovo
 *
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SqlInteger {
	int value() default 0;
	String name() default "";
	Constraints constraints() default @Constraints;

}
package org.rui.annotation.database;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * javaBean域准备的注解
 * @author lenovo
 *
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Constraints {
  boolean primaryKey() default false;
  boolean allowNull() default true;
  boolean unique() default false;
}
package org.rui.annotation.database;
/**
 * 假设要令嵌入的@Constraints注解中的unique()元素为true 并以此作为constraints()元素的默认值
 * 则须要例如以下定义该元素
 * @author lenovo
 *
 */
public @interface Uniqueness {
	Constraints constraints() default @Constraints(unique=true);
}
package org.rui.annotation.database;

@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;

	//get
	public String getFirstName() {
		return firstName;
	}
	public String getLastName() {
		return lastName;
	}
	public Integer getAge() {
		return age;
	}
	public String getHandle() {
		return handle;
	}

	@Override
	public String toString()
	{
		return handle;
	}

}
package org.rui.annotation.database;

import java.io.ObjectInputStream.GetField;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
/**
 * 相前资料请參考 thinking in  java 第4版 20章
 * @author lenovo
 *
 */
public class TableCreator {

	//解释注解 获得对应的值
	public 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;
	}

	public static void main(String[] args) throws ClassNotFoundException {
		String[] arr=new String[]{"org.rui.annotation.database.Member"};
		if (arr.length<1)
		{
			System.out.println("0000");
			System.exit(0);
		}

		for(String className:arr)
		{
			Class<?> clzz=Class.forName(className);
			DBTable table=clzz.getAnnotation(DBTable.class);
			if(table==null)
			{
				System.out.println("dbtable annotaions in class:"+className);
				continue;
			}

			String tableName=table.name();
			if(tableName.length()<1)
				tableName=clzz.getName().toUpperCase();

			 //结果集合
			 List<String> columnDefs=new ArrayList<String>();

			//获取全部字段
			for(Field f:clzz.getDeclaredFields())
			{
				String columnName =null;
				//获取字段上面的注解
				Annotation[] annot=f.getAnnotations();
				if(annot.length<1)continue;
				//假设是SqlInteger
				if(annot[0] instanceof SqlInteger)
				{
					SqlInteger sInt=(SqlInteger)annot[0];
					//假设没有指定名称    使用字段名称
					if(sInt.name().length()<1)
					{
						columnName=f.getName().toUpperCase();
					}else
					{
						columnName=sInt.name();
					}

					columnDefs.add(columnName+" INT"+getConstraints(sInt.constraints()));
				}
				//假设是string 内型
				if(annot[0] instanceof SQLString)
				{
					SQLString sStr=(SQLString)annot[0];
					if(sStr.name().length()<1)
					{
						columnName=f.getName().toUpperCase();
					}else
					{
						columnName=sStr.name();
					}
					columnDefs.add(columnName+" VARCHAR("+sStr.value()+")"+
					getConstraints(sStr.constraints()));
				}

				StringBuilder sql=new StringBuilder("CREATE TABLE "+tableName+"( ");
				for(String c:columnDefs)
				{
					sql.append("\n   "+c+",");//拼接字段
					//remove trailing comma
					String tableCreate=sql.substring(0,sql.length()-1)+");";
					System.out.println("table ceration sql fro "+className+" is :\n "+tableCreate);
				}
			}
		}

	}

}
/**output:
 table ceration sql fro org.rui.annotation.database.Member is :
 CREATE TABLE MEMBER(
   FIRSTNAME VARCHAR(30)NOT NULL);
table ceration sql fro org.rui.annotation.database.Member is :
 CREATE TABLE MEMBER(
   FIRSTNAME VARCHAR(30)NOT NULL);
table ceration sql fro org.rui.annotation.database.Member is :
 CREATE TABLE MEMBER(
   FIRSTNAME VARCHAR(30)NOT NULL,
   LASTNAME VARCHAR(50)NOT NULL);
table ceration sql fro org.rui.annotation.database.Member is :
 CREATE TABLE MEMBER(
   FIRSTNAME VARCHAR(30)NOT NULL);
table ceration sql fro org.rui.annotation.database.Member is :
 CREATE TABLE MEMBER(
   FIRSTNAME VARCHAR(30)NOT NULL,
   LASTNAME VARCHAR(50)NOT NULL);
table ceration sql fro org.rui.annotation.database.Member is :
 CREATE TABLE MEMBER(
   FIRSTNAME VARCHAR(30)NOT NULL,
   LASTNAME VARCHAR(50)NOT NULL,
   AGE INTNOT NULL);
table ceration sql fro org.rui.annotation.database.Member is :
 CREATE TABLE MEMBER(
   FIRSTNAME VARCHAR(30)NOT NULL);
table ceration sql fro org.rui.annotation.database.Member is :
 CREATE TABLE MEMBER(
   FIRSTNAME VARCHAR(30)NOT NULL,
   LASTNAME VARCHAR(50)NOT NULL);
table ceration sql fro org.rui.annotation.database.Member is :
 CREATE TABLE MEMBER(
   FIRSTNAME VARCHAR(30)NOT NULL,
   LASTNAME VARCHAR(50)NOT NULL,
   AGE INTNOT NULL);
table ceration sql fro org.rui.annotation.database.Member is :
 CREATE TABLE MEMBER(
   FIRSTNAME VARCHAR(30)NOT NULL,
   LASTNAME VARCHAR(50)NOT NULL,
   AGE INTNOT NULL,
   HANDLE VARCHAR(30)NOT NULLPRIMARY KEY);

 */

随机推荐

  1. webpack 学习笔记

    1.html-webpack-plugin 该插件主要作用是在release时,自动向index.html 文件中写入 <script>xx/xx/bundle.js</script ...

  2. 正则表达式之JSP、Android

    对于正则表达式,很多朋友一定不陌生,因为在我们做网站或apk时,当需要用户提交表单时,很多时间需要判断用户的输入是否合法,这个时间正则表达式就可以发挥它的作用了,我们知道正则表达式在这个方面是很强大的 ...

  3. ubuntu安装和查看已安装

    说明:由于图形化界面方法(如Add/Remove... 和Synaptic Package Manageer)比较简单,所以这里主要总结在终端通过命令行方式进行的软件包安装.卸载和删除的方法. 一.U ...

  4. Spring Uploading Files

    1,在servlet-dispatcher.xml中添加代码 <bean id="multipartResolver" class="org.springframe ...

  5. webdynpro的select_option示例

    需求,输入航线代码和航线编号区间,查询记录存在表中显示,并不是alv显示 1.使用组件WDR_SELECT_OPTIONS. 2.在组件控制器中加入以下组件 3.在视图属性中也添加该组件 4.创建节点 ...

  6. UVA 10003 Cutting Sticks

    题意:在给出的n个结点处切断木棍,并且在切断木棍时木棍有多长就花费多长的代价,将所有结点切断,并且使代价最小. 思路:设DP[i][j]为,从i,j点切开的木材,完成切割需要的cost,显然对于所有D ...

  7. 扣出的图片无法调整大小 photoshop mac版本

  8. JavaEE开发之SpringBoot工程的创建、运行与配置

    本篇博客我们就来聊一下如何使用Eclipse+STS插件来创建Spring Boot的工程.Spring Boot可以使我们更容易的使用Spring框架,在Spring Boot中自动配置了好多东西, ...

  9. 【Ubuntu 16】安装eclipse

    1.将eclipse.tar.gz传送到/home/xxx/下,解压缩,这里我已经配置好了JDK1.7,所以eclipse配置了就可以使用 2.创建快捷方式 dream361@master:~$ to ...

  10. VS2010 c/c++ 本地化 emscripten 配置

    配置环境 1.下载emsdk-1.35.0-full-64bit.exe,有VS2010的话直接安装. 2.安装好之后,打开cmd,# emsdk update # emsdk install lat ...