开发3年入职饿了么P6,全靠这份MyBatis学习笔记了

news2024/10/3 4:35:02

前言

相信大部分程序员工作中都有接触过MyBatis,那么它到底重不重要呢?答案是肯定的呀!

互联网公司基本都是用Mybatis做为持久层框架的,所以,Mybatis是一定要学的!!!

不管是在工作中还是面试中都会牵扯到Mybatis。

但是,你对它了解吗?了解多少呢?有多了解?工作遇到能解决吗?面试问到能回答上来吗?

废话不多少,让我们一起来看看Mybatis的神秘之处吧~

一、MyBatis 是什么?

MyBatis的前身是 iBatis,iBatis是Apache软件基金会下的一个开源项目。2010年该项目从Apache基金会迁出,并改名为MyBatis。同期,iBatis停止维护。MyBatis是一种半自动化的Java持久层框架(persistenceframework),其通过注解或XML的方式将对象和SQL关联起来。之所以说它是半自动的,是因为和Hibernate等一些可自动生成SQL的ORM(ObjectRelationalMapping)框架相比,使用MyBatis需要用户自行维护SQL。维护SQL的工作比较繁琐,但也有好处。比如我们可控制SQL逻辑,可对其进行优化,以提高效率。

二、Mybatis的优点

基于sql语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,sql写在xml 里,解除sql与程序代码的耦合,便于统一管理;提供xml标签,支持编写动态sql语句,并可用。与jdbc相比,减少了50%以上的代码量,消除 jdbc大量冗余的代码,不需要手动开关连接;很好的与各种数据库兼容(因为 mybatis 使用jdbc来连接数据库,所以只要jdbc支持的数据库Mybatis都支持)。能够与spring很好的集成;提供映射标签,支持对象与数据库的orm字段关系映射;提供对象关系映射标签,支持对象关系组件维护。

三、为什么要使⽤ MyBatis

1.1我们在使用 Java 程序访问数据库时,有多种可选方案。

比如我们可通过编写最原始的JDBC 代码访问数据库,或是通过Spring提供的JdbcTemplate访问数据库。除此之外,我们还可以选择Hibernate,亦或是本书的主角MyBatis 等。在有多个可选项的情况下,我们为什么选择MyBatis呢?要回答这个问题,我们需要将MyBatis与这几种框架对比一下,高下立判。当然,技术之间一般没有高下之分。从应用场景的角度来说,符合应用场景需求的技术才是合适的选择。接下来我们通过写代码的方式,来对比这几种数据库访问技术的优缺点,并在最后说明MyBatis的适用场景。这里先把本节所用到的一些公共类和配置贴出来,后面但凡用到这些类和配置的地方,大家可以到这里进行查看。如下:

public class Article {
private Integer id;
private String title;
private String author;
private String content;
private Date createTime;
// 省略 gettertter 和 toString
}

数据库相关配置放在了jdbc.properties 文件中,详细内容如下:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/myblog?useUnicode=true ……
jdbc.username=root
jdbc.password=****

表记录如下:

1.2.使⽤MyBatis访问数据库

前面说过,MyBatis是一种半自动化的Java持久层框架,需要用户自行维护 SQL。这里,我们把SQL放在 XML 中,文件名称为ArticleMapper.xml。如下:

 <mapper namespace="xyz.coolblog.chapter1.dao.ArticleDao">
       <select id="findByAuthorAndCreateTime" resultType="Article">
               SELECT
                      `id`, `title`, `author`, `content`, `create_time`
               FROM
                      `article`
               WHERE
                      `author` = #{author} AND `create_time` > #{createTime}
     <lect>
</mapper>

上面的SQL用于从article表中查询出某个作者从某个时候到现在所写的文章记录。在MyBatis中 ,SQL映射文件需要与数据访问接口对应起来,比如上面的配置对应
xyz.coolblog.dao.ArticleDao接口,这个接口的定义如下:

public interface ArticleDao {
       List<Article> findByAuthorAndCreateTime(@Param("author") String author, 
             @Param("createTime") String createTime);
}

要想让MyBatis跑起来,还需要进行一些配置。比如配置数据源、配置SQL映射文件的位置信息等。本节所使用到的配置如下:

<configuration>
        <properties resource="jdbc.properties"/>
        <typeAliases>
                 <typeAlias alias="Article"
                           type="xyz.coolblog.chapter1.model.ArticleDO"/>
                 <typeAlias alias="Author" type="xyz.coolblog.model.AuthorDO"/>
<peAliases>
<environments default="development">
          <environment id="development">
                 <transactionManager type="JDBC"/>
                 <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/>
                        <property name="url" value="${jdbc.url}"/>
                        <property name="username" value="${jdbc.username}"/>
                       <property name="password" value="${jdbc.password}"/>
                      </dataSource>
                     </environment>
               </environments>
           <mappers>
                    <mapper resource="chapter1/mapper/ArticleMapper.xml"/>
           </mappers>
</configuration>

总结

下面这个图是Mybatis的一个思维导图知识点总结,大家需要可以自取。

一些常见Mybatis面试题都整理成了PDF文档(含答案)

1.# {}和${}的区别?

2.Mybatis都有哪些Executor执行器?它们之间的区别是什么?

3.Mybatis中如何指定使用哪一种Executor执行器?

4.Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?

5.Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?

6.模糊查询like语句该怎么写?

7.分页方式?

8.pageHelper原理?

9.模糊查询like语句该怎么写?

10.通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?

11.Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?

12.Mybatis 中一级缓存与二级缓存的区别?

13.MyBatis中所有标签?

14.简述Mybatis的插件运行原理,以及如何编写一个插件。

15.如何执行批量插入?

16.如何获取自动生成的(主)键值?

17.在mapper中如何传递多个参数?

18.缓存类介绍

19.植⼊插件逻辑

20.实现⼀个分页插件

.........

Mybatis面试知识点脑图展示

Mybatis面试知识点脑图展示

以上提到的面试题解析Mybatis文档,以及Mybatis知识点思维导图都可以分享给小伙伴们

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Python计算机毕业设计Django公共台账管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

PMP项目管理中的各种图

直方图 柱状图,条形图,用来统计 帕累托图 就是把直方图进行排序 散点图 分析2个元素之间的相关性 矩阵图 在行列交叉的位置展示因素、原因和目标之间的关系强弱

10 个你必须要知道的重要JavaScript 数组方法

数组方法在 JavaScript 中是必不可少的&#xff0c;数组方法有很多。对于忙碌的初学者&#xff0c;我选择了 10 种最常见的数组方法&#xff0c;你必须学习它们&#xff0c;这些可以帮助你提升学习效率&#xff0c;节省时间。 为了便于理解&#xff0c;我为每个数组方法提供了…

不强迫登录!Apipost用着真爽!

Apipost在上个版本推出了Apipost网页版&#xff0c;用户无需下载软件在官网就可以直接体验到Apipost的很多强大功能。 Apipost 7版本在使用网页版时的登录问题上&#xff0c;让用户在无需下载的基础上&#xff0c;更无需登录&#xff0c;就可以便捷使用Apipost更多的功能&…

Promise期约函数的实现

前言 Promise也叫期约函数,是ES6中新增的特性,是解决异步编程的一种方案,取代回调函数避免回调地狱。 const p new Promise((resolve,reject)>{resolve(1); });// 链式调用 p.then(res > Promise.resolve(res 2)).then(res > Promise.resolve(res 3)).then(res &…

嵌入式系统硬件概述

文章目录嵌入式系统硬件平台(1) 嵌入式处理器的分类(2) 嵌入式微处理器MIPS处理器PowerPC处理器ARM处理器ARM发展历史ARM公司介绍ARM市场份额嵌入式微控制器&#xff08;MCU&#xff09;数字信号处理器&#xff08;DSP&#xff09;嵌入式片上系统&#xff08;SoC&#xff09;嵌…

【uni-app】总结uni-app订单支付和打包发布

前言 总结uni-app订单支付和打包发布 1- 支付 1.1 app的支付 1.1.1 准备工作 支付厂商 获取id 去微信支付平台接入微信支付 支付宝 打包时候 去mainifest.json文件下&#xff0c;找到 app模块配置 &#xff0c;勾选payment支付 1.1.2 代码 获取支付厂商 uni.getProvide() u…

Spring Boot 程序优化的 14 个小妙招!

1.定义配置文件信息 有时候我们为了统一管理会把一些变量放到yml配置文件中 例如 图片 用 ConfigurationProperties 代替Value 使用方法 定义对应字段的实体 Data // 指定前缀 ConfigurationProperties(prefix "developer") Component public class Developer…

数据看板是什么?

一 数据看板定义 数据看板是数据可视化的载体。数据看板是一个可视化工具&#xff0c;通过合理的页面布局、效果设计&#xff0c;将可视化数据更直观、更形象的展现出来&#xff1b;数据看板是一个交流工具&#xff0c;通过数据公开和呈现&#xff0c;公司内部能够共享有效信息…

大二学生基于Html+Css+javascript的网页制作——动漫设计公司响应式网站模板 (10个页面)

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

JAVAWEB_实验二 JSP 的内置对象

文章目录一、Part 1 JSP 的内置对象一、实验目的二、实验要求三、实验内容二、Part 2 JSP 的内置对象一、实验目的二、实验要求三、实验内容思考&#xff1a;页面重定向有哪些方式&#xff1f;区别时什么&#xff1f;一、Part 1 JSP 的内置对象 一、实验目的 通过编程和上机实…

算法刷题打卡第33天:香槟塔

香槟塔 难度&#xff1a;中等 我们把玻璃杯摆成金字塔的形状&#xff0c;其中第一层有 1 个玻璃杯&#xff0c;第二层有 2 个&#xff0c;依次类推到第 100 层&#xff0c;每个玻璃杯 (250ml) 将盛有香槟。 从顶层的第一个玻璃杯开始倾倒一些香槟&#xff0c;当顶层的杯子满…

【JavaWeb】Servlet系列 --- 使用纯Servlet做一个单表的CRUD操作(oa小项目,超详细笔记)

使用纯Servlet做一个单表的CRUD操作实现步骤第一步&#xff1a;准备一张数据库表&#xff08;sql脚本/可视化工具&#xff09;第二步&#xff1a;准备一套HTML页面&#xff08;页面原型&#xff09;【前端开发工具使用vscode / IDEA】第三步&#xff1a;分析我们这个系统包括哪…

分布式共识协议 Raft 是如何工作的?

Raft 解决的问题 提供一种共识算法&#xff08;分布式一致性算法&#xff09;。 Paxos是早先的一个分布式共识算法&#xff0c;Paxos 逻辑复杂而难以理解和实现。相比早先的 Paxos&#xff0c; Raft 提供一个容易理解和实现的共识算法&#xff0c;在很多的系统比如 etcd, ozon…

力扣hot100——第3天:11盛最多水的容器、21合并两个有序链表、22括号生成

文章目录1.11盛最多水的容器1.1.题目1.2.解答1.2.1.题解1.2.2.自己对参考题解的进一步解释2.21合并两个有序链表2.1.题目2.2.题解3.22括号生成3.1.题目3.2.题解1.11盛最多水的容器 参考&#xff1a;力扣题目链接&#xff1b;题解 1.1.题目 1.2.解答 1.2.1.题解 这道题目可以…

GIS工具maptalks开发手册(一)——hello world初始化

GIS工具maptalks开发手册(一)——hello world初始化 为何使用maptalks&#xff1f; ​ Maptalks项目是一个HTML5的地图引擎, 基于原生ES6、Javascript开发的二三维一体化地图。 通过二维地图的旋转、倾斜增加三维视角&#xff0c;通过插件化设计, 能与其他图形库echarts、d3.…

微信小程序实战十四:小程序及APP端实现客服功能

文章目录 1.效果预览2.小程序后台添加客服3.小程序代码中集成客服4.APP中添加客服5.企业微信登陆6.获取企业ID值7.设置多客服说明:项目用uni开发的,有小程序版本和APP版本,最开始项目中集成了第三方美洽的客服,2个客服一年收3600,老哥咨询我是否有稍微优惠点的方案,老哥带…

QuEra将研发可重构中性原子量子计算机

&#xff08;图片来源&#xff1a;网络&#xff09; 上个月&#xff0c;借助Amazon Braket&#xff0c;QuEra Computing开始提供对其中性原子量子系统Aquila的访问, Aquila具有256个量子比特。如今&#xff0c;量子公司的数量与日俱增&#xff0c;QuEra是其中之一&#xff0c;它…

java httpclient的digest验证(可恨,找遍全网没有靠谱的,不是少包就是少文件。含泪整理o(╥﹏╥)o~~~~)

背景&#xff1a;调用第三方接口&#xff0c;使用的是digest auth鉴权方式&#xff0c; basic auth和digest auth比较&#xff1a; basic认证是把用户和密码通过base64加密后发送给服务器进行验证。 Basic认证过程简单&#xff0c;每次请求都有发送密码。安全性较低。 为了解决…

[附源码]JAVA毕业设计衡师社团管理系统(系统+LW)

[附源码]JAVA毕业设计衡师社团管理系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…