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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • eigen库的使用_vcg库

    eigen库的使用_vcg库Eigen矩阵定义#includeMatrixdouble,3,3>A;//Fixedrowsandcols.SameasMatrix3d.Matrixdouble,3,Dynamic>B;//Fixedrows,dynamiccols.Matrixdouble,Dynamic,Dynam

    2022年10月7日
    4
  • navicat premium 15激活码 mac【2021免费激活】[通俗易懂]

    (navicat premium 15激活码 mac)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~747EFQ8BIF-eyJsaWNlb…

    2022年3月31日
    91
  • 手机号码归属地查询App

    手机号码归属地查询App结合MVP设计模式和解析Json数据,制作一款“手机号码归属地查询的App小程序(Android)”说明:实现的原理很简单,有多种设计方式和代码编写风格。本文主要是认识、理解MVP设计模式和Json数据的常见解析框架的使用。源码:请点击链接访问我的GitHub进行查看准备工作:AndroidStudio开发工具(谷爹的亲儿子)浏览器(进行测试淘宝开放平台返回给我们的Json数据并进行…

    2022年7月22日
    16
  • datagrip永久激活(JetBrains全家桶)

    (datagrip永久激活)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月31日
    489
  • Frp内网穿透

    Frp内网穿透Frp内网穿透​ 内网穿透从本质上来讲也是端口映射,两者都是将内网地址映射到公网可访问的地址,而区别是端口映射直接在路由器中配置即可,而内网穿透配置的端口映射则需要客户端和服务端进行绑定后实现,相当于客户端和服务端之间建立了一条隧道,然后访问服务端的请求会通过隧道转发给内网主机,该情况多用于没有公网IP的情况下使用;​ frp是一个高性能的反向代理应用,可以轻松地进行内网穿透,对外网提供服务,支持tcp,udp,http,https等协议类型,可以将内网服务以安全、便捷的方式通过具有公网

    2025年11月9日
    2
  • bindService流程详解

    bindService流程详解bindService的流程,入口同样在ContextImpl中。ContextImpl.javapublicbooleanbindService(Intentservice,ServiceConnectionconn,intflags){warnIfCallingFromSystemProcess();returnbindServiceCommon(service,conn,flags,mMainThread.getHandler(),Process.my

    2022年5月11日
    54

发表回复

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

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