Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day11】 —— MyBatis1

市面上主流ORM框架:

EJB:重量级、高花费的ORM技术,支持JPA,尤其是EJB3低侵入式 的设·计,增加了Annotation

Hibernate:开源,支持JPA ,被选作JBoss的持久层解决方案

iBatis:”SQL Mapping”框架,Apache软件基金组织的子项目,后 转Google Code旗下,ibatis3.x正式更名为Mybatis

Spring Data JPA:Spring框架中的子模块

TopLink:Oracle公司的产品

Open JPA:Apache软件基金组织的开源项目

追问1:大家都在用Mybatis,Mybatis都有哪些优势?

  • Mybatis入门简单;在使用上,对于熟悉编写SQL的同学来说,基本上是即学即用。

  • Mybatis对jdbc的抽象封装程度更高,spring jdbc要想实现的细节很多,例如Mybatis封装了更多的对象映射。

  • 支持注解,面对接口开发,效率高,分分钟解决一个sql。

  • 对于复杂的SQL,springJDBC编写麻烦,动态SQL语句设计也麻烦,相比之下,Mybatis更加灵活且人性化。

  • mybatis的高度封装,使得程序员可专注与业务层,开发效率高。所以选择mybatis的开发公司多。


在这里插入图片描述

课间休息,又双叒叕来秀一下来自咱们群里同学的搬砖工地,坐标:济南

作者:空白


面试题2:相比较Hibernate与Mybatis,你有哪些看法?

================================================================================================

正经回答:


Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。

Hibernate和MyBatis都支持JDBC和JTA事务处理。

Mybatis优势

  • MyBatis可以进行更为细致的SQL优化,可以减少查询字段。

  • MyBatis容易掌握,而Hibernate门槛较高。

Hibernate优势

  • Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。

  • Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。

  • Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。

  • Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。

在这里插入图片描述

摘自某乎上的经典总结:

Hibernate

  • Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。

  • Hibernate的缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行。

MyBatis

  • MyBatis入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。

  • MyBatis的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。

深入追问:


追问1:Hibernate与Mybatis 的缓存机制都有哪些区别?

相同点

Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为。

不同点

Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的表-对象映射中配置是那种缓存。

MyBatis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。

两者比较:

因为Hibernate对查询对象有着良好的管理机制,用户无需关心SQL。所以在使用二级缓存时如果出现脏数据,系统会报出错误并提示。

而MyBatis在这一方面,使用二级缓存时需要特别小心。如果不能完全确定数据更新操作的波及范围,避免Cache的盲目使用。否则,脏数据的出现会给系统的正常运行带来很大的隐患。


在这里插入图片描述

香港 九龙,又一个灯火通明的夜。

路漫漫长夜,夜夜夜漫长。


面试题3:Mybatis中的#{}和${}有哪些区别

=========================================================================================

正经回答:


– #{}

select id, username, password, role

from user

where username = #{username}

and password = #{password}

– ${}

select id, username, password, role

from user

where username = ${username}

and password = ${password}

  1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。

如:where username=#{username},如果传入的值是111,那么解析成sql时的值为where username=“111”, 如果传入的值是id,则解析成的sql为where username=“id”.

  1. $将传入的数据直接显示生成在sql中。

如:where username=${username},如果传入的值是111,那么解析成sql时的值为where username=111;

那么,如果传入的值是:;drop table user;会怎么样?解析后的sql为:

select id, username, password, role from user where username=;drop table user;

呀,被迫删库跑路?

在这里插入图片描述

  1. #方式能够很大程度防止sql注入,$方式无法防止Sql注入。

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

  3. 一般能用#的就别用$,若不得不使用 “${xxx}” 这样的参数,要手工地做好过滤工作,来防止sql注入攻击。

  4. 在MyBatis中,“${xxx}”这样格式的参数会直接参与SQL编译,从而不能避免注入攻击。但涉及到动态表名和列名时,只能使用“${xxx}”这样的参数格式。所以,这样的参数需要我们在代码中手工进行处理来防止注入。

综上,我们在编写MyBatis的映射语句时,尽量采用“#{xxx}”这样的格式。若不得不使用“${xxx}”这样的参数,要手工地做好过滤工作,来防止SQL注入攻击。

深入追问:


追问1:什么是sql注入?

sql注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中(例如,为了转储数据库内容给攻击者)

在这里插入图片描述

说到SQL注入,相信大家都不陌生,这是黑客同学常用的一种攻击方式。攻击者在界面的表单信息或URL上输入一些奇怪的SQL片段(例如“or ‘1’=’1’”这样的语句),有可能入侵参数检验不足的应用程序。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

image

image

其实面试这一块早在第一个说的25大面试专题就全都有的。以上提及的这些全部的面试+学习的各种笔记资料,我这差不多来回搞了三个多月,收集整理真的很不容易,其中还有很多自己的一些知识总结。正是因为很麻烦,所以对以上这些学习复习资料感兴趣
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
望读者们能谨记这一点。

[外链图片转存中…(img-JZUvwbde-1713441882478)]

[外链图片转存中…(img-reGbQG9w-1713441882480)]

其实面试这一块早在第一个说的25大面试专题就全都有的。以上提及的这些全部的面试+学习的各种笔记资料,我这差不多来回搞了三个多月,收集整理真的很不容易,其中还有很多自己的一些知识总结。正是因为很麻烦,所以对以上这些学习复习资料感兴趣
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/555033.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CCF区块链论文录用资讯--ICSE 2024

ICSE是CCF A类会议 (软件工程/系统软件/程序设计语言) 其2024录用了13篇区块链论文 Smart Contract and DeFi Security Tools: Do They Meet the Needs of Practitioners? 智能合约和 DeFi 安全工具:它们满足从业者的需求吗? St…

node和go的列表转树形, 执行速度测试对比

保证数据一致性,先生成4000条json数据到本地,然后分别读取文本执行处理 node代码 node是用midway框架 forNum1:number 0forNum2:number 0//执行测试async index(){// 生成菜单列表// const menuList await this.generateMenuList([], 4000);const men…

多任务学习,在共享层,究竟在共享什么?

在多任务学习中,共享层所共享的主要是网络结构和参数。具体来说,当多个任务在共享层进行参数硬共享时,它们使用的是相同的网络结构(例如三层全连接神经网络),并且这些网络层的权重(weights&…

java新冠病毒密接者跟踪系统(springboot+mysql源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的新冠病毒密接者跟踪系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 新冠病毒密接者跟…

【计算机组成原理】加法器原理及其优化

苏泽 本专栏纯个人笔记作用 用于记录408 学习的笔记记录(敲了两年码实在不习惯手写笔记了) 如果能帮助到大家当然最好 但由于是工作后退下来备考 很多说法和想法都会结合实际开发的思想 可能不是那么的纯粹应试哈 希望大家挑选自己喜欢的口味食用…

机器人的非接触式充电和无线充电有什么区别?

文 | BFT机器人 在日新月异的技术浪潮中,接触式与非接触式无线充电之间的微妙差异变得愈发重要,这如同在纷繁复杂的迷雾中增添了一层难以捉摸的迷离。而今,一些所谓的“无线”充电站纷纷涌入市场,它们自诩为无需线缆束缚的新时代…

FAT16文件系统

FAT16 大端存储:高位字节放在低地址端,低位字节放在高地址端。 小端存储:低位字节放在低地址端,高位字节放在高地址端。 举一个例子,比如数字0x12 34 56 78在内存中的表示形式为: 大端模式: 低地…

2024年软件开发行业的薪资水平在下滑的原因?

下降的原因主要包括: 科技行业竞争加剧:随着科技行业竞争的加剧,企业为了压缩成本,开始降低程序员的薪资水平。 人才供应过剩:在计算机成为热门学科的同时,社会上出现了对IT业泡沫和虚假繁荣的质疑。大量…

【ROS2笔记七】ROS中的参数通信

7.ROS中的参数通信 文章目录 7.ROS中的参数通信7.1使用CLI工具调整参数7.2参数通信之rclcpp实现7.2.1创建节点7.2.2rclcpp参数API Reference ROS2中的参数是由键值对组成的,参数可以实现动态调整。 7.1使用CLI工具调整参数 启动turtlesim功能包的环境 ros2 run …

java算法day56 | 动态规划part15 ● 392.判断子序列 ● 115.不同的子序列

392.判断子序列 动规五部曲: 确定dp数组(dp table)以及下标的含义 dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]。确定递推公式 在确定递推公式的时候,…

第21天:信息打点-公众号服务Github监控供应链网盘泄漏证书图标邮箱资产

第二十一天 一、开发泄漏-Github监控 1.短期查看 1.密码搜索 根据攻击目标的域名在GitHub上进行搜索密码,如果目标网站的文件与搜索到的源码相关,那就可以联想目标网站是否使用这套源码进行开发 原理就是开发者在上传文件的时候忘记更改敏感文件或者…

探索VR数字展厅,对企业未来展示新模式

在数字化浪潮的推动下,企业展示也在经历着一场革命,VR数字展厅正在以一种全新的方式重塑我们的生活和工作空间,不仅重塑了客户的观展体验,也为企业营销打开了新的渠道。 VR数字展厅作为实体展厅的数字化延伸,正以其沉浸…

SpringBoot框架——7.整合MybatisPlus

这篇主要介绍Springboot整合MybatisPlus,另外介绍一个插件JBLSpringbootAppGen,以及一个经常用于测试的基于内存的h2数据库。 Mybatisplus是mybatis的增强工具,和tk-mybatis相似,但功能更强大,可避免重复CRUD语句,先来…

JWT的使用

0、JWT原理 header JWT第一部分是header,header主要包含两个部分,alg指加密类型,可选值为HS256、RSA等等,typJWT为固定值,表示token的类型。 Payload JWT第二部分是payload,payload是token的详细内容,一般包括iss (发行者), exp (过期时间),…

速看!2024中国(厦门)国际康复医疗展览会

2024中国(厦门)国际康复医疗展览会 2024 China (Xiamen) International Rehabilitation Medical Exhibition 时 间:2024年8月13-15日 August 13-15, 2024 地 点:厦门国际会展中心 Xiamen International Conference & Exh…

分布式调度器timer和spring task

1. Timer(了解) 一、Timer使用方式 Task1 public class Task1 extends TimerTask {Overridepublic void run(){System.out.println("com.aware.Task run");} } Task2 public class Task2 extends TimerTask {Overridepublic void run(){…

外包干了18天,技术倒退明显

先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能…

【研发管理】产品经理知识体系-产品创新管理

导读: 产品创新管理对企业的发展具有深远的影响,它不仅是企业保持竞争优势的关键,也是推动企业持续稳定发展的重要动力。因此,企业应高度重视产品创新管理,并采取有效的策略和方法来推动产品创新活动的开展。对于产品经…

开关原理(验证码开关、IP开关)

开关原理(验证码开关) 我们的项目具有验证码功能,旧版不支持关闭,新版已经支持关闭了。 我们打开页面“参数管理”,所谓参数管理,就是在系统运行起来的时候,可以动态修改一些值,这些…

java体育馆使用预约平台的设计与实现(springboot+mysql源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的体育馆使用预约平台。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 体育馆使用预约平台的…