前言

  • 少年易老学难成,一寸光阴不可轻。未觉池塘春草梦,阶前梧叶已秋声 。—朱熹《劝学诗》
  • 勤奋才是改变你命运的唯一捷径。
  • 整理不易,各位看官点赞再看更舒适,养成好习惯(●´∀`●)

1.1 Mybatis是什么?

mybatis是一个持久层ORM框架。它内部封装了jdbc,使得开发更简洁,更高效。
Mybatis使开发者只需要关注sql语句本身,简化JDBC操作,不需要在关注加载驱动、创建连接、处理SQL语句等繁杂的过程。
MyBatis可以通过xml或注解完成ORM映射关系配置。

1…2 Mybatis和JDBC的关系?

JDBC是Java提供的一个操作数据库的API; MyBatis是一个持久层ORM框架,底层是对JDBC的封装。
MyBatis对JDBC操作数据库做了一系列的优化:
(1) mybatis使用已有的连接池管理,避免浪费资源,提高程序可靠性。
(2) mybatis提供插件自动生成DAO层代码,提高编码效率和准确性。
(3)mybatis 提供了一级和二级缓存,提高了程序性能。
(4) mybatis使用动态SQL语句,提高了SQL维护。(此优势是基于XML配置)
(5) mybatis对数据库操作结果进行自动映射

1.3 什么是ORM?

ORM的全称是Object Relational Mapping,即对象关系映射。
描述的是对象和表之间的映射。操作Java对象,通过映射关系,就可以自动操作数据库。
在ORM关系中,数据库表对应Java中的类,一条记录对应一个对象,一个属性对应一个列。
常见的ORM框架:Mybatis、Hibernate

1.4 MyBatis的两种配置方式?

注解、XML

1.5 Mybatis中#{}和${}的区别是什么?

1.#{}实现的是sql语句的预处理参数,之后再sql中用?号代替,使用时不需要关注数据类型,Mybatis自动实现数据类型的转换,并且可以防止SQL注入;
2. 实 现 的 是 s q l 语 句 的 直 接 拼 接 , 不 做 数 据 类 型 转 换 , 需 要 自 行 判 断 数 据 类 型 , 不 能 防 止 S Q L 注 入 ; 3. 在 某 些 特 定 情 况 下 必 须 使 用 {}实现的是sql语句的直接拼接,不做数据类型转换,需要自行判断数据类型,不能防止SQL注入; 3.在某些特定情况下必须使用 实现的是sql语句的直接拼接,不做数据类型转换,需要自行判断数据类型,不能防止SQL注入;3.在某些特定情况下必须使用{},如:在分表存储的情况下,对哪张表的查询是不确定的,也就是sql语句不能写死,表明是动态的,查询条件是固定的,此时表明只能使用${}方式进行字符串拼接,这样:slect * from ${tableName} where id = #{id}
总结:#{}占位符,用于参数传递; ${}用于SQL拼接

1.6 使用Mybatis过程中当实体类中的属性名和表中的字段名不一样 ,怎么解决?

  1. 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致
    2.使用通用Mapper时,可以通过@Column注解设置
    3.如果进行自定义查询,可以通过@Result进行设置
    【了解】4.如果使用的xml配置,通过进行配置

1.7 模糊查询like语句该怎么写?

1.使用通用Mapper的Criteria进行like语句的拼凑
2.使用#{}占位符方式,参数前后拼凑%。(select * from t_user where username like #{username} ,username数据为"%jack%")
【了解】3.使用 字 符 串 拼 接 方 式 , 可 能 引 发 s q l 注 入 问 题 : s e l e c t ∗ f r o m t u s e r w h e r e u s e r n a m e l i k e ′ {}字符串拼接方式,可能引发sql注入问题:select * from t_user where username like '% 字符串拼接方式,可能引发sql注入问题:select∗fromtu​serwhereusernamelike′{username}%’

1.8 一个Xml映射文件,都会写一个Dao接口与之对应,这个Dao接口的工作原理是什么?

Dao接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Dao接口生成代理proxy对象,代理对象proxy会拦截接口方法,转而执行接口方法所对应的MappedStatement所代表的sql,然后将sql执行结果返回。
MappedStatement解释:MappedStatement维护了一条<select|update|delete|insert>节点的封装,包括了传入参数映射配置、执行的SQL语句、结果映射配置等信息。如以下一个节点

select id, username from author where id = #{value}

1.9 编写了一个Dao接口,提供需要的方法,在方法添加对应的注解就可以完成对应的功能,工作原理是什么?

Dao接口在使用时,MyBatis创建接口对应的代理类。
在调用对应的方法时,执行的是代理类对应的方法。
代理类的方法上添加的注解完成增删改查的操作,如果是查询将结果封装到方法返回值类型声明的对象中。

1.10 使用Mybatis时Dao接口里的方法能重载吗?

不能重载的,
因为是全限定名+方法名的必须唯一。

1.11 Mybatis是如何进行分页的?

使用第三方分页助手:PageHelper
使用方式:
在将要执行查询sql语句之前使用分页助手:PageHelper.startPage(pageNum:页码, pageSize:每页显示数量);

1.12 Mybatis分页插件的原理是什么?

使用MyBatis插件(也称为拦截器)机制,对需要使用分页的功能进行增强。也就是重写SQL,根据不同的数据库生产不同的分页语句。
Mysql生成limit语句,Oracle借助rownum生产对应子查询语句。

1.13 Mybatis是如何将sql执行结果封装为目标对象的?

提供POJO和表之间的映射关系,查询结果就可以完成封装。
1.使用通用Mapper,需要在POJO上字段上使用@Column注解
2.如果是自定义查询,需要通过Dao接口里使用@Result注解
3.如果是xml,需要使用配置映射关系

1.14 Mybatis动态sql标签有那些?

动态SQL标签主要是基于XML进行配置的,在校主要学习的是注解,没有使用过XML。
不过注解也支持部分动态标签,@Select("")

1.15 Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?

不同的Xml映射文件,如果配置了namespace,那么id可以重复;如果没有配置namespace,那么id不能重复。MyBatis通过namespace+id来进行不同XML标识。

1.16 Mybatis与Hibernate区别在哪里?

Hibernate是全自动的ORM框架,也就是使用hibernate不用编写任何SQL语句。关联对象直接调用对应方法,可以自动完成数据的查询。
MyBatis封装了JDBC基本操作,但仍需要编写SQL语句,也称为半自动ORM框架。使用通过Mapper可以简化MyBatis单表操作,多表仍需要自己编写SQL语句。

1.17 解释一下MyBatis中命名空间(namespace)的作用。

namespace用于标识不同的XML配置文件。这样不同xml文件中sql语句的id相同也不会有冲突。
注解开发没有类似要求,只要保证接口全限定名不同即可(包+类名)

1.18 MyBatis中的动态SQL是什么意思?

在xml配置文件,根据数据的不同,动态拼凑对应的SQL语句。
例如:
用于处理条件成立时显示部分SQL语句
如果有条件就显示 where 子句,如果没有条件则不显示。

1.19 Mybatis的缓存机制?

Mybatis的缓存机制分为一级缓存和二级缓存
1.一级缓存:一级缓存的作用域是sqlSession会话级,相当于JDBC的Connection连接。一级缓存默认开启,用户不能手动配置。当在同一个sqlSession中执行两次相同的sql语句时,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次查询时会从缓存中获取数据,不再去底层数据库查询,从而提高查询效率;
2.二级缓存:二级缓存的作用域为同一个mapper的namespace,是跨sqlSession的,同一个namespace中不同的查询SQL可以从二级缓存中命中。二级缓存默认关闭,但是可以通过配置进行开启。
二级缓存的对象必须序列化,例如:User对象必须实现Serializable接口。
Mybatis中,执行select时,查询数据会被缓存;当执行insert、update、delete等操作的时候,缓存则会被清除

2020Java初级面试题一Mybatis相关推荐

  1. 2020Java初级面试题一Spring

    前言 少年易老学难成,一寸光阴不可轻.未觉池塘春草梦,阶前梧叶已秋声 .-朱熹<劝学诗> 勤奋才是改变你命运的唯一捷径. 整理不易,各位看官点赞再看更舒适,养成好习惯(●´∀`●) 1.1 ...

  2. 2020Java初级面试题一Web+SringMVC

    前言 少年易老学难成,一寸光阴不可轻.未觉池塘春草梦,阶前梧叶已秋声 .-朱熹<劝学诗> 勤奋才是改变你命运的唯一捷径. 整理不易,各位看官点赞再看更舒适,养成好习惯(●´∀`●) Web ...

  3. 2020Java初级面试题一数据库

    前言 少年易老学难成,一寸光阴不可轻.未觉池塘春草梦,阶前梧叶已秋声 .-朱熹<劝学诗> 勤奋才是改变你命运的唯一捷径. 整理不易,各位看官点赞再看更舒适,养成好习惯(●´∀`●) 1.1 ...

  4. 2020Java初级面试题一Java基础

    前言 少年易老学难成,一寸光阴不可轻.未觉池塘春草梦,阶前梧叶已秋声 .-朱熹<劝学诗> 勤奋才是改变你命运的唯一捷径. 整理不易,各位看官点赞再看更舒适,养成好习惯(●´∀`●) 1.1 ...

  5. java初级面试题总结

    博主是今年毕业的,找了一份工作,公司因为经济不景气,技术部裁了一半的人,很不幸的博主就在里面,所以有了这篇博主的面试总结经验.希望能给和博主一样正在找工作的童鞋一点点帮助.周一和同事吃了散伙饭,周二到 ...

  6. js考试题 html5新特性,Web前端初级面试题总结

    Web前端初级面试题总结 发布时间:2018-11-02 11:17, 浏览次数:549 , 标签: Web Web篇: 1.常见的浏览器内核有哪些? IE:Trident内核            ...

  7. if mybatis tk 多个_面试题:mybatis 中的 DAO 接口和 XML 文件里的 SQL 是如何建立关系的?...

    前言 这是 mybatis 比较常问到的面试题,我自己在以前的面试过程中被问到了2次,2次都是非常重要的面试环节,因此自己印象很深刻. 这个题目我很早就深入学习了,但是一直没有整理出来,刚好最近一段时 ...

  8. java web初级面试题_Java Web应用程序初学者教程

    java web初级面试题 Java Web Application is used to create dynamic websites. Java provides support for web ...

  9. 2022年电工(初级)考试报名及电工(初级)试题及解析

    题库来源:安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通:电工(初级)考试报名是安全生产模拟考试一点通总题库中生成的一套电工(初级)试题及解析,安全生产模拟考试一点通上电工(初级)作业手机 ...

最新文章

  1. 【2-SAT问题】解题报告:POJ 3678 Katu Puzzle(2-SAT问题的判定)
  2. css实现提示信息,单纯使用CSS实现动态提示信息
  3. docker下的mysql my.ini_Docker + MySQL 主从环境搭建
  4. Python面向对象-特殊成员
  5. SSH框架整合实现Java三层架构实例(一)
  6. 作为程序员,你吃过哪些数学的亏?
  7. Bootstrap(自助法),Bagging,Boosting(提升)
  8. 局域网内时间同步的一种简单办法
  9. springboot, thymeleaf 教你快速搭建网站
  10. 数据结构之删除线性表中的元素
  11. 循序渐进!java读文件并重新写文件
  12. ORACLE 两个表或两个结果集的数据对比常用的函数
  13. 客车网上售票系统(Java源码+sql脚本)
  14. Android字节码ASM插桩
  15. Fiddler代理设置
  16. 有 4 件事,我很后悔
  17. 鸣人来教你安装配置JDK
  18. UVA - 11604 General Sultan 题解
  19. Python下载网易云音乐(云音乐飙升榜)
  20. 适合面向手机设备开发的库

热门文章

  1. SSM思想—阶段性总结
  2. Jenkins连接svn报E170001错误的解决办法
  3. 男式西服的三大色系介绍
  4. 【Unity3D 常用插件】Haste插件
  5. 项目一(基础)家庭记录收支记账软件
  6. 7个趣味性超高的国产APP,总有一个能让你赞不绝口!
  7. 墙裂推荐的工具软件及插件神器
  8. iSlide(PPT插件)
  9. Pycharm2018永久破解方法
  10. vue3 倒计时功能