精华内容
下载资源
问答
  • java映射

    千次阅读 2018-05-16 21:47:06
    万物皆对象java的反射机制他知道类的解百纳结构, 我们称为java的‘’自审‘’Java虚拟机是可运行Java代码的假想计算机,有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统,可以执行 Java 的...

    万物皆对象


    java的反射机制他知道类的解百纳结构,  我们称为java的‘’自审‘’

    Java虚拟机是可运行Java代码的假想计算机,有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统,可以执行 Java 的字节码程序。Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。 

    1.所有对象都有一个getclass方法

    2.所有数据类型都有一个静态的class属性

    展开全文
  • Java映射原理

    千次阅读 2019-05-23 21:40:36
    Java中的映射: 对 象关系映射 (Object Relational Mapping ,简称ORM ) 是一种为了解决面向对象 与关系数 据库 存在的互不匹配的现象的技术。 简单的说,ORM是通过使用描述对 象 和数据库之间映射的元 数据 ,将...

    Java中的映射:

    对 象关系映射 (Object Relational Mapping ,简称ORM ) 是一种为了解决面向对象 与关系数 据库 存在的互不匹配的现象的技术。 简单的说,ORM是通过使用描述对 象 和数据库之间映射的元 数据 ,将java程序 中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 这也同时暗示者额外的执行开销;然而,如果ORM作为一种中 间件 实现,则会有很多机会做优化,而这些在手写的持久层并不存在。 更重要的是用于控制转换的元数据需要提供和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG规范的对象数据库依然需要类 级 别的元数据。
    对象-关系映射 (Object /Relation Mapping,简称ORM),是随着面向对象的软 件开发 方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存 储系统。对象和关系数据是业务实体 的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继 承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系 数据库数据的映射。
    面向对象是从软 件工程 基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配 的现象,对象关系映射技术应运而生。
    让我们从O/R开始。字母O起源于”对象”(Object),而R则来自于”关系”(Relational)。几乎所有的程序里面,都存在对象和关系数据 库。在业务逻辑层和用户界面层 中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。
    当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。你在DAL中写了很多的方法来读取对象数据,改变状态 对象等等任务。而这些代码写起来总是重复的。
    如果打开你最近的程序,看看DAL代码,你肯定会看到很多近似的通用的模 式 。我们以保存对象的方法为例,你传入一个对象,为SqlCommand对象添加SqlParameter,把所有属性和对象对应,设置 SqlCommand的CommandText属性为存储过程,然后运行SqlCommand。对于每个对象都要重复的写这些代码。
    除此之外,还有更好的办法吗?有,引入一个O/R Mapping。实质上,一个O/R Mapping会为你生成DAL。与其自己写DAL代码,不如用O/R Mapping。你用O/R Mapping保存,删除,读取对象,O/R Mapping负责生成SQL ,你只需要关心对象就好。
    对象关系映射成功运用在不同的面向对象持久层产品中,如:Torque,OJB,Hibernate,TopLink,Castor JDO , TJDO 等。
    一般的ORM包括以下四部分:
    一个对持久类对象进行CRUD操作的API ;
    一个语言或API用来规定与类和类属性相关的查询;
    一个规定mapping metadata的工具;
    一种技术可以让ORM的实现同事务对象一起进行dirty checking, lazy association fetching以及其他的优化操作。

    一、目前流行的 ORM 产品

    目前众多厂商和开 源 社区都提供了持久层框 架 的实现,常见的有:
    Apache OJB (http://db .apache.org/ojb /)
    Jaxor (http://jaxor.sourceforge.net
    Hibernate (http://www.hibernate.org
    iBatis (http://www.ibatis.com
    jRelationalFramework (http://ijf.sourceforge.net
    SMYLE (http://www.drjava.de/smyle)
    TopLink (http://otn.oracle .com/products /ias/toplink/index.html)
    其中 TopLink 是 Oracle 的商业产品,其他均为开源项目。
    其中 Hibernate 的轻量级 ORM 模型逐步确立了在 Java ORM 架 构 中领导地位,甚至取代复杂而又繁琐的 EJB 模型而成为事实上的 Java ORM 工业标准。而且其中的许多设计均被 J2EE 标准组织吸纳而成为最新 EJB 3.0 规范的标准,这也是开源项目影响工业领域标准的有力见证。

    二、对象-关系映射模式

    从《公共仓库元模型:开发指南》一书第8章CWM元仓库中摘录出来的内容,实现了公共仓库元模型(CWM)的UML 图 到Microsoft SQL Server 数据库的映射,是一种将对象层次结构映射成关系型结构的方法。个人认为可以作为将本体(Ontology )文 件 存储到关系型数据库中的一种可借鉴方法。
    基本情况:公共仓库元模型(CWM)是对象管理组织(OMG)的一种和数 据仓库 相关的元模型标准,采用UML表示的对象层次结构,在保存到数据库中时由于面向对象的数据库技术的不完善(理论研究和商业应用都不是主 流),所以该书的作者倾向于使用成熟的关系型数据库来保存-这也是存储本体时所遇到的问题。
    采用方法:将UML模型中的各种元素通过转换,保存为数据库模式。由于CWM是一种元模型,因此模型的实例也是一种模型,将这种实例以数据库数据的形式保 存。使用数据库中比较成熟的存储过程技术提高开发和执行效率。

    1、数据类 型 映射模式

    1.1简单数据类型模式:建立UML和关系型数据库中简单数据类型的映射表以指导映射。
    1.2枚举数据类型模式:每种枚举类型对应一个表,只有一个列(_EnumLiteral)表示枚举值。
    1.3基于类的数据类型模式:使用外键约束,将基础列与基于类的类型实例相关联。

    2、类映射模型
    每个类对应一个表。单值属性、多值属性、继承关系可以用下述方法映射,而引用属性将在关联映射模式中提到。

    2.1单值属性模式:是cardinality的上界为1的属性,映射到类所对应的表的列上。若其下界也为1(必须有的属性),列属性为NOT NULL。
    2.2多值属性模式:每个多值属性映射成一个独立的表,使用外键连接到类所对应的表上。
    2.3继承模式:每加入一个类的实例时,根据其继承关系自顶向下生成每个类的对象,这些对象具有相同的ID(根对象对应记录的主键)。删除对象实例时,自底向上删除数据。遇到从中间删的情况怎么办?多重继承怎么处理?

    3、关联映射模式

    3.1一对一关联模式:在关联两端各加一列。
    3.2一对多关联模式:和3.1一样。如果多这端是有序的,还需加入一列表示序号。
    3.3多对多关联 模式:将关联单独作一个表。 3.4组合关联模式:注意级联式删除。
    3.5反演关联模式:关联两端指向相关的类型,和普通关联一样。
    3.6成对关联模式:关联记录两个类间的关系,用交集类表示关联,表示成一个单独的表,每个关联对 应一个表,用外键表示它们间的关系。 3.7关联上的OCL需要分析成对应的存储过程代码。
    3.8保证关联的cardinality也需要分析成对应的存储过程代码。

    4、引用映射模式

    在UML中不存在的MOF特征,指属性是声明为引用类型的实例。用存储过程实现

    原文:https://blog.csdn.net/xuebing1995/article/details/72589329

    展开全文
  • Java 映射Map

    2019-04-13 12:57:45
    数学中映射有:一对一映射,多对一映射,但是没有一对多映射。 定义: 两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B...

    数学中映射有:一对一映射,多对一映射,但是没有一对多映射。

    定义:

    两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,b称为元素a在映射f下的,记作:b=f(a)。a称为b关于映射f的原象集合A中所有元素的象的集合称为映射f的值域,记作f(A)。

    或者说,设A,B是两个非空的集合,如果按某一个确定的对应关系f,使对于集合A中的任意一个元素x,在集合B中都有唯一的元素y与之对应,那么就称对应f:A→B为从集合A到集合B的一个映射。

    注意:(1)对于A中不同的元素,在B中不一定有不同的象;(2)B中每个元素都有原象(即满射),且集合A中不同的元素在集合B中都有不同的象(即单射),则称映射f建立了集合A和集合B之间的一个一一对应关系,也称f是A到B上的一一映射。

    示例:

       

     

    总结:

    存储(键、值)数据对的数据结构(key、value)。

    根据键(key),寻找值(value)。

    非常容易使用链表或者二分搜索树来实现。

    原先的链表定义与二分搜索树的定义:

    改变为映射关系:

    映射map的定义:

    下面对每个方法进行解释:

        void add(K key, V value):添加元素需要提供key、value。
        V remove(K key):删除一个元素,只需要删除它的key即可,然后返回该key下的value。
        boolean contains(K key):根据key查找元素。
        V get(K key):通过查找key,来取得value。
        void set(K key, V newValue):修改操作,给定一个key,设置新的value。
        int getSize():map存储了多少个数据。
        boolean isEmpty():map是否为空。

    展开全文
  • JAVA 映射

    千次阅读 2018-11-06 18:48:57
    映射表将键与值一起保存,键可以是任意类型的对象,映射表中不能有重复的键,如果存储的键在映射表中已经存在则值会覆盖。 Map是映射表的父接口,他的方法有 V put (K key, V value):添加元素。 V get(Object Key...

    Map

    映射表是一种依照键/值对存储元素的容器。它提供了通过键快速获取、删除和更新键/值对的功能。映射表将键与值一起保存,键可以是任意类型的对象,映射表中不能有重复的键,如果存储的键在映射表中已经存在则值会覆盖。
    Map是映射表的父接口,他的方法有
    V put (K key, V value):添加元素。
    V get(Object Key) 返回键对应的值
    int size() 返回映射表中的条目数
    void clear ():移除所有的键值对元素
    V remove (Object key):根据键删除键值对元素,并把值返回
    boolean containsKey (Object key):判断集合是否包含指定的键
    boolean containsValue (Object value):判断集合是否包含指定的值
    boolean isEmpty ():判断集合是否为空
    Set keySet();//获取键的集合
    Collection values();//获取所有值的集合
    Set<Map<K,V>> entrySet()返回一个包含了该映射表中的条目的集合。

    public class MapDemo {
        public static void main(String[] args) {
            Map<Integer, String> map = new HashMap<>();
            //put() 放入元素
            map.put(1,"aaa");
            map.put(2,"ccc");
            map.put(3,"eee");
            //get()返回键对应的值
            System.out.println(map.get(1));//aaa
            //size()
            System.out.println(map.size());//3
            System.out.println(map);//{1=aaa, 2=ccc, 3=eee}
            //remove()移除指定键
            System.out.println(map.remove(2));//ccc
            System.out.println(map);//{1=aaa, 3=eee}
            //clear()删除所有元素
            map.clear();
            System.out.println(map);//{}
            map.put(1,"aaa");
            map.put(2,"aaa");
            map.put(3,"eee");
            System.out.println( map.containsKey(1) );//true
            System.out.println(map.containsValue("ccc"));//true
            // keySet();//获取键的集合
            System.out.println(map.keySet());//[1, 2, 3]
            //  values();//获取所有值的集合
            System.out.println(map.values());//[aaa, aaa, eee]
        }
    }
    

    遍历Map的方法
    1通过可以通过键找值的方式来遍历
    2通过 Map.Entry<K, V> 方法返回的Set集合遍历

    public class MapDemo {
        public static void main(String[] args) {
            Map<Integer, String> map = new HashMap<>();
            map.put(1,"aaa");
            map.put(2,"aaa");
            map.put(3,"eee");
            map.put(4,"fff");
            map.put(5,"iii");
            //1通过可以通过键找值的方式来遍历
            Set<Integer> k = map.keySet();
            for (int key:k) {
                String v = map.get(key);
                System.out.println(key+" "+v);
            }
            //2通过 Map.Entry<K, V> 方法返回的Set集合遍历
            Set<Map.Entry<Integer, String>> entries = map.entrySet();
            for (Map.Entry<Integer, String> entry : entries) {
                System.out.println(entry.getKey()+" "+entry.getValue());
            }
        }
    }
    

    Map接口下有三个具体的类实现了Map接口,分别是HashMap、LinkedHashMap、TreeMap。
    演示使用Map存储自定义的类

    public class Student {
        private String name;
        private int age;
    
        public Student() {
        }
    
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        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;
        }
    
        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Student student = (Student) o;
            return age == student.age &&
                    Objects.equals(name, student.name);
        }
    
        @Override
        public int hashCode() {
    
            return Objects.hash(name, age);
        }
    }
    

    HashMap

    HashMap与HashSet相同,底层都是通过哈希表来实现的。都是通过重写hashCode()与equals()方法来确保元素的唯一性。
    而HashSet的底层其实也是使用了HashMap。

    public class MapDemo {
        public static void main(String[] args) {
            //存储键是 String 值是Student
            HashMap<String, Student> hashMap = new HashMap<>();
            hashMap.put("s001",new Student("钟楚红",23));
            hashMap.put("s002", new Student("梅艳芳", 27));
            hashMap.put("s003", new Student("李丽珍", 26));
            hashMap.put("s004", new Student("翁虹", 27));
            hashMap.put("s005", new Student("叶子楣", 29));
            hashMap.put("s005", new Student("叶子楣222", 29));
            //遍历
            for (String s : hashMap.keySet()) {
                Student student = hashMap.get(s);
                System.out.println(s+"=="+student.getName()+"=="+student.getAge());
            }
        }
    }
    

    LinkedHashMap

    LinkedHashMap在HashMap的基础上实现了元素的有序性。
    LinkedHashMap与LinkedHashSet相同,都是通过链表来实现元素的有序性。

    public class LinkedHashMapDemo {
        public static void main(String[] args) {
           // LinkedHashMap 元素有序,且唯一
            LinkedHashMap<Integer, String> map = new LinkedHashMap<>();
            map.put(100, "abc");
            map.put(200, "ccc");
            map.put(300, "ddd");
            Set<Map.Entry<Integer, String>> entries = map.entrySet();
            for (Map.Entry<Integer, String> entry : entries) {
                Integer key = entry.getKey();
                String value = entry.getValue();
                System.out.println(key+"==="+value);
            }
        }
    }
    

    TreeSet

    TreeSet底层的数据结构是二叉树,与TreeSet相同可以通过自然排序(实现comparable接口重写compareTo()方法)或者比较排序(通过构造函数添加比较器—重写Comparator接口的compare方法)。
    自然排序

    public class TreeMapDemo {
        public static void main(String[] args) {
            TreeMap<Student, Integer> map = new TreeMap<>();
            map.put(new Student("钟楚红", 23), 10);
            map.put(new Student("梅艳芳", 27), 9);
            map.put(new Student("李丽珍", 26), 1);
            map.put(new Student("翁虹", 27), 4);
            map.put(new Student("叶子楣", 29), 2);
            map.put(new Student("叶子楣222", 29), 3);
            System.out.println(map);
        }
    }
    
    //其中重写Student的compareTo方法按照年龄排序
    public int compareTo(Student s) {
            int num=this.getAge()-s.getAge();
            int num2=num==0?this.name.compareTo(s.name):num;
            return num2;
        }
    

    选择排序

    public class TreeMapDemo2 {
        public static void main(String[] args) {
            //按照姓名排序
            TreeMap<Student, Integer> map = new TreeMap<>(new Comparator<Student>() {
                @Override
                public int compare(Student o1, Student o2) {
                    int num=o1.getName().compareTo(o2.getName());
                    int num2=num==0?o1.getAge()-o2.getAge():num;
                    return num2;
                }
            });
            map.put(new Student("钟楚红", 23), 10);
            map.put(new Student("梅艳芳", 27), 9);
            map.put(new Student("李丽珍", 26), 1);
            map.put(new Student("翁虹", 27), 4);
            map.put(new Student("叶子楣", 29), 2);
            map.put(new Student("叶子楣222", 29), 3);
            System.out.println(map);
        }
    }
    
    
    展开全文
  • java映射Map

    千次阅读 2016-09-17 12:35:12
    映射  Map用于存储一个由关键字(key)和它们的值(value)组成的条目集合。Map把关键字映射到相应的值,关键字必须是独一无二的,但是不同的关键字也可以对应相同的值。因此,值不需要独一无二。  HashMap中的...
  • java映射和反射的理解

    千次阅读 2019-05-21 19:25:15
    首先我们要知道反射是一种机制,映射是一种关系。 一.反射 反射是在运行状态中任何一个类,我们都能知道这个类的属性和方法,对于任何一个对象都能调用这个对象的任意属性和方法,这种动态的获取信息或者动态调用...
  • java 映射实体类使用

    2016-03-21 08:53:01
    从数据库根据表映射生成一个实体类,这个类如何使用 ,因为我没办法引用啊 设定参数值后 那要怎么传参取参等等。。。
  • JAVA 映射网站到外网

    2017-09-02 22:54:23
    平常我们自己做的Java项目外网是访问不了的,因为我们一般人并没有外网IP,但是有个工具可以很轻松的做到这点,叫 ngrok 我这里分享给大家一份 链接: https://pan.baidu.com/s/1cARnNg 密码: uaqi ...
  • Java映射总结之Map整体框架

    千次阅读 2012-06-02 10:40:01
    Java集合框架中还有另外一个重要的部分,那就是映射(Map)。Mapr的整体框架如下:  框图仅列出了一些常用的接口和类。  Map接口映射唯一关键字到值。关键字(key)是以后用于检索值的对象。给定一个...
  • 通过映射方式,获得对象的指定的值
  • @XmlElement将java对象的属性映射为xml的节点,在使用@XmlElement时,可通过name属性改变java对象属性在xml中显示的名称。eg:@XmlElement该属性作为xml的element,且可以增加属性(name="NewElementName"),那么生成...
  • CORBA IDL-to-Java 映射

    千次阅读 2004-08-26 01:45:00
    通用结构:1.CORBA 模块 CORBA IDL 模块(module)映射成与IDL模块同名的Java包 2.CORBA 异常 CORBA定义了两类异常 I.system exceptions 一种被CORBA定义的异常 II.user-defined exceptions 由用户在I
  • Java映射(map)

    万次阅读 多人点赞 2018-06-06 21:23:48
    集是一个集合,它可以快速地查找现有的元素。但是,要查看一个元素,需要有要查找元素的精确副本。这不是一种非常通用的查找方式,因为在集合中查找元素总是要遍历集合。...Java类库为映射提供了两个通用的实现:Has...
  • 数据库表的映射java映射处理

    千次阅读 2018-08-16 23:11:24
    数据库表的映射java映射处理 1、数据库表与简单java类的映射处理 依据数据库表中的信息设计简单的java类,其实利用了上次课学习java,类间关联以及自身关联和合成设计模式实现。以下通过案例讲解数据库表与...
  • 说说 Java Map 映射

    2020-08-29 16:24:27
    Java Map 是一种键值对的映射集合,在实际编程过程中,很常见。 具体有以下这些实现类: HashMap 用到了哈希函数。哈希函数是一种映射关系,根据数据的关键词 key ,通过一定的函数关系,计算出该元素存储位置的...
  • java的对象对象映射 我在该项目上使用了Dozer一段时间。 但是,最近我遇到了一个非常有趣的错误,这促使我环顾四周,并尝试使用其他“对象到对象”映射器。 这是我找到的工具列表: 推土机:推土机是Java Bean...
  • java 内存映射文件

    2016-05-10 14:22:40
    package io; //Creating a very large file using mapping. //{RunByHand} import java.nio.*; import java.nio.channels.*; import java.io.*;.../*内存映射文件允许修改那些因为太大而不能放入内
  • Java与XML映射利器

    千次阅读 2017-12-23 14:14:35
    Java与XML映射利器熟悉Hibernate的朋友都知道,它可以把Java类和数据库表进行映射,通过操作Java对象的方式可以对表记录进行更新。这可以大大增加我们的开发效率,免去自己直接通过JDBC操作数据库表的繁琐过程。其实...
  • Java 反射和映射

    千次阅读 2018-12-26 16:23:59
    Java 反射和映射 什么是反射?等同于映射吗? 完全不相关的。反射是一个机机制,映射是一种关系。 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的...
  • java 端口映射源码jPortMap.zip

    热门讨论 2008-12-04 10:49:20
    java 端口映射源码 利用java开发端口映射程序 java实现外网与内网端口转发
  • xml与java对象映射

    千次阅读 2017-03-23 10:15:52
    JAXB提供了XML到java对象(类)之间的相互映射(转换),我们可以利用JAXB来消除繁琐的XML解析工作。 下面是引用oracle网站中有关jaxb的一句话。   Now developers have another Java API at their disposal ...
  • java web 中对E:\news目录进行虚拟映射时,通过tomcat/conf/server.xml中 "<“Context path="hello" docBase="e:\news"/>",访问localhost:8080/hello/1.html、 与在catalina/localhost中新建a.xml(随意假设)下 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,615
精华内容 22,246
关键字:

java映射

java 订阅