java注解演示 映射生成表 示例 来自thinking in java 4 20章部分代码

java注解演示 映射生成表 示例 来自thinking in java 4 20章部分代码

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://my.oschina.net/pangzhuzhu/blog/301782

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

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

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


相关推荐

  • sql server2019安装步骤 不支持此版本win10_浏览sql server2019安装介质

    sql server2019安装步骤 不支持此版本win10_浏览sql server2019安装介质SQLServer2019安装步骤文章分为四部分sqlserver安装失败指南(首看,本人下载中遇到的)下载安装sqlserver安装图形化界面ssms创建数据库安装失败以及解决措施下载安装SQLServer进行到第五步时,我这里进行了报错。错误是:thereisaproblemwiththiswindowsinstallerpackage.Aprogramrunaspartofthesetupdidnotfinshasexpectd.

    2022年8月31日
    1
  • 常用的web漏洞扫描工具_系统漏洞扫描工具有哪些

    常用的web漏洞扫描工具_系统漏洞扫描工具有哪些转载自:http://fairysoftware.com/web_lou_dong_sao_miao.html1、AWVS,国外商业收费软件,据了解一个License一年费用是2万多RMB。可见总体漏洞扫描概况,也可导出报告,报告提供漏洞明细说明、漏洞利用方式、修复建议。缺点是限制了并行扫描的网站数。2、OWASPZed(ZAP),来自OWASP项目组织的开源免费工具,提供漏洞扫描、爬虫、Fuzz功能,该工具已集成于KaliLinux系统。3、Nikto,一款开源软件,不仅可用于扫描发现网.

    2022年9月4日
    2
  • java对象数组 创建对象数组,初始化对象数组「建议收藏」

    java对象数组 创建对象数组,初始化对象数组「建议收藏」对象数组的概念:如果一个数组中的元素是对象类型,则称该数组为对象数组。当需要一个类的多个对象时,应该用该类的对象数组来表示,通过改变下标值就可以访问到不同的对象。对象数组的定义和使用:对象数组的定义与一般数组的定义类似,但是需要为每一个元素实例化。对象数组的声明形式是:类名对象数组名[];为对象数组分配内存空间:对象数组名=new类名[数组长度];//注意:此处不是构…

    2022年5月20日
    46
  • kill命令详解_linux杀死进程kill

    kill命令详解_linux杀死进程kill大多数人对kill命令的理解就是杀死一个进程,而这仅仅是kill的一个功能。Kill的zhenshkill用途是向一个进程发送信号,而杀死一个进程仅仅是其中的一个功能。

    2025年7月28日
    0
  • 如何设置自动切换ip地址

    如何设置自动切换ip地址

    2021年9月18日
    165
  • 基于单片机的水位检测系统_51单片机温度传感器程序

    基于单片机的水位检测系统_51单片机温度传感器程序开发前的准备:LCD1602一块51单片机开发板一块(这里我用的是普中的板子)霍尔水流量传感器一块(红色接5V黑色接GND黄色是数据传接口)霍尔传感器流量经验公式:Q=(F+3)/8.1Q表示流量…

    2022年9月27日
    1

发表回复

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

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