对象关系映射

hibernate学习整理

自闭症网瘾萝莉.ら 提交于 2020-01-29 11:30:44
1.建立第一个程序 model里面是数据库表所对应的字段,先建立strudent数据库,再建立与数据库与之对应的model,再从官方的文档里面copy hibernate.cfg.xml文件并进行修改, -->建立student.hbm.xml文件 2.在student.hbm.xml文件中<hibernate-mapping package =是你要映射到的哪个包中 class name=“为那个包中所对应的类名” table="数据库的表名"(它包含这个类和表之间的映射关系) id name=“为model中的那个主键” column=‘与DB中对应的列’>同时要在hibernate.cfg.xml文件中的<mapping-resource>指定要映射的strudent.hbm.xml文件。 3.写具体的实现,前几步是固定的写法,也可以定义一个工具类进行封装 SessionFactory sf=new Configuration.configure.buildSessionFactory(); Session session=sf.openSession(); Transfaction ts=session.beginTransfaction(), 在hibernate中操作要放在事物里面,session.save(这个s是一个student类对象) ts.commit()

ORM实现原理

北城余情 提交于 2020-01-28 12:13:44
1.什么是ORM ORM的全称是Object Relational Mapping,即对象关系映射。它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作。因此它的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。 2.什么是Hibernate 对于Hibernate的称呼有很多,比如工具、技术、框架以及解决方案等,这些都可以,重要的是大家要知道它的作用。在这里我习惯性称它为框架,它是一种能实现ORM的框架。能实现ORM这个功能的框架有很多,Hibernate可以说是这些框架中最流行、最受开发者关注的,甚至连JBoss公司也把它吸收进来,利用它在自己的项目中实现ORM功能。 3.ORM的实现原理 现在在Java领域大家对Hibernate的讨论很多,比如它的优缺点、如何应用、错误如何解决以及把它和Struts/Spring等框架相结合作为整个系统的解决方案。在这里我想和大家探讨一些更深层次的话题,那就是Hibernate是如何实现ORM的功能?如果让我们自己开发一款实现ORM功能的框架需要怎么做?其实这些问题就是围绕着一个词,那就是“映射”,如果我们知道如何实现这种映射那么我们也能够开发出自己的一款ORM框架。会使用Hibernate的开发人员都知道,在使用它实现ORM功能的时候,主要的文件有:映射类

AutoMapper Getting started

左心房为你撑大大i 提交于 2020-01-28 04:55:25
AutoMapper 是什么? 为什么要用AutoMapper? 如何使用AutoMapper? 在什么地方配置AutoMapper? 如何测试my mappings? AutoMapper 是什么? AutoMapper是一个对象到对象的映射关系,对象到对象的映射是通过转化一个类型对象输入到一个不同的类型对象输出来工作的,使得AutoMapper让人感兴趣的一点就是他提供了一些比较有趣的规则把繁重的工作从类型对象转换算法中剔除掉, 只要类型对象遵循了AutoMapper建立的规则,基本上不需要额外的配置去做类型对象之间的转化。 为什么要用AutoMapper? 类型转换代码是令人讨厌的,测试类型转换代码更加的令人讨厌,AutoMapper提供了非常简单的配置机制,类型转换测试也变得同样简单,现在真正剩下的需要关心的问题是why use object-object mapping?, 类型转化会发生在项目中很多地方,但是大部分发生在层与层之间的边界,例如 UI/Domain 之间,或者Service/Domain 之间,通常来说一层关心的东西和另外一层关心的东西是不一致的, 所以对象到对象的映射产生了一个隔离的模型,这样每一层的对象的变化更加独立,仅仅会影响对象所在的层,对其他的层不会产生影响 如何使用AutoMapper? 首先,你需要Source类型和目标类型

mybatis 第一个项目

谁说我不能喝 提交于 2020-01-25 01:21:01
首先先了解一下mybatis的概念和架构 概念 先了解ORM(Object/Relational Mapping),即对象关系映射,它用来完成面向对象编程语言到关系数据库的映射。简单来说ORM的作用就是将持久化对象的增删改查操作转换成对关系数据库的操作。 ORM的基本映射关系: 数据表映射 数据表的行(一行单表一个数据)映射对象(实例) 数据表的列(字段)映射对象的属性 mybatis本来是apache的开源项目ibatis,后来移植到google code,并更名为现在的名字mybatis。 mybatis的优点: 支持定制化SQL,存储过程,以及高级映射。 避免JDBC代码,以及配置。 对结果集进行封装。 可以使用注解,将接口和java中的pojo映射成数据库中的记录。 mybatis的思想:将程序中大量的sql语句抽离出来,在配置文件中配置,以实现sql的灵活。 mybatis并不是一个完成的ORM框架,他可以通过编写sql,使得访问数据库更加灵活。准确的说是半自动化的ORM框架,是一种sql mapping框架。 架构 mybatis的架构分为三层: 接口层:提供给开发人员的API接口,通过这些API来操作数据库。 数据处理层:完成一次数据库请求,只要的流程是sql查找、sql解析、sql执行,以及对结果集的处理。 基础支撑层:负责最底层的东西,也是公用的东西,包括连接管理

ABP理论学习之数据传输对象(DTO)

我是研究僧i 提交于 2020-01-24 14:45:02
返回总目录 本篇目录 为何需要DTO 领域层抽象 数据隐藏 序列化和懒加载问题 DTO惯例和验证 DTO和实体的自动映射 使用特性和扩展方法进行映射 帮助接口 DTO用于 应用层 和 展现层 间的数据传输。 展现层调用具有DTO参数的 应用服务 方法,然后应用服务使用领域对象来执行一些特定的业务逻辑,最后返回给展现层一个DTO。因此,展现层完全独立于领域层。在一个理想的分层应用中,展现层不直接和领域对象打交道(仓储,实体...)。 为何需要DTO 为每个应用服务方法创建一个DTO起初可能被看作是一项乏味而又耗时的事情。但如果正确地使用它,那么DTOs可能会拯救你应用。为啥呢? 领域层抽象 DTO为展现层抽象领域对象提供了一种有效方式。这样,层与层之间就正确分离了。即使你想完全分离展现层,仍然可以使用已存在的应用层和领域层。相反,只要领域服务的契约(方法签名和DTOs)保持不变,即使重写领域层,完全改变数据库模式,实体和ORM框架,也不需要在展现层做任何改变。 数据隐藏 试想你有一个User实体,包含Id,Name,EmailAddress和Password字段。如果UserAppService的GetAllUsers()方法返回一个List ,即使你没有在屏幕上显示它,那么任何人也都能看到所有user的密码。它不是涉及安全的,而是与数据隐藏相关的。应用服务都应该返回给展现层需要的

[转帖]Mybatis十八连环问!这谁顶得住?

落花浮王杯 提交于 2020-01-24 01:24:04
Mybatis十八连环问!这谁顶得住? http://www.itpub.net/2020/01/19/5130/ 1、#{}和${}的区别是什么? 答:${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。#{}是sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,按序给sql的?号占位符设置参数值,比如ps.setInt(0, parameterValue),#{item.name}的取值方式为使用反射从参数对象中获取item对象的name属性值,相当于param.getItem().getName()。 2、Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签? 答:还有很多其他的标签,<resultMap>、<parameterMap>、<sql>、<include>、<selectKey>,加上动态sql的9个标签,trim|where|set|foreach|if|choose|when|otherwise|bind等,其中<sql>为sql片段标签,通过<include>标签引入sql片段,<selectKey

Mybatis入门

依然范特西╮ 提交于 2020-01-23 23:53:58
Mybatis入门 Mybatis简介 Mybatis中文官网: http://www.mybatis.cn/82.html Mybatis前身 Mybatis的前身是Apache的开源框架iBatis,与Hibernate一样是一个Java持久层的框架。 Mybatis的优势在于灵活,它几乎可以替代JDBC,同时提供了接口编程。目前Mybatis的数据访问层DAO(Data Access Object)是不需要实习类的,它只需要一个接口和XML(或者注解),建议使用注解来实现。Mybatis提供自动映射,动态SQL,级联,缓存,注解,代码和SQL分离等特性,使用方便,同时也对SQL进行优化。因为其具有封装少,映射多样化,支持存储过程,可以进行SQL优化等特点,是的它取代了Hibernate成为Java互联网中首选持久层框架。 Mybatis的三个优点 1.不屏蔽SQL,意味着可以更为精确定位SQL语句,可以对其进行优化和改造,这有利于互联网系统性能的提高,符合互联网需要性能优化的特点。 2.提供强大、灵活的映射机制,方便Java开发者使用。提供动态SQL的功能,允许我们根据不同组装SQL,这个功能远比其他工具或者Java编码的可读性和可维护性高得多,满足各种应用系统的同时也满足了需求经常变化的互联网应用的要求。 3.在Mybatis中,提供了使用Mapper的接口编程

115网盘怎么搜索资源

孤者浪人 提交于 2020-01-23 21:51:43
1、啥是 MyBatis? MyBatis 是一个半自动 ORM 持久层框架,她内部对 JDBC 做了封装,并使用 XML 或注解来配置和映射数据库信息,开发人员只需要关注 SQL 语句本身,避免了处理繁琐的数据库映射过程,使 Java 代码和 SQL 完全分离,有利于分层开发,提高开发效率和灵活性。 2、MyBatis 的优缺点和适用场景? 1)优点 基于SQL语句编程,非常灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除SQL与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。 与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接; 很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)。 能够与Spring很好的集成; 提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护。 2)缺点 SQL语句的编写工作量较大,尤其当字段多、关联表多时。 不支持方言,数据库移植性差。 SQL存在XML文件中,调试不方便。 对动态SQL的支持不是很好,提供的标签过于简单。 由于xml里标签id必须唯一,导致DAO中方法不支持方法重载。 3)适用场景 MyBatis 解耦了 SQL 和 程序代码

java三大框架的各自作用

泄露秘密 提交于 2020-01-23 20:28:39
java三大框架的各自作用: hibernate是底层基于jdbc的orm(对象关系映射)持久化框架,即:表与类的映射,字段与属性的映射,记录与对象的映射 数据库模型 也就是Model; struts提供的丰富标签是用于显示层View;同时struts也充当了实现Control的功能(不管是Struts1,还是Struts2),接收参数,视图分发。 Spring是用于降低层与层间耦合度的,就是所有的类都可以由spring统一创建,用时只需注入即可(IOC) 从功能上来说,hibernate为M,struts2 为V,也可以为C,spring可以为C。 但大多数项目中,hibernate为M,struts2 为V+C,spring用来帮助管理类以及实现一些业务无关功能,如日志记录等,大多数都是用struts来做C的。 来源: CSDN 作者: 孙士海 链接: https://blog.csdn.net/weixin_43821182/article/details/104076934

打造自己的数据访问层(二)

拜拜、爱过 提交于 2020-01-21 05:49:38
上一篇 打造自己的数据访问层(一) 中,我们已了解了.NET对数据库操作的基本原理,并就Ado.net对象的使用提出了几点疑问: 1、如何由系统来判断数据库型。 2、如何消除这些重复代码。 而上篇中也提出了一种解决思路,对ADO.NET对象进行封装,具体应该如何实施? 1、需要一个对象,该对象用于建立内存表与物理表的之间映射关系,解决数据查询、更新操作,形成了数据映射对象,定义为DataMapping。 2、每一个映射对象只与一张物理建立映射关系,如果有多个这样的对象同时操作,如何解决?这时就需要另一个对象,用于添加映射对象集合,打包映射对象操作,形成了数据执行者,定义为DataExecutor。 想想看,只需要这两个基本对象,就可以形成简单的数据访问层了。 先实现DataMapping,它应具备如下功能。 1、需要知道物理表的信息,表名、主键集、字段集。 2、需要知道映射的是什么类型的数据库,MSSql数据库、Oracle数据库、MySql数据库或者其他类型的数据库。 3、可查询数据,即填充内存表。 4、可更新数据,并且可设置更新操作方式。 5、可加入到事务中去。 根据上述功能,可初步设计出的DataMapping类: public class DataMapping{ public DataMapping() { } /// <summary> /// 填充数据集 /// <