对象关系映射

【5min+】 对象映射只有AutoMapper?试试Mapster

时光总嘲笑我的痴心妄想 提交于 2020-02-21 19:17:29
系列介绍 【五分钟的dotnet】是一个利用您的碎片化时间来学习和丰富.net知识的博文系列。它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net知识等等。 5min+不是超过5分钟的意思,"+"是知识的增加。so,它是让您花费5分钟以下的时间来提升您的知识储备量。 正文 一谈到如何在.Net中进行对象映射,可能大部分同学都会脱口而出:“使用AutoMapper!”。 是的,AutoMapper 是一个非常成熟的 对象映射器 。截至到写这篇文章,您能在Nuget上下载到的AutoMapper包的版本为:v9.0.0,而对应的 Github 的 star 已经高达7K。 对了,谈到AutoMapper就不得不谈起它的作者(之一):“JIMMY BOGARD”。也许您没有听过这个名字,但是您一定听过他的另一个作品: MediatR (在微软的官方示例EShop中也使用了MediatR)。同时,“JIMMY BOGARD” 也是提出“将领域事件附加在聚合根”上的人,为领域驱动设计(DDD)做出了很大的贡献。在微软官方文档中,您可以看到该处提及到了“JIMMY BOGARD”: 好吧,优秀的人总是优秀😭。还是回到今天的正文,对象映射工具。当然,对于AutoMapper大家可能再熟悉不过了,而且它的知名度和热度也居高不下

09. MyBatis的关系映射

自作多情 提交于 2020-02-20 01:56:59
MyBatis的关系映射 1. 关联关系概述 2. 一对一关系 3. 一对多关系 4. 多对多关系 1. 关联关系概述 在关系型数据库中,多表之间存在着三种关联关系,分别为一对一、一对多和多对多 关系 说明 一对一 在任意一方引入对方主键作为外键 一对多 在“多”的一方,添加“一”的一方的主键作为外键 多对多 产生中间关系表,引入两张表的主键作为外键,两个主键成为联合主键或使用新的字段作为主键 在Java中,通过对象也可以进行关系描述 关系 说明 一对一的关系 就是在本类中定义对方类型的对象,如A类中定义B类类型的属性b, B类中定义A类类型的属性a 一对多的关系 就是一个A类类型对应多个B类类型的情况,需要在A类中以集合的方式引入B类类型的对象,在B类中定义A类类型的属性a 多对多的关系 在A类中定义B类类型的集合,在B类中定义A类类型的集合 2. 一对一关系 在现实生活中,一对一关联关系是十分常见的。例如,一个人只能有一个身份证,同时一个身份证也只会对应一个人。 在 07. MyBatis的核心配置 所讲解的< resultMap>元素中,包含了一个< association>子元素,MyBatis就是通过该元素来处理一对一关联关系的。 在< association>元素中的属性 属性 作用 property 指定映射到的实体类对象属性,与表字段一一对应 column

vue router 路由

笑着哭i 提交于 2020-02-17 19:48:55
vue router 路由 什么是前端渲染,什么是后端渲染 后端路由 由后端服务器html+css+java动态绑定数据并渲染好一个页面,直接发送到前端。 优点是有利于seo优化,缺点html和数据逻辑混在一起,难以维护 前后端分离 随着Ajax出现,后端只负责数据,前端去静态服务器请求html+css+js,然后调用api接口再进行数据处理进行渲染 前端路由SPA阶段 在前后端分离的基础上加了一层前端路由。 前端去静态服务器请求html+css+js(全部资源),资源分成多个组件,点击一个url显示一个组件,页面进行不整体刷新。 前端路由的作用就是管理url和对应组件的映射关系 前端路由规则 URL的hash URL的hash也就是锚点(#), 本质上是改变window.location的href属性. location.hash = 'aaa' HTML5中history模式: 1. pushState 把url push进去,类似栈结构,遵循先入后出 history.pushState({},'','home') 2. back 返回前一页面 history.back() 3. forward 前进下一页面 history.forward() 4. replaceState 替换url,不会保留历史记录 history.replaceState({},'','home') 5

Entity Framework 学习笔记 1 Books

谁说我不能喝 提交于 2020-02-16 10:02:54
Entity Framework 简介 Entity FrameWork 1 Entity FrameWork的第一个版本没有准备用于.NET3.5. 一个产品是LINQ to SQL, 它提供了类似的功能,可以用于.net3.5. 从广义上看,LINQ to SQL 和Entity FrameWork 提供了类似的功能。然而,LINQ to SQL使用更简单,但只用于访问SQL Server。 Entity FrameWork 是基于提供程序的,可以访问几种不同的关系数据库。它包含了更多的功能,比如多对多映射,不需要映射对象,可以进行n到n映射。Entity FrameWork 的一个缺点是,他要求模型类型派生自EnitiyObject基类。使用一个包含xml的edmx文件,把对象映射到关系上。 Entity FrameWork 4 可用于.net4 进行了中大改进,许多想法都来自linqtosql。因为改动较大,跳过了版本2和3 。这个版本中增加了延迟加载,在访问属性的时候获取关系。设计模型后,可以使用sql数据定义语言创建数据库。使用Entity FrameWork 的两个模型闲杂是 databasefirst 或 ModelFirst。添加的重要特性是支持Plain Old所有阻碍派生自基类EntityObject。 Entity FrameWork 5 的NuGet包支持

Mybatis面试问题集锦

♀尐吖头ヾ 提交于 2020-02-15 13:17:51
1、#{}和${}的区别是什么? 答:mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值; mybatis在处理 $ { } 时,就是把 ${ } 替换成变量的值,完成的是简单的字符串拼接。 补充:在mybatis中使用#{}可以防止sql注入,提高系统安全性。MyBatis排序时使用order by 动态参数时需要注意,用$而不是# 2、Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签? 答:还有很多其他的标签, 、 、 、 、 ,加上动态sql的9个标签,trim|where|set|foreach|if|choose|when|otherwise|bind等,其中 为sql片段标签,通过 标签引入sql片段, 为不支持自增的主键生成策略标签。 3、最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗? 答:Dao接口,就是人们常说的Mapper接口,接口的全限名,就是映射文件中的namespace的值,接口的方法名,就是映射文件中MappedStatement的id值,接口方法内的参数,就是传递给sql的参数。Mapper接口是没有实现类的,当调用接口方法时

java中的三层架构

倾然丶 夕夏残阳落幕 提交于 2020-02-12 04:26:46
  三层架构主要指java项目设计中的持久层,业务层,和表现层。一般的项目开发都遵循这样的设计思想。   持久层:用于完成内存数据和磁盘数据的转换。   业务层:完成业务处理,将表现层提供的数据处理完后,交由持久层完成数据的保存。   表现层:完成数据的提供和数据的展示,并提供给用户流程控制。   主要采用的实现方式如下:   持久层主要采用Dao模式,建立实体类和数据库的表之间的映射关系,也就是那个类映射那个表,那个属性映射哪个列,而持久层的目的就是完成对象数据和关系数据的转换。   业务层采用业务脚本模式,将一个业务中所有的操作封装成一个方法,保证这个方法的所有数据库更新操作同时成功同时失败,避免出现部分成功部分失败的问题,引起数据混乱的现象。   表现层采用了mvc模式:m即模型,也就是使用实体类封装数据并进行传输。v即视图,也就是窗体和GUI,用于数据的提供和数据的展示。c即控制,也就是事件,调用业务方法,以及业务流程的控制。 来源: https://www.cnblogs.com/Freebe/p/6853851.html

C#常用开源框架

守給你的承諾、 提交于 2020-02-10 16:45:24
01,Json.NET http://json.codeplex.com/ Json.Net 是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单。通过Linq To JSON可以快速的读写Json,通过JsonSerializer可以序列化你的.Net对象。让你轻松实现.Net中所有类型(对象,基本数据类型 等)和Json的转换。 02,Math.NET http://www.mathdotnet.com/ Math.NET的目标是为提供一款自身包含清晰框架的符号运算和数学运算/科学运算,它是C#开发的开源类库。Math.NET含了一个支持线性代数的解析器,分析复杂微分,解方程等等功能。 03,Faker.Net https://github.com/jonwingfield/Faker.Net 开发的时候是不是为测试数据烦恼?Faker.Net可以非常方便帮你生成大批量测试数据。例如人员表里面的姓名、性别什么的。 04,Html Agility Pack http://htmlagilitypack.codeplex.com/ Html Agility Pack 是CodePlex 上的一个开源项目。它提供了标准的DOM API 和XPath 导航--即使 HTML 不是适当的格式!HTML Agility Pack 搭配

Hibernate 配置文件与映射文件 总结

▼魔方 西西 提交于 2020-02-10 06:16:21
hibernate 是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架。 一、Hibernate配置文件详解 Hibernate配置文件有两种形式:XML与properties 个人建议使用XML,因为properties中不能配置关联的映射文件,在后续的实现中会带来一些没必要的编码; XML(hibernate.cfg.xml)文件详解: <? xml version= "1.0" encoding= "GBK" ?> <!-- 指定Hibernate配置文件的DTD信息 --> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd" > <!-- hibernate- configuration是连接配置文件的根元素 --> < hibernate-configuration > < session-factory > <!-- 指定连接数据库所用的驱动 --> < property name= "connection.driver_class" >com.mysql.jdbc

java 三大框架——Hibernate

本小妞迷上赌 提交于 2020-02-09 14:37:11
Hibernate框架简介 Hibernate框架是一款数据持久型的框架也是一款ORM框架 数据持久型:是将数据存入数据库或将数据库里的数据读入程序中 ORM:我们说JAVA中是面向对象的思想 而现在市场中大部分使用的数据库都是关系型数据库,如果利用面向对象语言来操作关系型数据库的话,其中会出现一些很麻烦的代码,会阻碍我们进行开发造成了没必要的麻烦,所以ORM提供了一种能使用对象来调用数据库里的每一条数据,具体是以类来对应数据库中的表,以对象来对应表中的字段,以对象来对应表中的每一条数据。 在了解Hibernate之前 首先回顾一下JDBC是如何操作数据库的 1,加载mysql驱动 2,获取连接 3,获取数据的操作对象 4,进行数据库的操作 5,关闭资源 在Hibernate结构目录中分别有以下几个结构 documentation(文档) lib(jar包) project(源代码) 对于初学这款框架的程序员来说 先进入lib包下进行导包 hibernate框架的jar包就分的很详细 lib中会发现有这几种envers jpa optional osgi required 一般情况下只导入required下的jar包即可 这些jar都是必须存在的 optional中的jar包主要是用于优化hibernate的性能 包括数据连接池和缓存两部分 接下来了解下Hibernate的相关配置

ceph介绍

社会主义新天地 提交于 2020-02-09 14:16:08
一、Ceph简介: Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统 。ceph 的统一体现在可以 提供文件系统、块存储和对象存储 ,分布式体现在可以动态扩展。在国内一些公司的云环境中,通常会 采用 ceph 作为openstack 的唯一后端存储来提高数据转发效率。 Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。 官网:https://ceph.com/ 官方文档:http://docs.ceph.com/docs/master/# 二、Ceph特点: 高性能: a. 摒弃了传统的集中式存储元数据寻址的方案, 采用CRUSH算法 ,数据分布均衡, 并行度高。 b.考虑了容灾域的隔离,能够 实现各类负载的副本放置规则 ,例如跨机房、机架 感知等。 c. 能够 支持上千个存储节点的规模 ,支持TB到PB级的数据。 高可用性: a. 副本数可以灵活控制。 b. 支持故障域分隔 ,数 据强一致性。 c. 多种故障场景自动进行 修复自愈 。 d. 没有单点故障 ,自动管理。 高可扩展性: a. 去中心化。 b. 扩展灵活。 c. 随着节点增加而 线性增长。 特性丰富