java註解例子

來源:互聯網
上載者:User

標籤:java   orm   web架構   bean   api   

java註解在web架構中使用比較廣泛,這使得對象之間的關係配置起來更加容易

目前web架構中最常用的兩種設定物件依賴關係的方式就是註解和xml設定檔的方法,api配置相對來說用的少一些,

下面實現一個Table註解來實現資料庫表和實體bean之間的對應關係,實現一個Column註解來實現資料庫表中每個欄位和實體bean每個屬性之間的

對應關係。java中的orm基本上就是根據這種思想來實現的。

Table註解代碼:

package com.panther.dong.annotation.anno;import java.lang.annotation.*;/** * Created by panther on 15-8-3. */@Target( { ElementType.TYPE })@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface Table {    String value() default "";}

Column註解代碼:

package com.panther.dong.annotation.anno;import java.lang.annotation.*;/** * Created by panther on 15-8-3. */@Target( { ElementType.FIELD })@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface Column {    String value() default "";}
建立一個student實體bean,給這個bean打上Table註解和Column註解

package com.panther.dong.annotation.pojo;import com.panther.dong.annotation.anno.Column;import com.panther.dong.annotation.anno.Table;/** * Created by panther on 15-8-3. */@Table("student")public class Student {    @Column("id")    private int id;    @Column("name")    private String name;    @Column("age")    private int age;    @Column("sex")    private String sex;    public Student() {    }    public Student(int id, String name, int age, String sex) {        this.id = id;        this.name = name;        this.age = age;        this.sex = sex;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }}

通過反射擷取Table註解Student對應的資料庫中表的名稱,通過Column註解獲得bean中屬性對應資料庫中 的欄位,通過反射獲得運行時實體bean中屬性

的取值,拼湊出sql。代碼如下:

package com.panther.dong.annotation.parse;import com.panther.dong.annotation.anno.Column;import com.panther.dong.annotation.anno.Table;import com.panther.dong.annotation.pojo.Student;import java.lang.reflect.Field;/** * Created by panther on 15-8-3. */public class ParsePojo {    private final static String QUERY_SQL = "select * from ";    /**     * 解析註解     *     * @param object 被註解的對象     * @return     */    public String getSelect(Object object) {        String sql = QUERY_SQL;        //獲得需要查詢的表名稱        Class cls = object.getClass();        boolean isTable = cls.isAnnotationPresent(Table.class);        if (isTable) {            Table tableName = (Table) cls.getAnnotation(Table.class);            sql += tableName.value();        }        //拼湊sql        if (object != null) {            sql += " where ";        }        //擷取屬性對應註解的名稱和屬性運行時的值        Field[] fields = cls.getDeclaredFields();        for (Field field : fields) {            field.setAccessible(true);            Object val = null;            try {                val = (Object) field.get(object);            } catch (Exception e) {                System.out.println("get fileld value failure");            }            boolean isColumn = field.isAnnotationPresent(Column.class);            if (isColumn) {                Column columnName = (Column) field.getAnnotation(Column.class);                if (val != null && val instanceof String) {                    sql += columnName.value() + "=\'" + val + "\'&&";                } else if (val != null && val instanceof Integer) {                    sql += columnName.value() + "=" + val + "&&";                }            }        }        sql = sql.substring(0, sql.length() - 2);        return sql;    }    public static void main(String[] args) {        Student student = new Student();        student.setAge(19);        student.setName("panther");        String sql = new ParsePojo().getSelect(student);        System.out.println(sql);    }}

運行程式,得到結果:

運行結果得到sql語句,之後再根據sql語句查詢資料庫得到結果!!!(後續查詢資料庫應該很簡單了)


代碼的目錄結構為:

java反射和註解在實現架構的類別關係之間的配置和資源之間的配置非常有用

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

java註解例子

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.