【mybatis】mybatis面试题

【mybatis】mybatis面试题mybatis的基本工作流程1.读取配置文件,配置文件包含数据库连接信息和Mapper映射文件或者Mapper包路径。2.有了这些信息就能创建SqlSessionFactory,SqlSessionFactory的生命周期是程序级,程序运行的时候建立起来,程序结束的时候消亡3.SqlSessionFactory建立SqlSession,目的执行sql语句,SqlSession是过程级,…

大家好,又见面了,我是你们的朋友全栈君。

mybatis的基本工作流程

1.读取配置文件,配置文件包含数据库连接信息和Mapper映射文件或者Mapper包路径。

2.有了这些信息就能创建SqlSessionFactory,SqlSessionFactory的生命周期是程序级,程序运行的时候建立起来,程序结束的时候消亡

3.SqlSessionFactory建立SqlSession,目的执行sql语句,SqlSession是过程级,一个方法中建立,方法结束应该关闭

4.当用户使用mapper.xml文件中配置的的方法时,mybatis首先会解析sql动态标签为对应数据库sql语句的形式,并将其封装进MapperStatement对象,然后通过executor将sql注入数据库执行,并返回结果。

5.将返回的结果通过映射,包装成java对象。

什么是MyBatis的接口绑定,有什么好处  

接口映射就是在IBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,我们通过直接调用接口方法 例如:

UserMapper  userMapper=sqlSession.getMapper  (UserMapper.class) 就可以,这样比起原来了SqlSession提供的方法,例如List<Country> countryList = sqlSession.selectList(“selectAll”);我们可以有更加灵活的选择和设置.。

注意:(1)Mapper .xml文件的namespace属性必须配置为接口的全限定名称,接口方法名与Mapper.xml中的<select><insert>id值必须相同,且接口方法的返回值类型必须与Mapper.xml配置的resultType一致,这里后者起到决定作用。

(2)select查询通过在Mapper.xml中配置ResultMap标签,将查询结果的列名与字段名对应。

insert语句通过#{属性名}从接口参数获取值放到sql语句中。

(3)Mapper.xml接口绑定本质是动态代理。

接口绑定有几种实现方式,分别是怎么实现的?        

接口绑定有两种实现方式,

(1)注解绑定:就是在接口的方法上面@Select@Update等注解里面包含Sql语句来绑定

(2)另外一种就是通过xml里面写SQL来绑定,在这种情况下,要指定xml映射文件里面的namespace必须为接口的全路径名.

什么情况下用注解绑定,什么情况下用xml绑定        

当Sql语句比较简单时候,用注解绑定,
当SQL语句比较复杂时候,用xml绑定,一般用xml绑定的比较多

MyBatis实现一对一有几种方式?具体怎么操作的

有联合查询和嵌套查询

(1)联合查询是几个表联合查询,只查询一次,

查询结果有三种处理方式:第一种自动映射返回结果为resultType、

第二种配置resultMap,返回结果配置为存在的resultMap,这个resultMap中的Property都要加一个role.Property,表示用户对象中的role对象的property,每一个属性都要加role.很繁琐,association标签就是解决这个问题的。

第三种通过在resultMap里面配置association节点配置一对一的类就可以完成;

【mybatis】mybatis面试题

注意:mybaits支持resultMap映射继承。<ResultMap id=”userRoleMap” extends=”userMap”>
(2)嵌套查询是先查一个表,根据这个表里面的结果的外键id,去再另外一个表里面查询数据,也是通过association配置,但另外一个表的查询通过select属性配置 

【mybatis】mybatis面试题

MyBatis实现一对多有几种方式,怎么操作的

有联合查询和嵌套查询

(1)联合查询是几个表联合查询,只查询一次,通过在resultMap里面配置collection标签配置一对多的类就可以完成;
(2)嵌套查询是先查一个表,根据这个表里面结果的外键id,去再另外一个表里面查询数据,也是通过配置collection,但另外一个表查询通过select节点配置

MyBatis里面的动态Sql是怎么设定的?用什么语法?

MyBatis里面的动态Sql一般是通过if节点来实现,通过OGNL语法来判断,但是如果要写的完整,必须配合where,trim节点,

choose标签 choose when otherwise标签,一个choose中至少有一个when,0或1个otherwise,如果when满足就执行,全不满足就执行otherwise。

【mybatis】mybatis面试题

注意where1=1必须添加,防止where关键字后面没有语句.

where标签是判断包含节点有内容就插入where,如果where后面的字符串是以AND和OR开头的,就将AND和OR提出

【mybatis】mybatis面试题

当if条件都不满足,where元素中没有内容,也就不会出现choose标签那种错误。

set标签更新的时候用:如果该标签包含的元素中有返回值,就插入一个set;如果set后面的字符串是以逗号结尾的,就将这个逗号剔除。

【mybatis】mybatis面试题

注意set标签用法中,SQL后面的逗号没有问题了,但是如果set元素中没有内容,照样会出现SQL错误,所以为了避免错误产生,类似id=#{id}这样必然存在的赋值仍然有保留的必要。

讲下MyBatis的缓存

MyBatis的缓存分为一级缓存和二级缓存,
一级缓存放在session里面,默认就有,二级缓存放在它的命名空间里,默认是打开的,
使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置<cache/>
 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140655.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • kafuka 的安装以及基本使用

    kafuka 的安装以及基本使用最近因为项目需要所以需要使用kafka所以自己最近也实践了下。下面为大家简单介绍下在windows下的安装使用因为它是基于zookepper的使用也要安装zookepper1.安装ZookeeperKafka的运行依赖于Zookeeper,所以在运行Kafka之前我们需要安装并运行Zookeeper1.1下载安装文件:http://mirror.bit.edu.cn/apache…

    2022年6月11日
    45
  • Pytorch中DataLoader的使用[通俗易懂]

    Pytorch中DataLoader的使用[通俗易懂]前言最近开始接触pytorch,从跑别人写好的代码开始,今天需要把输入数据根据每个batch的最长输入数据,填充到一样的长度(之前是将所有的数据直接填充到一样的长度再输入)。刚开始是想偷懒,没有去认真了解输入的机制,结果一直报错…还是要认真学习呀!加载数据pytorch中加载数据的顺序是:①创建一个dataset对象②创建一个dataloader对象③循环dataloader对象,将data,label拿到模型中去训练dataset你需要自己定义一个class,里面至少包含3个函数:①_

    2022年5月1日
    188
  • 基于stm32四轮小车简易PID控制

    基于stm32四轮小车简易PID控制看前需知:作者本人使用的是四个普通的TT电机加编码器+增量式PID,适合PID初学者,但是需要对PID和增量式PID有一定的认知,本篇未有详细介绍,以代码应用为主,大佬勿喷。文章目录一、粗谈PID?二、使用的硬件设备三、软件设计四、关键代码1.TIM1定时器:2.TIM2编码器模式示例:3.电机初始化:4.TIM8PWM输出:5.PID:6.中断服务函数:总结*云中何曾落羽,踏遍三岛寻声*一、粗谈PID?PID在生活中很常见,举个例子。例如生活中,一个加热器需要对某个物体进行恒温控制,但是由于某

    2022年5月27日
    47
  • 树莓派python编程指南_树莓派python软件

    树莓派python编程指南_树莓派python软件一:格式化SD卡SD卡插入读卡器连接电脑,使用SDFormatter对SD卡进行格式化(重装烧录也要进行着SD卡格式化操作)二:下载官方镜像http://downloads.raspberrypi.org/raspbian_latest三:烧录SD卡使用Win32DiskImager将镜像烧录到格式化后的SD卡SD卡盘根目录(/boot)下新建一个命名为ssh的…

    2022年10月15日
    2
  • asp net mvc 全局捕获异常的方法

    asp net mvc 全局捕获异常的方法在一个网站的开发测试阶段,我们经常需要全局捕获异常。使得网站在异常发生时并不会整个崩掉,从而影响到所有用户的访问,同时记录下异常的详细信息,以便于网站维护人员在异常发生后,可以准确定位异常所在位置和原因。本文使用过滤器的方式来实现全局异常捕获。网上也有很多类似的博文教程,我这里整理了一份日志打印比较完整的。新建过滤器在您的Util项目添加过滤器ExceptionLogAttribute.cs:usingSystem;usingSystem.Web;usingSystem.Web.Mv

    2022年7月22日
    10
  • VS Code插件

    VS Code插件

    2021年10月1日
    72

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号