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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 如何用 fiddler 捕获 https 请求

    如何用 fiddler 捕获 https 请求

  • 订阅消息失败_无法进入苹果订阅页面

    订阅消息失败_无法进入苹果订阅页面”此电子邮件中的视图快照无法正确呈现。”如果您接收的订阅出现此错误消息,可能是由以下几种原因导致的:缺失凭据:某些视图在发布时具有嵌入的凭据。如果嵌入式凭据现已过时或视图在重新发布时未包含嵌入式凭据,则您可能会收到以上错误消息。数据库暂时瘫痪:如果视图具有实时数据库连接,且数据库在生成订阅时暂时瘫痪,则您可能会收到以上错误消息。后台进程超时:默认情况下,对于视图的呈现,处理订阅的后台进程的每个视图…

  • 如何解决wamp中apache外部IP访问问题

    如何解决wamp中apache外部IP访问问题

  • ByteBuffer的用法[通俗易懂]

    ByteBuffer的用法[通俗易懂]ByteBuffer也许很多人不常用,其实它是最常用的缓冲区,可以负责缓冲存储一段数据,供数据的写入和读取。ByteBuffer是NIO里用得最多的Buffer。ByteBuffer最核心的方法是put(byte)和get()。分别是往ByteBuffer里写一个字节,和读一个字节。值得注意的是,ByteBuffer的读写模式是分开的,正常的应用场景是:往ByteBuffer里写一些数

  • databus 支持oracle么,Databus[通俗易懂]

    databus 支持oracle么,Databus[通俗易懂]系统如果要应付大规模的请求,一条必经之路就是数据库的分割,单服务器的性能早晚都会成为负载的短板。而数据库分割,通常有Master/Salve或者集群Cluster的方式,这些方式通常都是基于同种类型的数据。对于一个庞大的多类型数据库的系统,在不同的数据库之间(甚至是不同地理位置的机房间)保持数据的同步,需要更复杂的解决方案。LinkedIn良心开源了内部的一个项目Databus,正是解决这个问题的…

    2022年10月17日
  • ssh公私钥登录方式设置

    ssh公私钥登录方式设置

发表回复

您的电子邮箱地址不会被公开。

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