ResultMap和ResultType的差别、ParameterMap和parameterType的差别

ResultMap和ResultType: 
两者都是表示查询结果集与java对象之间的一种关系,处理查询结果集,映射到java对象。 
resultMap:表示将查询结果集中的列一一映射到bean对象的各个属性。

ResultMap的使用: 

映射的查询结果集中的列标签可以根据需要灵活变化,并且,在映射关系中,还可以通过typeHandler设置实现查询结果值的类型转换,比如布尔型与0/1的类型转换。 

ResultType:表示的是bean中的对象类,此时可以省略掉resultMap标签的映射,但是必须保证查询结果集中的属性 和 bean对象类中的属性是一一对应的,此时大小写不敏感,但是有限制。

ResultType的使用: 

resultType跟resultMap不能同时存在。

ParameterMap(不推荐使用)和parameterType:

ParameterMap:与resultMap方法类似,表示将查询结果集中列值的类型一一映射到java对象属性的类型上,在开发过程中不推荐这种方式。 

parameterType: 
parameterType直接将查询结果列值类型自动对应到java对象属性类型上,不再配置映射关系一一对应。 

mybatis中的#和$的区别

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".

2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.

3. #方式能够很大程度防止sql注入。 

4.$方式无法防止Sql注入。

5.$方式一般用于传入数据库对象,例如传入表名. 

6.一般能用#的就别用$.

MyBatis排序时使用order by 动态参数时需要注意,用$而不是#

字符串替换

默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用:

ORDER BY ${columnName}

这里MyBatis不会修改或转义字符串。

重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。

JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?

① 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。

解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。

② Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

③ 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

解决: Mybatis自动将java对象映射至sql语句。

④ 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。

解决:Mybatis自动将sql执行结果映射至java对象。

MyBatis与Hibernate有哪些不同?

Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。 
  
    Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。 
  
    Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate开发可以节省很多代码,提高效率。但是Hibernate的缺点是学习门槛高,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要具有很强的经验和能力才行。 
总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。

Mybatis执行批量插入,能返回数据库主键列表吗?

Mybatis在插入单条数据的时候有两种方式返回自增主键:    mybatis3.3.1支持批量插入后返回主键ID,

首先对于支持自增主键的数据库:useGenerateKeys和keyProperty。

不支持生成自增主键的数据库:<selectKey>。

这里主要说下批量插入数据时如何返回主键ID

为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?

答:Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而Mybatis在查询关联对象或关联集合对象时,需要手动编写sql来完成,所以,称之为半自动ORM映射工具。

Mybatis常见面试问题(附答案)相关推荐

  1. 2022最新出炉的软件测试面试宝典附答案

    一.引言 1.1 文档目的 本次文档是为了收集在面试中遇到的一问题与常见的一些答案并不是唯一答案 二.职业规划 2.1 简单的自我介绍下 面试宫,您好,我叫 XXX,来自于 XXXX,目前从事软件测试 ...

  2. JAVA常见面试问题以及答案

    在网上看到的,前一段时间也是在忙面试的事情,感觉总结的挺好的,这两天有时间了花点时间把答案整理出来. 一.Java基础 1. String类为什么是final的. 2. HashMap的源码,实现原理 ...

  3. 深度学习12大常见问题解答(附答案)

    阿尔法狗让深度学习登上了数据科学世界的巅峰.深度学习成为了当今最热门的话题之一,但对于大多数人来说,这是一个陌生而又神秘的学科.很多人认为,深度学习就是包括了大量的数学和统计知识. 本文列举了常见的1 ...

  4. android秋招面试题及答案,2021中国移动秋招面试试题附答案(1)

    [导语] 1.为什么将持续经营作为会计假设?请简述持续经营的意义. >>>查看答案<<< 1.[答题要点] 持续经营是指企业或会计主体的生产经营活动将无限期地延续下 ...

  5. 机器学习与深度学习常见面试问题与答案

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|OpenCV学堂 第2章 数学知识 1.计算下面函数的一 ...

  6. mysql高级查询面试_高级MySQL数据库面试问题 附答案

    因为有大家的支持,我们才能做到现在,感谢你们这一路上对我们的支持.在这篇文章中,我们将主要针对MySQL的实用技巧,讲讲面试中相关的问题. 1. 如何使用SELECT语句找到你正在运行的服务器的版本并 ...

  7. MyBatis 面试题(附答案解析)

    MyBatis的实现逻辑 在 MyBatis 的初始化过程中,会生成一个 Configuration 全局配置对象,里面包含了所有初始化过程中生成对象 根据 Configuration 创建一个 Sq ...

  8. SQL常见面试题目与答案整理

    文章目录 海量数据如何优化SQL 数据库存储位置 MySQL与hive 聚合函数和group by同时使用的字段限制 聚合函数的嵌套使用 海量数据如何优化SQL 根据执行计划(explain)设置合适 ...

  9. 数据库常见面试题目及答案,软件测试面试找工作必看

    目录 1.对数据库SQL2005.ORACLE熟悉吗? 2.能不能设计数据库?如何实现数据库导入与导出的更新 3.如何只显示重复数据,或不显示重复数据 4.什么是数据库的映射 5.写分页有哪些方法,你 ...

最新文章

  1. 博为峰JavaEE技术文章 —— Hibernate 指南(3)Hbm文件
  2. vuex状态管理模式:入门demo(状态管理仓)
  3. 工作30:加入git版本库
  4. 聊天宝解散,多闪、马桶MT还会远吗?
  5. centos php71,CentOS 71编译安装PHP7
  6. Java后台开发入门
  7. 网页切图div+css命名
  8. 哈理工OJ 1147 重生(水DP)
  9. 智能电表无线(NB-IOT/LoRa)红外读表远程抄表器实施方案
  10. crmeb单商户4.4开目录结构 crmeb二开文档 crmeb二开目录结构
  11. opencv识别图片颜色(1)
  12. python中的token是什么
  13. 华三交换机升级的ipe文件_H3C 交换机升级说明
  14. 在Window10系统中安装Pandas并行加速库Modin的流程及效果测试
  15. SVO (1)跑数据集
  16. matlab中乘法“*”和点乘“.*”;除法“/”和点除“./”的联系和区别。
  17. TSF微服务治理实战系列(四)——服务安全
  18. P2P的资金托管方式 参考
  19. 【厚积薄发系列】读书笔记3—《麦肯锡-问题分析与解决技巧》小记
  20. 计算机二级-公共基础考点

热门文章

  1. redis分布式锁的安全性及与zookeeper的对比
  2. 模型转换、压缩、加速工具
  3. 睡前必备神器——倒计时定时关闭手机音乐声音APP
  4. 二叉树、平衡二叉树、红黑树、B-树、B+树、B*树、T树之间的详解和比较
  5. Mac 破解百度云盘限速下载问题
  6. SQL Server 还原数据库
  7. 小福利,带你快速入门sumifs多条件求和函数、设置下拉菜单结合vlookup函数双条件查找数据、excel的切片器(表关联)、数据透视表、数据透视图
  8. 签约沈腾、贾玲,苏宁拼购打造下沉市场“新引擎”
  9. 2021年三季度中国医疗服务行业A股上市企业营收排行榜:国际医学于1月17日起戴帽,简称变更为“ST国医”(附热榜TOP37详单)
  10. NGUI:HUD Text