面试_技术问题_mybatis

时间:2023-02-21 20:57:58

2SSM三大框架的工作原理?

3jquery提交表单、获取标签(菜鸟教程)

4、什么叫一级缓存、二级缓存?

 

1.MybatisIBatis比较大的几个改进是什么?

        a.有接口绑定,包括注解绑定sqlxml绑定Sql ,

        b.动态sql由原来的节点配置变成OGNL表达式,

        c. 在一对一,一对多的时候引进了association,在一对多的时候引入了collection

           节点,不过都是在resultMap里面配置

 

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

        接口映射就是在IBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,

        我们直接调用接口方法就可以,这样比起原来了SqlSession提供的方法我们可以有更加灵活的选择和设置.

 

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

        接口绑定有两种实现方式,一种是通过注解绑定,就是在接口的方法上面加上

        @Select@Update等注解里面包含Sql语句来绑定,另外一种就是通过xml里面写SQL来绑定,

        在这种情况下,要指定xml映射文件里面的namespace必须为接口的全路径名.

 

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

        Sql语句比较简单时候,用注解绑定,

        SQL语句比较复杂时候,xml绑定,一般用xml绑定的比较多

 

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

        有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次,

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

 

        嵌套查询是先查一个表,根据这个表里面

        的结果的外键id,去再另外一个表里面查询数据,也是通过association配置,但另外一个表

        的查询通过select属性配置

 

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

        有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次,通过在resultMap里面配

        collection节点配置一对多的类就可以完成;

 

        嵌套查询是先查一个表,根据这个表里面的

        结果的外键id,去再另外一个表里面查询数据,也是通过配置collection,但另外一个表的

        查询通过select节点配置

 

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

        MyBatis里面的动态Sql一般是通过if节点来实现,通过OGNL语法来实现,但是如果要写的完

        ,必须配合where,trim节点,where节点是判断包含节点有内容就插入where,否则不插

        ,trim节点是用来判断如果动态语句是以andor开始,那么会自动把这个and或者or

        

 

8.IBatisMyBatis在核心处理类分别叫什么

        IBatis里面的核心处理类交SqlMapClient,

        MyBatis里面的核心处理类叫做SqlSession

 

9.IBatisMyBatis在细节上的不同有哪些

        sql里面变量命名有原来的#变量#变成了#{变量}  

        原来的$变量$变成了${变量},

        原来在sql节点里面的class都换名字交type

        原来的queryForObject queryForList 变成了selectOne selectList  

        原来的别名设置在映射文件里面放在了核心配置文件里

 

10.讲下MyBatis的缓存

        MyBatis的缓存分为一级缓存和二级缓存,

        一级缓存放在session里面,默认就有,二级缓存放在它的命名空间里,默认是打开的,

        使用二级缓存属性类需要实现Serializable序列化接

        (可用来保存对象的状态),可在它的映射文件中配置<cache/>

 

11.MyBatis(IBatis)的好处是什么

        ibatissql语句从Java源程序中独立出来,

        放在单独的XML文件中编写,给程序的维护带来了很大便利。

        ibatis封装了底层JDBC API的调用细节,并能自动将结果集转换成Java Bean对象,

        大大简化了Java数据库编程的重复工作。

 

        因为Ibatis需要程序员自己去编写sql语句,

        程序员可以结合数据库自身的特点灵活控制sql语句,

        因此能够实现比hibernate等全自动orm框架更高的查询效率,能够完成复杂查询。

 

 

12、请介绍mybatis

 

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的基于Java的持久层框架。MyBatis避免了几乎所有的 JDBC代码和手工设置参数以及抽取结果集。MyBatis使用简单的 XML或注解来配置和映射基本体,将接口和 JavaPOJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

 

MyBatisiBatis的升级版,用法有很多的相似之处,但是MyBatis进行了重要的改进。例如:

  

1)、Mybatis实现了接口绑定,使用更加方便。

 

      ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件, 而Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。

 

2)、对象关系映射的改进,效率更高

 

3)、MyBatis采用功能强大的基于OGNL的表达式来消除其他元素。

 

13mybatis在核心处理叫什么?

 

MyBatis里面的核心处理类叫做SqlSession

 

14、请简述mybatis的功能架构分为三层

 

1)、API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。

2)、数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

3)、基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

 

15、请简述mybatis的工作原理

 

MyBatis应用程序根据XML配置文件创建SqlSessionFactorySqlSessionFactory在根据配置,配置来源于两个地方,一处是配置文件,一处是Java代码的注解,获取一个SqlSessionSqlSession包含了执行sql所需要的所有方法,可以通过SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等,用完之后关闭SqlSession

 

16Mybatis基础: #{...}${...}的区别

MyBatis#{}解释为JDBC prepared statement的一个参数标记。而将 ${}解释为字符串替换。理解这两者的区别是很有用的,因为在某些SQL语句中并不能使用参数标记(parameter markers)

 

${}Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver#{}sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,按序给sql?号占位符设置参数值,比如ps.setInt(0, parameterValue)#{item.name}的取值方式为使用反射从参数对象中获取item对象的name属性值,相当于param.getItem().getName()

 

17MyBatis的优缺点

  

优点:

1)、简单易学

       mybatis本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。

  

2)、灵活

       mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。

  

3)、解除sql与程序代码的耦合

       通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

 

4)、提供映射标签,支持对象与数据库的orm字段关系映射

  

5)、提供对象关系映射标签,支持对象关系组建维护

 

6)、提供xml标签,支持编写动态sql

 

缺点:

 

1)、编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。

  

2)、SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。

  

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

  

4)、二级缓存机制不佳