• 关系对象映射


             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));

          }

        }

      }

    }

  • 相关阅读:
    [SHOI2014]信号增幅仪
    [SDOI2016]征途
    Luogu P3226 [HNOI2012]集合选数
    Comet OJ C1076 [Contest #4]求和
    Luogu P2657 [SCOI2009]windy数
    Luogu P1864 [NOI2009]二叉查找树
    UVA10559 Blocks
    Luogu P1880 [NOI1995]石子合并
    简单DP
    CF1097F Alex and a TV Show
  • 原文地址:https://www.cnblogs.com/danwuxinbolg/p/3893258.html
Copyright © 2020-2023  润新知