zoukankan      html  css  js  c++  java
  • 关系对象映射

             ORM(object relationalMapping)                                                                         

          对象是一个内存结构,与关系数据型数据库中的记录从逻辑上说存在映射关系,但是从存储关系上说面向对象与关系型数据库存在互不匹配现象,对象关系映射是为了解决这种不匹配现象的技术,它通过描述对象和数据库之间映射关系的元素,将java程序中的对象自动持久化到关系数据库中,反过来讲数据库中的记录自动的读取到内存结构对象中。

          对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据库无法直接表达多对多关系和继承关系。ORM系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。

          在一个应用程序中不使用ORM时,可能会写不少数据访问层的代码,用来保存,更新到数据库,还需要删除等。有很多重复的代码,使用ORM将不会有这个问题,ORM将数据对象自动生成关系数据库识别的语句。ORM负责sql进行操作,业务逻辑只需要关心对象即可。

    方法:

    《1》自定义Annotation

                 Annotation对程序的运行没有任何影响,它的目的主要在于对编译器或分析利用Java反射工具可以解析包,类,方法或者属性上的Annotation信息。

                 定义一个Annotation和定义一个接口是非常相似的,定义接口使用的是interface关键字,定义一个Annotation使用的关键字是@interface

                 public  @interface myAnnotation{}

              1  使用myAnnotation

                     @myAnnotation

                    public void methodA(){}

                Annotation中参数类型是Java的基本类型、string Class、、enum、Annotation和这些类型的数组。

              2 带参数的Annotation

                public  @interface myAnnotation{

                  String name();

    }

             在myAnnotation中定义了一个名字为name的参数,类型为String。

                  @myAnnotation(name="jerry")

                    public void methodA(){

    }

          给MyAnnotation的name参数赋值,如果不赋值,代码编译会报错。

           注:如果参数只有value,可以省略参数名称,及对应value属性赋值。

                 @myAnnotation(value="jerry")

                    public void methodA(){

    }

    等于

    @myAnnotation("jerry")

                    public void methodA(){

    }

    使用默认值

    public  @interface myAnnotation{

                  String value()default "jerry";

    }

    《2》meta-Annotation

           meta-Annotation就是Annotation类型的数据,也就是Annotation类型的Annotation。使用meta-Annotation主要是限制Annotation的使用对象,告诉编译器如何处理Annotation。

    1、限制类型

    public enum ELementType{

      TYPE,                    适用class interface,enum

    FIELD,                     适用field

    METHOD                  适用method

    PARAMETER            适用method中的参数

    CONSTRUCTOR,       适用构造方法

    LOCAL_VARIABLE,   适用局部变量

    ANNOTATION_TYPE,  适用Annotation类型

    PACKAGE,  适用包

    }

    元注解在myAnnotation应用

    @target(elementType.METHOD)

    public  @interface myAnnotation{

                  String[] value()";

    }

    2、告诉编译器如何处理Annotation

    public enum RetentionPolicy{

    SOURCE   编译器处理完Annotation信息后就没有任何作用了

    CLASS      编译器将Annotation存储在class文件中,默认

    RUNTIME   编译器将Annotation存储class文件中,可以由java虚拟机读取

    }

    @target(elementType.METHOD)

    @Retention(RetentionPolicy.RUNTIME)

    public  @interface myAnnotation{

                  String[] value()";

    }

    注解的反射

    public class ReflectTest{

      public static void main(String[]args){

        Class<Test>c = Test.class;

        Method[]=methods = c.getDeclaredMethods();

         for(Method m:methods){

          MyAnnotation my =m.getAnnotation(MyAnnotation.class);

            if(null!=my){

            String[]str = my.value();

             System.out.println(Arrays.toString(str));

          }

        }

      }

    }

  • 相关阅读:
    索引!
    事件event
    Erlang运行时源码分析之——线程进度机制
    Erlang 运行时中使用的读写锁解析
    经典互斥算法解析
    网格布局之grid
    注册简单表单
    前端入门之自我介绍
    Python之一后置固件yield和终结函数addfinalizer
    python中yield 与 return 区别
  • 原文地址:https://www.cnblogs.com/danwuxinbolg/p/3893258.html
Copyright © 2011-2022 走看看