<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      漢莫拉比

      如何通過注解Bean類來封裝SQL插入語句

      整體思路是醬紫的:

       

      給bean注解說明該bean對應(yīng)著數(shù)據(jù)庫中哪張表,給每個bean的屬性都注解說明各自對應(yīng)著這張表的哪個字段。

       

      通過類反射獲取表名,通過逐個反射每個屬性的getter方法,獲取注解在屬性上的字段名,以及屬性值。

       

      拿到表名、字段名、值,就可以拼接插入語句了。

       

      細細道來

       

      定義bean :

       

      你需要定義一個有gettersetter及注解的bean,like this

       

      @Table(name = "PUPIL_STUDENT")

      public class StudentBean {

       

      @Column(name = "ROW_ID")

      private String id;

       

      @Column(name = "NAME")

      private String name;

       

      public String getId() {

      return id;

      }

      public void setId(String id) {

      this.id = id;

      }

      public String getName() {

      return name;

      }

      public void setName(String name) {

      this.name = name;

      }

       

      }

       

      定義注解類:

       

      使用注解的前提是你必須先定義注解類:

       

      @Target(ElementType.TYPE)

      @Retention(RetentionPolicy.RUNTIME)

      public @interface Table

      {

      /**

       * 數(shù)據(jù)庫表名

       */

      public abstract String name();

       

      }

       

      這是注解的一般定義方法,三點說明:

       

      1.使用@interface定義注解類

       

      2.@Retention(RetentionPolicy.RUNTIME) 表示該注解可以在運行期被讀取;

       

      3.@Target(ElementType.TYPE)表示這個注解只能被用到目標類(如StudentBean)的方法上

       

      Column注解類也是類似的定義方式。

       

      反射獲取ClassMethod :

       

      想要通過反射獲取表名字段名等,需要先獲取類對象和方法對象(反射的慣用套路)

       

      Class<?> clz = obj.getClass(); //obj就是bean對象的名稱

      Method[] methods = clz.getMethods();

       

      獲取表名:

       

      獲取表名的關(guān)鍵代碼是:

       

      Table _table = clazz.getAnnotation( Table.class );//獲取注解類

      String table_name = _table.name();//獲取注解類的屬性

       

      通過bean上面的代碼:@Table(name = "PUPIL_STUDENT") 就可以看出,獲取的table_name就等于:”PUPIL_STUDENT”。

       

      需要注意的地方是:

       

      如果在當前類中并未找到Table注解,:上面的_table變量null,這時,你需要“上訴”到父類繼續(xù)去尋找,也就是說此時需要把clazz改為父類的Class實例

       

      clazz = clazz.getSuperclass();

       

      然后獲取注解。這個邏輯應(yīng)該要用到一個do{}while()循環(huán)吧。

       

      獲取每一個字段名:

       

      通過Method[] methods = clz.getMethods()已經(jīng)獲取到所有方法了,遍歷每個方法,我們現(xiàn)在的目標是,拿到屬性值和屬性上方的注解字段名。

       

      對每一個method,調(diào)用getName()就能得到method的名稱,然后拿到以”get”開頭方法。getId()為例,這個方法的方法名為:”getId”,截取”get”之后的字符串,即:Id,然后將其首字母變?yōu)樾懀矗?/span>id,就得到了一個屬性名。其他屬性名也是這樣獲取。

       

      由于getter方法就是獲取屬性值的方法,那么通過反射技術(shù):method.invoke(obj, new Object[]{});獲取到了該屬性的值。

       

      反射技術(shù)中,變量對應(yīng)的類是Field,既然拿到了變量名,那么通過變量名來獲取對應(yīng)的Field通過Field來獲取變量(屬性)上方的Column注解,通過注解獲取字段名稱,一氣呵成:

       

      Field f= clz.getDeclaredField(m_name);

      Column col = f.getAnnotation(Column.class);

      String col_name = col.name();

       

      表名有了,每一個字段名,字段值也有了,接下來就可以拼接成SQL

       

       


      更多內(nèi)容關(guān)注微信號:it_pupil

      posted on 2017-02-22 16:37  搬磚的小學(xué)生  閱讀(1515)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 国产69精品久久久久99尤物| 秋霞人妻无码中文字幕| 国产精品一区在线蜜臀| 免费观看成人毛片a片| 无码av中文字幕久久专区| 一本精品99久久精品77| 一本久久a久久精品亚洲| 亚洲国产另类久久久精品小说 | 精品国产一区av天美传媒| 亚洲人成网站在线播放2019| 国产精品一品二区三四区| 亚洲一区二区三区在线观看精品中文 | 久久99精品国产99久久6尤物| 亚洲欧美高清在线精品一区二区| 人人妻人人狠人人爽| 狠狠色噜噜狠狠狠狠777米奇| 亚洲男人的天堂一区二区| 亚洲精品色一区二区三区| 亚洲一区二区三区丝袜| 国产高清自产拍av在线| 中国亚州女人69内射少妇| 国产老妇伦国产熟女老妇高清| 熟妇人妻激情偷爽文| 成人无码视频| 亚洲www永久成人网站| www欧美在线观看| 九九在线精品国产| 日韩精品无码免费专区午夜不卡 | 最新国产精品好看的精品| 久久精品人妻无码一区二区三区| 超碰成人人人做人人爽| 人妻熟女一二三区夜夜爱| 欧美一本大道香蕉综合视频| 野花社区在线观看视频| 91人妻熟妇在线视频| 色av专区无码影音先锋| 日韩大片一区二区三区| 人妻系列无码专区69影院| 日本美女性亚洲精品黄色| 国产偷拍自拍视频在线观看| 欧美www在线观看|