对象关系映射

Elasticsearch -- 映射和分析

情到浓时终转凉″ 提交于 2020-03-01 06:15:38
映射(mapping) 机制用于进行字段类型确认,将每个字段匹配为一种确定的数据类型( string , number , booleans , date 等)。 分析(analysis) 机制用于进行 全文文本(Full Text) 的分词,以建立供搜索用的反向索引。 映射及分析 当在索引中处理数据时,我们注意到一些奇怪的事。有些东西似乎被破坏了: 在索引中有12个tweets,只有一个包含日期 2014-09-15 ,但是我们看看下面查询中的 total hits。 GET /_search?q=2014 # 12 个结果 GET /_search?q=2014-09-15 # 还是 12 个结果 ! GET /_search?q=date:2014-09-15 # 1 一个结果 GET /_search?q=date:2014 # 0 个结果 ! 为什么全日期的查询返回所有的tweets,而针对 date 字段进行年度查询却什么都不返回? 为什么我们的结果因查询 _all 字段(译者注:默认所有字段中进行查询)或 date 字段而变得不同? 想必是因为我们的数据在 _all 字段的索引方式和在 date 字段的索引方式不同而导致。 让我们看看Elasticsearch在对 gb 索引中的 tweet 类型进行 mapping (也称之为 模式定义 [注:此词有待重新定义

MyBatis常见面试问题

我是研究僧i 提交于 2020-02-28 22:31:15
一、 JDBC编程有哪些不足之处,Mybatis是如何解决这些问题的? 1) 数据库连接的创建、释放频繁造成系统资源浪费从而影响了性能,如果使用数据库连接池就可以解决这个问题。当然JDBC同样能够使用数据源。 解决:在xml中配置数据连接池,使用数据库连接池管理数据库连接。 2) SQL语句在写代码中不容易维护,事件需求中SQL变化的可能性很大,SQL变动需要改变JAVA代码。 解决:将SQL语句配置在mapper.xml文件中与java代码分离。 3) 向SQL语句传递参数麻烦,因为SQL语句的where条件不一定,可能多,也可能少,占位符需要和参数一一对应。 解决:Mybatis自动将java对象映射到sql语句。 4) 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。 解决:Mbatis自动将SQL执行结果映射到java对象。 二、 Mybatis编程步骤 ? Step1:创建SQLSessionFactory Step2:通过SQLSessionFactory创建SQLSession Step3:通过SQLSession执行数据库操作 Step4:调用session.commit()提交事物 Step5:调用session.close()关闭会话 三、 MyBatis与hibernate有哪些不同 ? 1

MyBatis完全使用指南

 ̄綄美尐妖づ 提交于 2020-02-26 05:57:07
MyBatis完全使用指南 转 http://www.jianshu.com/p/1c7c7d1bba33 MyBatis MyBatis作为一个轻量的SQL映射框架,确实很简单,但是知识点挺多,实际使用中还是会有时想不起来某个标签该怎么写,所以整理了这篇文章,以备查询。由于MyBatis如此简单,使得这一篇文章基本把实际使用中常碰到的事情都涵盖了,包括: MyBatis中的一些概念 MyBatis包含的内容 SQL映射 动态SQL 一、 MyBatis中的一些概念 MyBatis的架构 1. MyBatis 是个什么东西 在使用MyBatis的项目里,日志中往往会出现很多拼接SQL语句的log,这其实说明了MyBatis底层还是使用JDBC来实现的。在JDBC的基础上,为了性能考虑,所有的语句都是基于 SqlSession 。顾名思义,维护这个类的实例其实就是维护了一个对于某个数据库的连接的会话,在这个会话里可以有缓存啊什么之类的。 2. mapper 接口是怎么映射成SQL语句的 目前多数开发者还是会使用XML来进行MyBatis的配置,包括MyBatis的核心配置和SQL映射配置。其实和注解一样,XML本身只不过是一个元数据的载体,最终起作用的还是MyBatis的核心类。其中有这样几个比较重要的: SqlSessionFactoryBuilder ,用来创建

2020年,MyBatis常见面试题总结

空扰寡人 提交于 2020-02-26 04:49:49
Mybatis 技术内幕系列博客,从原理和源码角度,介绍了其内部实现细节,无论是写的好与不好,我确实是用心写了,由于并不是介绍如何使用 Mybatis 的文章,所以,一些参数使用细节略掉了,我们的目标是介绍 Mybatis 的技术架构和重要组成部分,以及基本运行原理。 博客写的很辛苦,但是写出来却不一定好看,所谓开始很兴奋,过程很痛苦,结束很遗憾。要求不高,只要读者能从系列博客中,学习到一点其他博客所没有的技术点,作为作者,我就很欣慰了,我也读别人写的博客,通常对自己当前研究的技术,是很有帮助的。 尽管还有很多可写的内容,但是,我认为再写下去已经没有意义,任何其他小的功能点,都是在已经介绍的基本框架和基本原理下运行的,只有结束,才能有新的开始。写博客也积攒了一些经验,源码多了感觉就是复制黏贴,源码少了又觉得是空谈原理,将来再写博客,我希望是“精炼博文”,好读好懂美观读起来又不累,希望自己能再写一部开源分布式框架原理系列博客。 有胆就来,我出几道 Mybatis 面试题,看你能回答上来几道(都是我出的,可不是网上找的)。 1、#{}和${}的区别是什么? 注:这道题是面试官面试我同事的。 答: ${}是 Properties 文件中的变量占位符,它可以用于标签属性值和 sql 内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。 #

Spring+SpringMVC+MyBatis深入学习及搭建(四)——MyBatis输入映射与输出映射(转发同上)

社会主义新天地 提交于 2020-02-26 04:31:59
原地址:http://www.cnblogs.com/shanheyongmu/p/7121556.html 1. 输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型、hashmap、pojo的包装类型。 1.1 #{}与${} #{}实现的是向prepareStatement中的预处理语句设置参数值,sql语句中#{}表示一个占位符即? <select id="findUserById" parameterType="int" resultType="user"> select * from user where id=#{id} </select> 使用占位符#{}可以有效防止sql注入,在使用时不需要关系参数值的类型,mybatis会自动进行java类型和jdbc类型的转换。#{}可以接收简单类型值或pojo属性值,如果parameterType传输单个类型值,#{}括号可以是value或其它名称。 ${}和#{}不同,通过${}可以将parameterType传入的内容拼接在sql中且不进行jdbc类型转换,${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。使用${}不能防止sql注入,但是有时用${}会非常方便,如下例子: <select id=

如何快速上手SQL映射文件的编写

南楼画角 提交于 2020-02-26 01:47:23
在讲之前先说说它的好处:Mybatis真正强大之处就是在于SQL映射语句,也是他的魅力所在。相对于它强大的功能,SQL映射文件的配置却非常简单。简单的对比一下SQL映射配置和JDBC代码,发现使用SQL映射文件配置可减少50%以上的代码量。并且MyBatis专注于SQL,对于开发人员来说,也可极大限度地进行SQL调优,以保证性能。 关于SQL映射文件的几个顶级元素配置: 顶级元素配置 mapper:映射文件的根元素节点,只有一个属性namespace(命名空间),作用如下: 用于区分不同的mapper,全局唯一 绑定DAO接口,即面向接口编程。当namespace绑定某一接口之后,可以不用写该接口的实现类, MyBatis会通过接口的完全限定名查找到对应的mapper配置来执行SQL语句,因此namespace的命名必须要跟接口同名 cache:配置给定命名空间的缓存 cache-ref:从其他命名空间引用缓存配置 resultMap:用来描述数据库结果集和对象的对应关系 sql:可以重用的SQL块,也可以被其他语句引用 insert:映射插入语句 update:映射更新语句 delete:映射删除语句 select:映射查询语句 使用select完成单条件查询编写Mapper映射文件 <!--根据用户名查询用户列表(模糊查询)--> <select id=

JPA的多表设计

拟墨画扇 提交于 2020-02-23 13:31:44
表之间关系的划分 数据库中多表之间存在着三种关系,如图所示。 从图可以看出,系统设计的三种实体关系分别为:多对多、一对多和一对一关系 。注意:一对多关系可以看为两种: 即一对多,多对一。所以说四种更精确。 明确: 我们今天只涉及实际开发中常用的关联关系,一对多和多对多。而一对一的情况,在实际开发中几乎不用。 1 在 JPA 框架中表关系的分析步骤 在实际开发中,我们数据库的表难免会有相互的关联关系,在操作表的时候就有可能会涉及到多张表的操作。而在这种实现了 ORM 思想的框架中(如 JPA ),可以让我们通过操作实体类就实现对数据 库表的操作。所以今天我们的学习重点是:掌握配置实体之间的关联关系。 第一步:首先确定两张表之间的关系。 如果关系确定错了,后面做的所有操作就都不可能正确。 第二步:在数据库中实现两张表的关系 第三步:在实体类中描述出两个实体的关系 第四步:配置出实体类和数据库表的关系映射(重点) 2 JPA 中的一对多 2.1 示例分析 我们采用的示例为客户和联系人。 客户:指的是一家公司,我们记为 A 。 联系人:指的是 A 公司中的员工。 在不考虑兼职的情况下,公司和员工的关系即为一对多。 2.2 表关系建立 在一对多关系中,我们习惯把一的一方称之为主表,把多的一方称之为从表。在数据库中建立一对多的关系,需要使用数据库的外键约束。 什么是外键? 指的是从表中有一列

mybatis和hibernate的特点

本秂侑毒 提交于 2020-02-23 07:28:59
第一方面:开发速度的对比 就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Mybatis还是首先要先理解好Hibernate。 比起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项目需求去考虑究竟哪一个更适合项目开发,比如:一个项目中用到的复杂查询基本没有,就是简单的增删改查,这样选择hibernate效率就很快了,因为基本的sql语句已经被封装好了,根本不需要你去写sql语句,这就节省了大量的时间,但是对于一个大型项目,复杂语句较多,这样再去选择hibernate就不是一个太好的选择,选择 mybatis 就会加快许多,而且语句的管理也比较方便。 第二方面:开发工作量的对比 Hibernate和MyBatis都有相应的代码生成工具。可以生成简单基本的DAO层方法。针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。 第三方面:sql优化方面 Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗。Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。而Mybatis的SQL是手动编写的

Java 集合 HashMap & HashSet 拾遗

牧云@^-^@ 提交于 2020-02-22 20:35:14
Java 集合 HashMap & HashSet 拾遗 @author ixenos 摘要:HashMap内部结构分析 Java HashMap采用的是冲突链表方式 从上图容易看出,如果 选择合适的散列函数, put() 和 get() 方法可以在常数时间内完成,因为较好的散列减少了散列冲突,使时间主要花在对桶寻址上(数组) ,而较少去遍历桶中的链表。但在对HashMap 进行迭代时,需要遍历整个table以及后面跟的冲突链表 。因此对于迭代比较频繁的场景,不宜将HashMap的初始大小设的过大。 有两个参数可以影响HashMap的性能:初始容量(inital capacity)和负载系数(load factor) 。初始容量指定了初始 table 的大小,负载系数用来指定自动扩容的临界值。当 entry 的数量超过 capacity*load_factor 时,容器将自动扩容并重新哈希。对于插入元素较多的场景,将初始容量设大可以减少重新哈希的次数。 将对向放入到HashMap或HashSet中时,有两个方法需要特别关心: hashCode() 和 equals() 。 hashCode() 方法决定了对象会被放到哪个 bucket 里,当多个对象的哈希值冲突时, equals() 方法决定了这些对象是否是“同一个对象” 。所以,如果要将自定义的对象放入到 HashMap 或

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

倾然丶 夕夏残阳落幕 提交于 2020-02-22 14:48:59
原文: 【5min+】 对象映射只有AutoMapper?试试Mapster 系列介绍 【五分钟的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”: 好吧,优秀的人总是优秀😭。还是回到今天的正文,对象映射工具。当然