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


相关推荐

  • 如何用gg修改器的偏移修改_gg修改器知道了代码怎么改

    如何用gg修改器的偏移修改_gg修改器知道了代码怎么改GG修改器正版是一款模拟游戏的辅助游戏,在这个修改器中我们可以尽情的使用模拟各种辅助游戏的方式,让我们可以在游戏中得到更多的游戏帮助,操作简单,并且包含了大量的游戏辅助能力,是一款非常好用的游戏辅助。GG修改器正版介绍1.玩家可以根据自己的想法随时随地修改游戏的值,修改位我们需要或者是最大值进行游戏;2.操作方法非常简单,让您在游戏中拥有真实的上帝体验,并体验游戏的乐趣和无限的能力;3.该软件不需…

    2022年9月5日
    3
  • 阻容降压电路计算

    阻容降压电路计算阻容降压电路正确计算将交流市电转换为低压直流的常规方法是采用变压器降压后再整流滤波,当受体积和成本等因素的限制时,最简单实用的方法采用电容降压式电源。上图内容引用网上的。   /****************非常规算法,待验证**********************************/ 看到这里,很多朋友一定想说:不就是阻容么,计算容抗然后电压除以容抗不就成了

    2022年6月20日
    37
  • python面试常见问题-Python面试中最常见的25个问题

    python面试常见问题-Python面试中最常见的25个问题Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。Python是一个面向对象的解释型的交互式高级脚本语言。Python被设计成一种高可读性的语言,因为它大量地使用了英语中的单词作为关键字,而且不像其他语言使用标点符号构成复杂的语法结构,Python的语法结构非常少。Python是一种解释型语言:即Python程序是在运行时由解释器解释执行的,因而不用事先编…

    2022年10月19日
    0
  • 使用Postman做mock测试

    使用Postman做mock测试为什么要做mock测试?一般在对第三方接口(如银联、支付宝、微信等),使用mock来模拟被请求的接口还有是在业务依赖的关系接口未开发出来时,测试人员为了保证项目的测试进度不受影响,就需要构造出来一个虚拟的接口来进行一系列的接口测试一、打开postman,创建mockserver在左上角有一个New,点开后会有下拉列表展示,选择里面的MockServer勾选Request-Body(请求内容)填写mock测试的各个请求参数之后点击Next,下一步createmockserv.

    2022年6月20日
    43
  • switch中的continue和break区别[通俗易懂]

    switch中的continue和break区别[通俗易懂]今天c程设期末考试,突然有一道选择题是关于switch中的break和continue问题。若switch外部没有循环,则break和continue没有区别。若switch外部还有循环,{一.若break,continue在switch外部,则二者作用的是外部循环。二.若break,continue在switch内部,则break作用于switch,continue作用于外部循环。…

    2022年9月12日
    0
  • mysql函数

    mysql函数

    2021年10月15日
    38

发表回复

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

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