数据库|面试题——Mybatis
文章目录
- 前言
- 二、文章正文
-
- 1.Mybatis简介以及优缺点?
- 2.MyBatis 与 Hibernate 有哪些不同?
- 3.#{}和${}区别?
- 4.如何实现批量插入、删除、修改操作?
- 5、有哪些动态sql?他们的作用是什么?
- 6、在xml映射文件中,有哪些标签?
- 7、如何实现关联查询?
- 8、简述下Mybtis的缓存?
- 9、Mybatis 是如何将 sql 执行结果封装为目标对象并返回的?都有哪些映射形式?
- 10、使用Mybatis的基本过程?
- 总结
前言 提示:还是建议大家先开下目录,自我检查一番
提示:以下是本篇文章正文内容
二、文章正文 1.Mybatis简介以及优缺点? Mybatis是一种优秀的持久层框架,它内部封装了JDBC,这使得开发过程中只需要关注SQL语句本身即可,灵活性高。它支持自定义sql、存储过程和高级映射,开发可以通过xml或者注解进行编写SQL语句
优点:
- sql语句写在XML文件当中,将代码和sql语句实现了耦合的解除;
- 方便管理,可重用性高;
- 省略了JDBC连接和关闭,简化了开发;
- 提供了多种标签,支持动态SQL;
- 支持对象和数据库中表字段的关系映射。
- 即使再简单的接口都需要在xml中编写sql语句或者使用注解编写sql;
- sql语句依赖与数据库,不能随意的更换数据库。
扩展:Mybatis-Plus 这是对Mybatis的一种扩展,官方说法是对Mybatis的增强,简单的单表增删改查省略了sql语句的编写,并且凡是正确的Mybatis写法使用MYBatis-Plus都可以执行成功。感兴趣的朋友可以自行百度。
- Mybatis是一个半ORM框架,需要开发人员自己编写sql语句。
- Mybatis直接编写原生的SQL语句,可以控制sql执行性能,灵活性高。
- Hibernate提供了很多API,对于关系模型要求高的软件开发来说可以提高开发效率。
#{}可以有效地防止SQL注入。
4.如何实现批量插入、删除、修改操作? Myabtis 提供了一个标签foreach
insert /delete/update ...
#{item.id, jdbcType=NUMERIC}
item:集合中元素迭代时的别名,该参数为必选。
index:在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选
open:foreach代码的开始符号,一般是(和close=")“合用。常用在in(),values()时。该参数可选
separator:元素之间的分隔符,例如在in()的时候,separator=”,“会自动在元素中间用“,“隔开,避免手动输入逗号导致sql错误,如in(1,2,)这样。该参数可选。
close: foreach代码的关闭符号,一般是)和open=”("合用。常用在in(),values()时。该参数可选。
collection: 要做foreach的对象,作为入参时,List对象默认用"list"代替作为键,数组对象有"array"代替作为键,Map对象没有默认的键。当然在作为入参时可以使用@Param(“keyName”)来设置键,设置keyName后,list,array将会失效。 除了入参这种情况外,还有一种作为参数对象的某个字段的时候。举个例子:如果User有属性List ids。入参是User对象,那么这个collection = “ids”.如果User有属性Ids ids; 其中Ids是个对象,Ids有个属性List id; 入参是User对象,那么collection = “ids.id”
5、有哪些动态sql?他们的作用是什么? if
choose (when, otherwise)
trim (where, set)
foreach
if :根据条件判断,是where后的一部分;
AND title like #{title}
choose:类似于Java中的Switch语句
AND title like #{title}
AND author_name like #{author.name}
AND featured = 1
通过自定义 trim 元素来定制 where 元素的功能。比如,和 where 元素等价的自定义 trim 元素为:
...
set 元素可以用于动态包含需要更新的列,忽略其它不更新的列。比如:
update Author
username=#{username},
password=#{password},
email=#{email},
bio=#{bio}
where id=#{id}
动态 SQL 的另一个常见使用场景是对集合进行遍历(尤其是在构建 IN 条件语句的时候)。比如:
6、在xml映射文件中,有哪些标签? Mybatis 提供了 9 种动态 sql 标签:
trim
where
set
foreach
if
choose
when
otherwise
bind
7、如何实现关联查询? Myabtis 提供了标签,在定义ResultMap时可以通过标签实现关联查询
8、简述下Mybtis的缓存? Mybatis 默认是开启一级缓存的,一级缓存的存储作用域实在Session中,当Session刷新或者关闭后,缓存将会被清空;
二级缓存默认不开启,二级缓存存储作用域是他的命名空间中,使用时可以在配置文件中那个通过
mybatis.configuration.cache-enabled=true开启,需要注意,使用二级缓存时属性类都需要实现序列化。
9、Mybatis 是如何将 sql 执行结果封装为目标对象并返回的?都有哪些映射形式?
- 在xml文件中使用 < ResultMap> 标签定义列名和对象属性名之间的映射关系;
- 在编写sql语句时使用别名
- 首先编写实体类
- 添加相应的Mybatis依赖,在配置文件中加入Mybatis相关的配置
- 编写对应的DAO层或者mapper层
- 编写对应的XMl文件或者在DAO或者mapper上编写SQL语句。
- 此时就可以编写测试方法进行测试了
简单的Mybatis配置
mybatis:
mapper-locations: classpath:mapping/*Mapper.xml #这里是指定Mapper文件的位置
type-aliases-package: com.example.entity #指定实体类的位置
总结 【数据库|面试题——Mybatis】以上就是今天要讲的关于Mybatis方面的一些内容,本文大体罗列了一些常见的Mybatis方面的问题,不足之处欢迎指正。
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- PMSJ寻平面设计师之现代(Hyundai)
- 杜月笙的口才
- Linux下面如何查看tomcat已经使用多少线程
- 皮夹克
- 解读《摩根集团》(1)
- 绘本与写作
- 蓝桥杯试题
- 数据库设计与优化
- 麦田社群