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

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

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

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

 */

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117114.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PHP常见面试题_php面试常问面试题

    PHP常见面试题_php面试常问面试题一.基本知识点1.1HTTP协议中几个状态码的含义:503500401403404200301302。。。200:请求成功,请求的数据随之返回。301:永久性重定向。302:暂时行重定向。401:当前请求需要用户验证。403:服务器拒绝执行请求,即没有权限。404:请求失败,请求的数据在服务器上未发现。500:服务器错误

    2022年8月27日
    4
  • rabbitmq的持久化_rabbitmq的六种模式

    rabbitmq的持久化_rabbitmq的六种模式2.RabbitMq-持久化

    2022年4月20日
    54
  • CentOS安装EPEL软件源

    CentOS安装EPEL软件源CentOS安装EPEL软件源

    2022年4月24日
    57
  • java http协议_java编写协议

    java http协议_java编写协议前面一篇博客里面已经介绍过SSDP协议原理,本篇博客将实现实现Android上的SSDP协议。关键技术分析:1、发送广播;须要发送送广播,所以须要使用MulticastSocket、SocketAddress、InetAddress,须要掌握。2、SSDP数据报格式;标准的SSDPServer解析的时候对于分段的字段选用的特征码是”\r\n”,须要特别注意。3、訪问权限;须要互联网,要在Main…

    2022年10月11日
    3
  • android studio怎么用真机调试_android studio调试

    android studio怎么用真机调试_android studio调试在使用androidstudio进行项目的调试的时候,模拟器真的有点慢,有时还很卡,大家可能还是更想使用真机进行调试,那么下面来看看androidstudio如何使用真机测试app的教程。第一大步,先对androidstudio进行设置:1、进入AndroidStudio界面,找到界面左侧工具栏的app2、鼠标点击app,在弹出的列表中选择EditConfigurations这一项3、在…

    2022年9月6日
    8
  • Java 8中的::(双冒号)运算符

    Java 8中的::(双冒号)运算符IwasexploringtheJava8sourceandfoundthisparticularpartofcodeverysurprising:我正在探索Java

    2022年7月7日
    25

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号