![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
mybatis面试
文章平均质量分 52
mybatis面试
一户董
专注后端技术分享!!!
展开
-
mybatis面试之批量插入
本文看下通过mybatis如何来批量插入数据。原创 2023-03-30 14:23:26 · 562 阅读 · 0 评论 -
mybatis面试之和hibernate的区别
自动化程度mybatis半自动化,hibernate全自动化。DB移植性mybatis移植性弱(可以通过指定databseId来设置数据库类型,但是需要手动写多份statement)。hibernate框架自动兼容不同数据库,移植性强。学习成本mybaits用法接近JDBC,学习成本低,上手快。hibernate因为是全自动化,需要熟悉其ORM对象关系映射的要求,学习成本高,上手慢,但是真的精通之后,开发效率要比mybaits高。优化sql语句mybaits因为本身就是通过sql语句方式来查.原创 2021-10-07 14:17:36 · 79 阅读 · 0 评论 -
mybatis面试之插件分析
mybatis打开会话后执行一个sql语句时经过如下步骤:1:SqlSession调用Executor执行器2:Executor执行器调用StatementHandler(使用ParameterHandler封装参数)3:StatmentHandler执行底层的JDBC Statement获取ResultSet4:ResultSetHandler处理ResultSet为用户期望的结果以上的过程如下图:在这个执行过程中,如果是我们想要加入自己的逻辑,比如在执行器调用过程中修改sql语句信息,加原创 2021-10-07 12:07:07 · 94 阅读 · 0 评论 -
mybatis面试之延迟加载的原理分析
延迟加载的场景是,在一对一association,一对多collection,比如如下的对象:public class Person { private int age; private String name; // 孩子们,有一个或者是多个,所以用java.util.List private List<SonOrDaughter> children; ...snip getter setter tostring and so on...}正常的查询是将age,name,以及原创 2021-10-07 09:57:27 · 245 阅读 · 0 评论 -
mybatis面试之一级缓存二级缓存分析
到 https://tech.meituan.com/2018/01/19/mybatis-cache.html “在上文中提到的一级缓存中,其最大的共享范围就是一个SqlSession内部”原创 2021-09-25 20:45:51 · 397 阅读 · 0 评论 -
mybatis面试之批量更新有哪些方式
第一种方式是使用动态sql语句的foreach,本质上就是sql语句的拼接,最终生成诸如insert into xxx values (xxx),(xxx),(xxx)格式的sql语句,但是这种方式容易超过mysql单条sql语句大小,使用的时候需要注意mysql的相关设置。第二种方式是使用BatchExecutor,实践中强烈推荐使用这种方式,这种方式有一个注意的点是需要指定executorType=BATCH,如下:mapper 接口mapper xml...原创 2021-09-25 15:32:06 · 303 阅读 · 0 评论 -
mybatis面试之执行器都有哪些?
执行器一共有4个,分别是SimpleExecutor,ReuseExecutor,BatchExecutor,CachingExecutor,分别看下。SimpleExecutor执行数据库操作前,每次都会新建一个java.sql.statement,然后执行数据库操作。ReuseExecutor在SimpleExecutor的基础上,维护了一个sql->Statement的Map缓存,如果是相同的sql语句会复用java.sql.Statement,因为相同的sql语句,只有参数不同,只需原创 2021-09-25 14:28:24 · 1267 阅读 · 0 评论 -
mybatis面试之传递多个参数的方式
1:使用map这种方式是传递一个map参数,然后在sql语句中通过#{xxx}来引用map中的key,可能代码如下:// 调用方法Map<String, Object> map = new HashMap();map.put("start", start);map.put("end", end);return studentMapper.selectStudents(map);// Mapper 接口List<Student> selectStudents(Map&原创 2021-09-22 18:10:59 · 131 阅读 · 0 评论 -
mybatis面试之是否支持批量获取ID
支持的,因为其底层使用的是JDBC的API,而JDBC是天然支持的,所以mybatis也肯定支持,在JDBC的API中执行Statement#executeBatch方法后,就可以调用Statement#getGeneratedKeys方法获取生成的主键了,可能代码如下:String sql = "INSERT INTO saas_init_bakeups (" + " delete_number, table_name, data, organ_sign,create_us原创 2021-09-22 17:55:28 · 531 阅读 · 0 评论 -
mybatis面试之如何获取生成的主键
这里讨论是基于mysql数据库,其他数据库不是很熟悉,分成两种情况,第一种是数据库生成的自增主键,第二种情况是基于<selectKey>指定生成主键,分别来看下。1:自增主键第一种方式是使用useGeneratedKeys + keyProperty组合的方式,其中userGeneratedKeys代表是告诉mybatis要使用自增生成的主键,keyProperty是告诉mybatis主键字段是哪个,如下:<insert id="insert" parameterType="Pers原创 2021-09-22 17:32:00 · 4882 阅读 · 0 评论 -
mybatis面试之mapper接口原理分析
一般的,我们在使用mybatis操作数据时,只需要定义一个mapper xml,和一个与之对应的Mapper 接口,即可,但是并不需要提供mapper接口的实现类,可以这么做的原因是mybaits基于jdk的动态代理技术为我们的mapper 接口生成了动态代理类,操作的时候调用的也是该动态代理类的方法。在解析全局配置文件过程中,有一个很重要的步骤就是解析mapper标签对应的mapper xml或者是mapper 接口注解类,在解析的过程中会使用接口信息创建MapperProxyFactory类,这是一个原创 2021-09-22 17:01:21 · 1948 阅读 · 0 评论 -
mybatis面试之常见标签
1:数据库操作相关insert,delete,update,select。2:sql相关用于定义sql语句的<sql>标签,用于引入sql定义的<include>标签。3:传入返回对象相关用于定义传入参数的<parameterMap>标签,用于定义返回对象映射的resuleMap标签。4:主键生成相关<selectKye>。5:缓存相关定义二级缓存的<cache>标签,用于引用已定义的二级缓存配置的<cache-ref>原创 2021-09-09 17:01:54 · 140 阅读 · 0 评论 -
mybatis面试之#{}和${}的区别
写在前面其中${}可以用在xml配置文件中,之后通过属性动态替换,比如${driver}会被动态替换为com.mysql.jdbc.Driver,下面我们重点来看使用在mapper statement中的情况。1:区别并非在sql语句中想要使用哪种就使用哪种,而是和statement语句中的statementType属性有关系,该属性有3个值,分别是STATEMENT|PREPARED|CALLABLE(其中CALLABLE是存储过程的情况,这里可忽略),当值是STATEMENT时,此时底层使用的JD原创 2021-09-07 17:36:32 · 175 阅读 · 0 评论 -
mybatis面试系列文章
mybatis面试之编程步骤原创 2021-09-07 11:59:18 · 232 阅读 · 0 评论 -
mybatis面试之编程步骤
1:引入jar可以从这里查看myabtis的tag列表,截至到当前2021-09-07 11:40:48最新版本为3.5.7,如下图:如下是基于maven引入3.3.1版本:<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.1</version></dependency>原创 2021-09-07 11:57:24 · 189 阅读 · 0 评论