学妹面试拼刀刀被问MyBatis?我把问题和答案都告诉她了还是没过

学妹面试拼刀刀被问MyBatis?我把问题和答案都告诉她了还是没过

首页休闲益智阿伟拼刀刀更新时间:2024-05-18

学妹面试拼刀刀被问MyBatis?我把问题和答案都告诉她了还是没过!!!

这???就很离谱!下面是我整理的问题和答案,文末附相关资料(需要的自取)

  1. MyBatis 与 Jpa 有哪些不同?
  2. {}和${}的区别是什么?
  3. 当实体类中的属性名和表中的字段名不一样 ,怎么办 ?
  4. 通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?
  5. Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
  6. 如何执行批量插入?
  7. Mybatis动态sql有什么用?执行原理?有哪些动态sql?
  8. MyBatis实现一对一有几种方式?具体怎么操作的?
  9. MyBatis实现一对多有几种方式,怎么操作的?
  10. Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?
  11. mybaits 工作原理
  12. 简述Mybatis的Xml映射文件和Mybatis内部数据结构之间的映射关系?
  13. Mybatis 设计模式
1、MyBatis 与 Jpa 有哪些不同?
  1. Mybatis和jpa不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句。
  2. Mybatis直接编写原生态sql,可以严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,因为这类软件需求变化频繁,一但需求变化要求迅速输出成果。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件,则需要自定义多套sql映射文件,工作量大。
  3. jpa 对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件,如果用JPA 开发可以节省很多代码,提高效率。
2、{}和${}的区别是什么?
  1. {}是预编译处理,${}是字符串替换。
  2. Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
  3. Mybatis在处理 时 , 就 是 把 {}时,就是把 时,就是把{}替换成变量的值。
  4. 使用#{}可以有效的防止SQL注入,提高系统安全性。
3、当实体类中的属性名和表中的字段名不一样 ,怎么办 ?

<select id=”selectorder” parametertype=”int” resultetype=”me.gacl.domain.order”> select order_id id, order_no orderno ,order_price price form orders where order_id=#{id}; </select>

<select id="getOrder" parameterType="int" resultMap="orderresultmap"> select * from orders where order_id=#{id} </select> <resultMap type=”me.gacl.domain.order” id=”orderresultmap”> <!–用id属性来映射主键字段–> <id property=”id” column=”order_id”> <!–用result属性来映射非主键字段,property为实体类属性名,column为数据表中的属性–> <result property = “orderno” column =”order_no”/> <result property=”price” column=”order_price” /> </reslutMap>/4、通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?4、通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?

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

6、如何执行批量插入?

使用forEach标签或者使用 sqlSessionTemplate

7、Mybatis动态sql有什么用?执行原理?有哪些动态sql?

Mybatis动态sql可以在Xml映射文件内,以标签的形式编写动态sql,执行原理是根据表达式的值 完成逻辑判断并动态拼接sql的功能。

Mybatis提供了9种动态sql标签:trim | where | set | foreach | if | choose | when | otherwise | bindXml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?

答:<resultMap>、<parameterMap>、<sql>、<include>、<selectKey>,加上动态sql的9个标签,其中<sql>为sql片段标签,通过<include>标签引入sql片段,<selectKey>为不支持自增的主键生成策略标签。

8、MyBatis实现一对一有几种方式?具体怎么操作的?9、MyBatis实现一对多有几种方式,怎么操作的?10、Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?

答:

它的原理是,使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用a.getB().getName(),拦截器invoke()方法发现a.getB()是null值,那么就会单独发送事先保存好的查询关联B对象的sql,把B查询上来,然后调用a.setB(b),于是a的对象b属性就有值了,接着完成a.getB().getName()方法的调用。这就是延迟加载的基本原理。

11、 mybaits 工作原理

加载mybatis全局配置文件(数据源、mapper映射文件等),解析配置文件,MyBatis基于XML配置文件生成Configuration,和一个个MappedStatement(包括了参数映射配置、动态SQL语句、结果映射配置),其对应着<select | update | delete | insert>标签项。

SqlSessionFactoryBuilder通过Configuration对象生成SqlSessionFactory,用来开启SqlSession。

SqlSession对象完成和数据库的交互:

a、用户程序调用mybatis接口层api(即Mapper接口中的方法)

b、SqlSession通过调用api的Statement ID找到对应的MappedStatement对象

c、通过Executor(负责动态SQL的生成和查询缓存的维护)将MappedStatement对象进行解析,sql参数转化、动态sql拼接,生成jdbc Statement对象

d、JDBC执行sql

e、借助MappedStatement中的结果映射关系,将返回结果转化成HashMap、JavaBean等存储结构并返回。

12、简述Mybatis的Xml映射文件和Mybatis内部数据结构之间的映射关系?

Mybatis将所有Xml配置信息都封装到All-In-One重量级对象Configuration内部。在Xml映射文件中,<parameterMap>标签会被解析为ParameterMap对象,其每个子元素会被解析为ParameterMapping对象。<resultMap>标签会被解析为ResultMap对象,其每个子元素会被解析为ResultMapping对象。每一个<select>、<insert>、<update>、<delete>标签均会被解析为MappedStatement对象,标签内的sql会被解析为BoundSql对象。

13、Mybatis 设计模式

Mybatis至少遇到了以下的设计模式的使用:

  1. Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder;
  2. 工厂模式,例如SqlSessionFactory、ObjectFactory、MapperProxyFactory;
  3. 单例模式,例如ErrorContext和LogFactory;
  4. 代理模式,Mybatis实现的核心,比如MapperProxy、ConnectionLogger,用的jdk的动态代理;还有executor.loader包使用了cglib或者javassist达到延迟加载的效果;
  5. 组合模式,例如SqlNode和各个子类ChooseSqlNode等;
  6. 模板方法模式,例如BaseExecutor和SimpleExecutor,还有BaseTypeHandler和所有的子类例如IntegerTypeHandler;
  7. 适配器模式,例如Log的Mybatis接口和它对jdbc、log4j等各种日志框架的适配实现;
  8. 装饰者模式,例如Cache包中的cache.decorators子包中等各个装饰者的实现;
  9. 迭代器模式,例如迭代器模式PropertyTokenizer;

需要相关资料,私信我:学习

看上图,需要MyBatis,Java全套学习资料!

请关注 转发,私信我:学习

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved