校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識(shí)庫(kù) > 用注解編寫創(chuàng)建表的SQL語句

用注解編寫創(chuàng)建表的SQL語句

熱門標(biāo)簽:千呼電話機(jī)器人可以試用嗎 互聯(lián)網(wǎng)電話外呼系統(tǒng) 電話機(jī)器人怎么代理商 電銷需要外呼系統(tǒng)嗎 家庭農(nóng)場(chǎng)地圖標(biāo)注名稱怎樣起名 我要地圖標(biāo)注數(shù)量有限制嗎 400電話辦理泰安 安卡拉地圖標(biāo)注app 零成本地圖標(biāo)注賺錢

今晚讀了think in java 的章節(jié),感覺很不錯(cuò),我就敲了下來,貼上代碼給以后一個(gè)回顧: 

建議提前讀一下think in java 注解 。 

說明創(chuàng)建注解我在第一個(gè)注解說明下,以后的注解不在說明。‘ 

DBTable 注解: 

/**
* Project Name:myannotation
* File Name:DBTable.java
* Package Name:com.iflytek.db
* Date:2016-8-28下午08:20:54
* Copyright (c) 2016, syzhao@iflytek.com All Rights Reserved.
*
*/

package com.iflytek.db;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
@Target:
   @Target說明了Annotation所修飾的對(duì)象范圍:Annotation可被用于 packages、types(類、接口、枚舉、Annotation類型)、類型成員(方法、構(gòu)造方法、成員變量、枚舉值)、方法參數(shù)和本地變量(如循環(huán)變量、catch參數(shù))。在Annotation類型的聲明中使用了target可更加明晰其修飾的目標(biāo)。
  作用:用于描述注解的使用范圍(即:被描述的注解可以用在什么地方)
  取值(ElementType)有:
    1.CONSTRUCTOR:用于描述構(gòu)造器
    2.FIELD:用于描述域
    3.LOCAL_VARIABLE:用于描述局部變量
    4.METHOD:用于描述方法
    5.PACKAGE:用于描述包
    6.PARAMETER:用于描述參數(shù)
    7.TYPE:用于描述類、接口(包括注解類型) 或enum聲明

 @Retention:
  @Retention定義了該Annotation被保留的時(shí)間長(zhǎng)短:某些Annotation僅出現(xiàn)在源代碼中,而被編譯器丟棄;而另一些卻被編譯在class文件中;編譯在class文件中的Annotation可能會(huì)被虛擬機(jī)忽略,而另一些在class被裝載時(shí)將被讀取(請(qǐng)注意并不影響class的執(zhí)行,因?yàn)锳nnotation與class在使用上是被分離的)。使用這個(gè)meta-Annotation可以對(duì) Annotation的“生命周期”限制。
  作用:表示需要在什么級(jí)別保存該注釋信息,用于描述注解的生命周期(即:被描述的注解在什么范圍內(nèi)有效)
  取值(RetentionPoicy)有:
    1.SOURCE:在源文件中有效(即源文件保留)
    2.CLASS:在class文件中有效(即class保留)
    3.RUNTIME:在運(yùn)行時(shí)有效(即運(yùn)行時(shí)保留)
  Retention meta-annotation類型有唯一的value作為成員,它的取值來自java.lang.annotation.RetentionPolicy的枚舉類型值
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface DBTable
{
  public String name() default "";
}

Constraints 約束注解: 

/**
* Project Name:myannotation
* File Name:Constraints.java
* Package Name:com.iflytek.db
* Date:2016-8-28下午08:27:08
* Copyright (c) 2016, syzhao@iflytek.com All Rights Reserved.
*
*/

package com.iflytek.db;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Constraints
{
  boolean primaryKey() default false;
  
  boolean allowNull() default true;
  
  boolean unique() default false;
}

 SQLInteger int注解: 

/**
* Project Name:myannotation
* File Name:SQLInteger.java
* Package Name:com.iflytek.db
* Date:2016-8-29下午10:24:11
* Copyright (c) 2016, syzhao@iflytek.com All Rights Reserved.
*
*/

package com.iflytek.db;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SQLInteger
{
  String name() default "";
  
  Constraints constraints() default @Constraints;
}

 SQLString 字符注解: 

/**
* Project Name:myannotation
* File Name:SQLString.java
* Package Name:com.iflytek.db
* Date:2016-8-29下午10:28:04
* Copyright (c) 2016, syzhao@iflytek.com All Rights Reserved.
*
*/

package com.iflytek.db;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SQLString
{
  int value() default 0;
  
  String name() default "";
  
  Constraints constraints() default @Constraints;
}

 創(chuàng)建表的處理器:

/**
* Project Name:myannotation
* File Name:TableCreator.java
* Package Name:com.iflytek.table
* Date:2016-8-29下午10:57:52
* Copyright (c) 2016, syzhao@iflytek.com All Rights Reserved.
*
*/

package com.iflytek.table;

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

import com.iflytek.db.Constraints;
import com.iflytek.db.DBTable;
import com.iflytek.db.SQLInteger;
import com.iflytek.db.SQLString;

public class TableCreator
{
  public static void main(String[] args)
  {
    createTable(Member.class);
  }
  
  //創(chuàng)建表SQL語句
  private static void createTable(Class?> cl)
  {
    //獲取DBTable注解
    DBTable dbTable = cl.getAnnotation(DBTable.class);
    //判斷DBTable注解是否存在
    if (dbTable == null)
    {
      System.out.println("沒有找到關(guān)于DBTable");
      return;
    }
    
    //如果@DBTable注解存在獲取表明 
    String tableName = dbTable.name();
    //判斷表名是否存在
    if (tableName.length()  1)
    {
      //不存在,說明默認(rèn)就是類名,通過 cl.getSimpleName()獲取類名并且大寫
      tableName = cl.getSimpleName().toUpperCase();
    }
    
    //定義獲取column的容器
    ListString> columnDefs = new ArrayListString>();
    //循環(huán)屬性字段
    //說明:getDeclaredFields()獲得某個(gè)類的所有申明的字段,即包括public、private和proteced,但是不包括父類的申明字段。 
    //getFields()獲得某個(gè)類的所有的公共(public)的字段,包括父類。 
    for (Field field : cl.getDeclaredFields())
    {
      //定義表字段名稱變量
      String columnName = null;
      //獲取字段上的注解(現(xiàn)在字段允許多個(gè)注解,因此返回的是數(shù)組)
      Annotation[] anns = field.getDeclaredAnnotations();
      //判斷屬性是否存在注解
      if (anns.length  1)
        continue;
      
      //判斷是否是我們定義的數(shù)據(jù)類型
      if (anns[0] instanceof SQLInteger)
      {
        //獲取SQLInteger 注解
        SQLInteger sInt = (SQLInteger)anns[0];
        //判斷是否注解的name是否有值
        if (sInt.name().length()  1)
        {
          //如果沒有值,說明是類的屬性字段,獲取屬性并轉(zhuǎn)換大寫
          columnName = field.getName().toUpperCase();
        }
        else
        { //如果有值,獲取設(shè)置的name值
          columnName = sInt.name();
        }
        //放到屬性的容器內(nèi)
        columnDefs.add(columnName + " INT " + getConstraints(sInt.constraints()));
      }
      
      //同上SQLInteger,這里不寫注釋了
      if (anns[0] instanceof SQLString)
      {
        SQLString sString = (SQLString)anns[0];
        if (sString.name().length()  1)
        {
          columnName = field.getName().toUpperCase();
        }
        else
        {
          columnName = sString.name();
        }
        columnDefs.add(columnName + " VARCHAR(" + sString.value() + ")" + getConstraints(sString.constraints()));
      }
      
      //定義生成創(chuàng)建表的SQL語句
      StringBuilder createCommand = new StringBuilder("CREATE TABLE " + tableName + "(");
      //循環(huán)上面屬性容器,
      for (String columnDef : columnDefs)
      {
        //把屬性添加到sql語句中
        createCommand.append("\n  " + columnDef + ",");
        //去掉最后一個(gè)逗號(hào)
        String tableCreate = createCommand.substring(0, createCommand.length() - 1) + ");";
        //打印
        System.out.println("Table creation SQL for " + cl.getName() + " is :\n" + tableCreate);
      }
    }
  }
  
  private static String getConstraints(Constraints con)
  {
    String constraints = "";
    //判斷是否為null
    if (!con.allowNull())
    {
      constraints += " NOT NULL ";
    }
    //判斷是否是主鍵
    if (con.primaryKey())
    {
      constraints += " PRIMARY KEY ";
    }
    //是否唯一
    if (con.unique())
    {
      constraints += " UNIQUE ";
    }
    
    return constraints;
  }
}

以上代碼拷貝出來,就可以運(yùn)行了! 

上面雖然是簡(jiǎn)單的創(chuàng)建表語句,但我們可以蔓延到hibernate的domain類里的注解,各種CURD ,何嘗不是這樣處理的呢,只是hibernate有很多東西,但是萬變不離其宗,以后有機(jī)會(huì)研究一下hibernate 。 

收獲: 

讀了以后,對(duì)于注解知道為什么要這么用了,其實(shí)顧名思義就是一個(gè)注解,只是有一個(gè)處理器來處理這個(gè)注解,這對(duì)我以后用到注解方面應(yīng)該有幫助的, 

時(shí)間不早了,就寫到這里!

結(jié)果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Java 中的注解詳解及示例代碼
  • Android 中的注解深入探究
  • 深入分析安卓(Android)中的注解
  • Spring學(xué)習(xí)筆記1之IOC詳解盡量使用注解以及java代碼
  • Spring MVC 注解自動(dòng)掃描失效原因分析
  • 深入淺析Java注解框架
  • 全面解析Java中的注解與注釋
  • 詳解Java注解教程及自定義注解
  • 小議Java中@param注解與@see注解的作用
  • Android 中的注解詳細(xì)介紹

標(biāo)簽:新鄉(xiāng) 池州 文山 大同 來賓 濱州 東營(yíng) 黃山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《用注解編寫創(chuàng)建表的SQL語句》,本文關(guān)鍵詞  用,注解,編寫,創(chuàng)建,表,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《用注解編寫創(chuàng)建表的SQL語句》相關(guān)的同類信息!
  • 本頁收集關(guān)于用注解編寫創(chuàng)建表的SQL語句的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    国产精品系列在线播放| 91原创在线视频| 久久九九久精品国产免费直播| 欧洲av在线精品| 色视频成人在线观看免| 97精品视频在线观看自产线路二 | 亚洲精选免费视频| 亚洲视频 欧洲视频| 亚洲国产精品久久不卡毛片| 爽好多水快深点欧美视频| 久久国产视频网| 欧洲精品一区二区三区在线观看| 亚洲色图视频免费播放| 777奇米成人网| 亚洲国产精品久久不卡毛片| 9191国产精品| 成人精品免费网站| 国产精品美女久久久久久久久 | 国产一区二区精品在线观看| 精品在线免费视频| 国产激情91久久精品导航| 国产美女视频一区| 色菇凉天天综合网| 精品国产一区二区在线观看| 欧美国产激情一区二区三区蜜月| 国产精品美女久久久久久| 一区二区三区 在线观看视频| 精品一区二区三区在线观看国产| aaa国产一区| 精品国产一区二区三区av性色| 日韩亚洲欧美高清| 久久综合五月天婷婷伊人| 一区二区三区日韩欧美精品| 国产乱人伦精品一区二区在线观看| 日本韩国视频一区二区| 欧美国产一区二区在线观看| 男女性色大片免费观看一区二区 | 成人在线一区二区三区| 日韩一二三区不卡| 久久影院午夜片一区| 国产精品麻豆一区二区 | 成人黄色小视频| 中文字幕一区免费在线观看| 丁香六月综合激情| 久久综合网色—综合色88| 国产在线一区观看| 久久先锋影音av鲁色资源网| 欧美精品一区二区三区视频 | 亚洲女性喷水在线观看一区| 国产一区二区福利视频| 欧美一区二区三区在| 午夜欧美电影在线观看| 91精品国产免费久久综合| 九色综合狠狠综合久久| 最新日韩在线视频| 欧美福利视频一区| 91在线观看地址| 日韩va亚洲va欧美va久久| 日本一区二区三区四区在线视频| 色综合天天视频在线观看| 久久免费午夜影院| 韩国女主播一区二区三区| 欧美不卡一区二区三区| 免费高清在线视频一区·| 欧美精品一卡二卡| 欧美aⅴ一区二区三区视频| 911国产精品| 国产精品一二三四区| 久久久精品天堂| 成人午夜精品一区二区三区| 亚洲美女区一区| 欧美午夜精品免费| 不卡视频免费播放| 亚洲成人午夜影院| 69成人精品免费视频| 寂寞少妇一区二区三区| 亚洲电影激情视频网站| 欧美成人艳星乳罩| 欧美亚洲动漫精品| 国产一区二区剧情av在线| 午夜一区二区三区视频| 国产女主播一区| 日韩精品一区在线| 欧美无乱码久久久免费午夜一区 | 老司机一区二区| 天天操天天色综合| 久久精品久久精品| 国产精品久久久久久久久动漫| 日韩欧美高清在线| 欧美男人的天堂一二区| 欧美性三三影院| 日韩午夜在线观看视频| 欧美激情一区二区三区不卡| 国产人妖乱国产精品人妖| 亚洲精品乱码久久久久| 日本少妇一区二区| 国产宾馆实践打屁股91| 欧美图区在线视频| 久久免费视频一区| 国产清纯白嫩初高生在线观看91| 久久综合色播五月| 日韩一级大片在线| 亚洲男人的天堂在线aⅴ视频| 久久久久久久久伊人| 久久嫩草精品久久久精品| 精品区一区二区| 欧美一区二区视频在线观看| 欧美一区二区在线看| 日韩欧美美女一区二区三区| 久久综合久久综合久久| 久久久精品黄色| 成人免费在线观看入口| 亚洲精品日韩一| 精品亚洲porn| 欧美最新大片在线看 | 国产一区二区毛片| 972aa.com艺术欧美| 欧美日韩国产高清一区二区 | 日韩不卡免费视频| 欧亚一区二区三区| 欧美亚洲图片小说| 精品捆绑美女sm三区| 国产偷国产偷亚洲高清人白洁| 欧美日韩专区在线| 精品一区二区三区在线播放视频| 国产成人av影院| 美女免费视频一区| 国产日产亚洲精品系列| 亚洲影视在线播放| 国产精品888| 99久久精品国产观看| 中文字幕精品综合| 成人精品一区二区三区中文字幕| 欧美性一二三区| 中文久久乱码一区二区| 日本中文在线一区| 在线视频综合导航| 国产精品进线69影院| www国产亚洲精品久久麻豆| 99亚偷拍自图区亚洲| 亚洲女人****多毛耸耸8| av中文字幕不卡| 国产性做久久久久久| 成人福利视频在线看| 国产欧美日韩视频一区二区| 国产成人一级电影| 国产日韩欧美精品综合| 极品尤物av久久免费看| 国产午夜精品一区二区三区四区| 久久丁香综合五月国产三级网站| 欧美一区二区在线视频| 国产综合色精品一区二区三区| 精品久久久久久久人人人人传媒| 狠狠色综合播放一区二区| 91精品麻豆日日躁夜夜躁| 国产不卡视频一区| 日本在线不卡一区| 国产精品久久久久四虎| 欧美日韩一级片在线观看| 成人影视亚洲图片在线| 亚洲天堂av老司机| 欧美一区二区大片| 成人精品一区二区三区四区 | 波多野结衣中文字幕一区| 美女视频一区在线观看| 一区二区三区精品| 亚洲欧美在线另类| 亚洲一区在线观看网站| 成人免费在线视频观看| 1000部国产精品成人观看| 国产色91在线| 亚洲欧洲国产日韩| 亚洲欧美国产毛片在线| 午夜国产精品一区| 另类调教123区| 狠狠狠色丁香婷婷综合久久五月| 国产精品久久影院| 欧美三级日本三级少妇99| 9i看片成人免费高清| 成人h精品动漫一区二区三区| 天天av天天翘天天综合网| 亚洲影院在线观看| 午夜av区久久| 国产精品主播直播| 精品一区二区免费视频| 91视频国产观看| 91精品欧美久久久久久动漫| 宅男在线国产精品| 欧美一卡在线观看| 久久久久久免费毛片精品| 日韩一区二区在线观看| 久久精品国产一区二区| 欧美色网站导航| 欧美激情艳妇裸体舞| 亚洲午夜久久久久久久久电影网| 亚洲图片另类小说| 懂色av一区二区三区免费观看| 91视频免费播放| 99久久久久免费精品国产| 国产欧美精品一区二区色综合|