对象关系映射

昨天用一天的时间重复制造了一个轮子,又一个OR mapping。

我与影子孤独终老i 提交于 2019-12-07 07:45:19
又一个使用annotation的orm的实现,非常无聊的东西。 不过实现过程中,思考了一下,感觉从select出发的orm往往是非常难用的。再简单的系统,其select语句也会出现复杂的内外连接,分组等查询逻辑。 但是在数据存储部分,也就是upate ,insert,delete部分,逻辑往往是非常简单的,使用orm会得到比较好的效果。 然后,要反思一下DAO模式,在通常理解的DAO模式中,数据的读取和写入是放在同一个DAO类当中的,在实际开发中,select相关的findXXX方法好getXXXX方法非常多,但是update,insert,add,save等方法个数都比较少,个人认为开发DAO或者说数据访问层程序的时候,应该讲DAO分为写入DAO和读取DAO,同时可以考虑在此实现读写分离,写入一个库,读取多个库,读加缓冲池,写直接写入,利用数据库机制表同步,以提高系统的伸缩性。 而且根据@1哥的答案,写入操作本身就是一个非常慢的动作,在写入时加入反射,犹如大象身上的虱子,相对磁盘来说,反射的消耗应该可以忽略。 然后,顺便对于NutzDAO进行一下小小的批评,作为DAO中间件,有些事情做了太多,反而不太好,比如引入所谓的whereClause的条件查询,真实业务中的select的SQL非常复杂,用简单的条件封装,很难满足真实开发需要的。 要知道hibernate一开始也很好用

mybatis(七)mapper映射文件配置之insert、update、delete

六月ゝ 毕业季﹏ 提交于 2019-12-07 02:37:53
上篇文章简单地给mybatis的配置画上了一个句号。那么从本篇文章开始,将会介绍mapper映射文件的配置, 这是mybatis的核心之一,一定要学好。在mapper文件中,以mapper作为根节点,其下面可以配置的元素节点有: select, insert, update, delete, cache, cache-ref, resultMap, sql 。 本篇文章将简单介绍 insert, update, delete 的配置及使用,以后会对mybatis的源码进行深入讲解。 相信,看到insert, update, delete, 我们就知道其作用了,顾名思义嘛,myabtis 作为持久层框架,必须要对CRUD啊。 好啦,咱们就先来看看 insert, update, delete 怎么配置, 能配置哪些元素吧: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <!-- mapper 为根元素节点, 一个namespace对应一个dao --> <mapper namespace="com.dy.dao

mybatis

喜你入骨 提交于 2019-12-06 16:24:20
什么是MyBatis? MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 为什么要使用MyBatis? 无论是Mybatis、Hibernate都是ORM的一种实现框架,都是对JDBC的一种封装! 持久层中的几种技术: Hibernate(一个比较老旧的框架) 优点:用起来十分舒服,sql代码都不用写 缺点:处理复杂业务时,灵活度差, 复杂的HQL难写难理解,例如多表查询的HQL语句 JDBC 优点:易理解,几个固定的步骤 缺点:开发起来太麻烦,什么都需要自己写 SpringDAO 其实是JDBC的一层封装就类似于dbutils一样 可以认为,MyBatis就是jdbc和Hibernate之间的一个平衡点 MyBatis 在 IBatis 的基础上做了哪些大的改进? 有接口绑定,包括注解绑定sql和xml绑定Sql; 动态sql由原来的节点配置变成OGNL表达式; 在一对一,多对一的时候引进了association,在一对多的时候引入了collection节点,不过都是在resultMap里面配置。

Hibernate映射关系:一对一、一对多和多对多

ⅰ亾dé卋堺 提交于 2019-12-06 13:59:12
在 Hibernate 中,同样可以对多张存在关联关系的表进行操作,但需要在映射文件中,将对象的关联关系与数据库表的外键关联进行映射。本章将对 Hibernate 的关联关系映射进行详细讲解。 在关系型数据库中,多表之间存在着三种关联关系,分别为一对一、一对多和多对多,如图 1 所示 图 1 关系型数据库中多表之间的三种关联关系 这三种关联关系的具体说明如下。 一对一:在任意一方引入对方主键作为外键。 一对多:在“多”的一方,添加“一”的一方的主键作为外键。 多对多:产生中间关系表,引入两张表的主键作为外键,两个主键成为联合主键。 通过数据库表可以描述实体数据之间的关系,同样,通过对象也可以进行描述。在 Hibernate 中,使用 Java 实体对象之间的关系描述数据表之间的关系,如图 2 所示。 从图 2 中可以看出,一对一的关系就是在本类中定义对方类型的对象,如 A 类中定义 B 类类型的属性 b,B 类中定义 A 类类型的属性 a;一对多的关系,在一个 A 类类型对应多个 B 类类型的情况下,需要在 A 类以 Set 集合的方式引入 B 类类型的对象,在 B 类中定义 A 类类型的属性 a;多对多的关系,在 A 类中定义 B 类类型的 Set 集合,在 B 类中定义 A 类类型的 Set 集合,这里用 Set 集合的目的是避免数据的重复。 以上就是 Java

终极手撕之架构大全:分布式+开源框架+微服务+性能优化,够不够?

谁都会走 提交于 2019-12-06 10:20:01
终极手撕之架构大全:分布式+开源框架+微服务+性能优化,够不够? 一只Tom猫4小时前 我要分享 之前有零零散散整理过一些专题给大家参考学习,这次一次性来个终极手撕之架构大全,包含开源框架、分布式、微服务、性能优化等四个大专题共17个小专题,全部一锅端,送给大家一起学习~ 注意:需要全部完整版架构大全答案的可以 【“点击我”免费领取】 《终极手撕之架构大全:分布式+开源框架+微服务+性能优化,够不够?》 01 开源框架(Spring +SpringMVC+Mybatis) 开源框架答案解析如下: 1.1 手撕开源框架之Spring 什么是 Spring 框架?Spring 框架有哪些主要模块? 使用 Spring 框架能带来哪些好处? 什么是控制反转(IOC) 请解释下 Spring 框架中的 IoC BeanFactory 和 和 ApplicationContext 有什么区别? Spring 有几种配置方式? 如何用基于 XML 配置的方式配置 Spring 如何用基于 Java 配置的方式配置 Spring 怎样用注解的方式配置 Spring 请解释 Spring Bean 的生命周期? Spring Bean 的作用域之间有什么区别? Spring 框架中的单例 Beans 是线程安全的么? 请举例说明如何在 Spring 中注入一个 Java Collection

Mybatis笔记

ⅰ亾dé卋堺 提交于 2019-12-06 04:24:58
Mybatis下载地址: https://github.com/mybatis ,也可以用maven Mybatis概述 Mybatis,原名:iBatis,Mybatis是一个ORM(对象关系映射)框架,是一款基于Java的持久层框架,MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。 MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(简单的Java对象、实体类)映射成数据库中的记录。 dao -> 持久层(用来数据持久化) -> db 持久层和dao层融合一起来使用, ORM框架解决的是面向对象程序设计语言和关系型数据库不匹配的问题,Mybatis能使操作数据库像使用面向对象语言一样; hibernate是纯ORM框架;而Mybatis是半ORM框架,要手写sql的 Mybatis要做的事:实体类和sql之间建立映射关系 Mybatis核心配置(见son4模块) mybatis开发dao层(见son4模块) 1.传统开发方式(不常用):mybatis对dao的支持:在daoimpl加成员变量sqlsession工厂 2.mapper代理开发方式(最常用):mybatis对dao的支持,只需实现接口,并保证和映射文件名字一致,会生成代理实现类, 使用mapper代理注意:namespace

【SSH进阶之路】Hibernate系列——总结篇(九)

眉间皱痕 提交于 2019-12-06 02:35:26
这篇博文是Hibernate系列的最后一篇,既然是最后一篇,我们就应该进行一下从头到尾,整体上的总结,将这个系列的内容融会贯通。 概念 Hibernate是一个对象关系映射框架,当然从分层的角度看,我们也说它是数据持久层的框架。 我们从上一句话可以看出Hibernate的核心:面向对象、关系映射以及数据持久化。前面两个概念很容易理解,而对于“数据持久化”,就是将数据或者某物体,永久的保存起来。现实生活中的例子有很多,例如:鲜肉冷藏,水果做成罐头,而对于编程而言就是将数据保存在文件或磁盘以及数据库中。下面我们再看一下Hibernate的核心对象: 核心对象 上面这幅图反馈给我们的信息有很多,能否读懂这幅图可以从侧面反映你对Hibernate理解的水平。下面我们说几条: 1、Hibernate有俩个主要的配置文件:(Hibernate.cfg.xml和xxx.hbm.xml) 2、Hibernate有五个或六个接口:Configuration、SessionFactory、Session、Transaction、Query和Criteria。 3、Hibernate的执行原理,看上图的箭头即可。 4、Session对象是通过SessionFactory构建的,这是Hibernate创建Session的两种方式之一。 。。。。。。 由于内容太多,我们暂时就列这么多,就不再一一列举了

【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)

时光毁灭记忆、已成空白 提交于 2019-12-06 02:34:03
【SSH进阶之路】Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,采用对象化的思维操作关系型数据库。 【SSH进阶之路】Hibernate搭建开发环境+简单实例(二) ,小编搭建了基本Hibernate的开发环境,并做了一个简单实例,对它的基本原理有了一个理性的认识。 【SSH进阶之路】Hibernate基本映射(三) ,我们介绍了Hibernate的基本映射(即对一个实体进行映射)的相关概念,并给大家实现相关实例,比较简单。 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四) ,我们介绍了多对一的关联映射,并详细了解说了,映射技巧,这篇我们依旧使用此映射技巧,帮助大家更好的理解。 下面开始今天的愉快之旅。 映射原理 两个实体对象之间是一对一的关联映射,即一个对象只能与另外唯一的一个对象相对应。例如:一个人(Person)只有一张身份证(IdCard)。我们看一下这个例子的对象模型,如下图所示: 对象模型 从上图中可以看出: 1、一个人只有一张身份证,唯一的一个身份证号,对象之间是一对一的关系; 2、人(Person)持有身份证(IdCard)的引用,所以,两个对象关系维护由person端决定。 从对象模型映射成关系模型,有两种方式:主键关联和唯一外键关联,我们继续看下面的内容。 分类: 主键关联: 1

【SSH进阶之路】Hibernate基本映射(三)

≯℡__Kan透↙ 提交于 2019-12-06 02:32:28
【SSH进阶之路】Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,采用对象化的思维操作关系型数据库。 【SSH进阶之路】Hibernate搭建开发环境+简单实例(二) ,小编搭建了基本Hibernate的开发环境,并做了一个简单实例,对它的基本原理有了一个理性的认识。 这篇博客小编介绍Hibernate的经典内容:对象关系映射。主要介绍映射的基本概念,映射的分类,映射文件。 概念 ORM(Object Relational Mapping),即对象关系映射。它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。相信很多人跟小编一个毛病,看到概念就头疼,下面小编画了一张图加深理解。 这张图特别简单:原来,没有Hibernate时,我们需要通过JDBC+手动写SQL语句来操作数据库,现在,有了Hibernate,它将JDBC+SQL进行了高度封装,我们不需要再去和复杂SQL打交道,只要像操作对象一样操作数据库就可以了。 ORM的实现思想就是将数据库中表的数据映射成对象,Hibernate可以使我们采用对象化的思维操作关系型数据库。 映射文件 Hibernate在实现ORM功能的时候主要用到的文件有: 1、 映射类(*.java):它是描述数据库表的结构

redis分布式映射算法

夙愿已清 提交于 2019-12-05 16:47:02
redis分布式映射算法 一致性Hash算法的原理和实现 为了解决分布式系统中的负载均衡的问题 背景问题 有N台服务器提供缓存服务,需要对服务器进行负载均衡,将请求平均发到每台服务器上,每台服务器负载1/N的服务 硬Hash映射: 将每台服务器结点进行编号,0到N-1,Key%N就是映射到的服务器结点编号 硬Hash映射存在的问题 当分布式系统中服务器结点个数N变化的时候,每个Key对应的服务器结点的映射关系都要被改变,这会导致大量的Key会被重定向到不同的服务器结点上从而造成大量的缓存不命中,这种情况在分布式系统中是非常糟糕的,这个就是所谓的缓存雪崩,当这种情况发生时,服务器的数据库会存在非常大的压力,很可能会直接宕机 怎么解决硬Hash映射存在的问题? 一致性Hash算法 一致性Hash算法 原理: 将整个Hash空间组织2成一个虚拟的圆环,假设某个哈希函数H的值的空间为0到2的32次方减一,即hash值是一个32位的无符号整型数,整个Hash空间环如下: 下一步将各个服务器结点使用H哈希函数进行哈希映射,具体可以选择服务器的IP或者主机名作为关键字进行映射,这样每台服务器就能确定其在Hash空间上的位置,比如下图: 接下来我们将数据对象映射到Hash空间环上,假设我们有A,B,C,D四个数据对象,他们的Hash空间环上的位置如下: