概述
目录
- 前言
- 1.mybatis是什么
- 2.mybatis的优点和缺点
- 3.mybatis和Hibernate的区别
- 4.#{}和${}的区别
- 5.resultType和resultMap的区别
- 6.怎么进行批量操作
- 7.一个xml文件对应一个dao接口,dao接口的工作原理是什么?dao接口的方法可以重载吗?
- 8.mybatis怎么实现的分页
- 9.mybatis支持延迟加载(懒加载)吗?原理是什么?
- 10.mybatis的一级、二级缓存
- 11.Xml文件中有哪些常用标签
- 12.如何获取自动生成的(主)键值?
前言
很多不常见很难问到的我就没整理,原理我也没细写,还是一句话,背就行了。背会了让你快乐两年半
java最新面试题(java基础、集合、多线程、jvm、锁、算法、CAS、Redis、数据库、mybatis、spring、springMVC、springBoot、微服务)
1.mybatis是什么
是一个半自动ORM(对象关系映射)框架,内部封装了JDBC,开发时只需要关注SQL就可以,不需要花费精力去处理数据库驱动、数据库连接等过程。
2.mybatis的优点和缺点
优点:
①因为内置JDBC,所以减少了大量的代码冗余。
②基于SQL编程,很灵活,SQL写在xml文件里,与程序解耦,便于管理。
③兼容各种数据库。
④提供映射标签,对象和数据库字段的相互映射。
缺点:
①SQL的编写量很大的时候,对开发人员的SQL功底有要求。
②SQL依赖数据库,导致数据库移植性差,不能随意更换数据库。
3.mybatis和Hibernate的区别
①mybatis是半自动化对象关系映射框架(提供数据库和实体类的映射关系,还需要自己写sql),Hibernate是全自动化对象关系映射框架(提供数据库和实体类的映射关系,自动生成sql)。
②mybatis控制sql执行,灵活度高。Hibernate虽然灵活度没那么高,但是可以节省代码,效率高。
③mybatis数据库无关性差,移植性差,Hibernate数据库无关性好,移植性好,靠的是强大的hql语言。
④Hibernate日志更加完善,而mybatis只是基础记录功能。
4.#{}和${}的区别
SQL注入问题:
select * from user_table where username=' "+userName+" ' and password=' "+password"'
传入参数:
username = "1' OR '1'='1";
password = "1' OR '1'='1";
变为:导致我们直接进入系统
select * from t_user where (username = '1' or '1'='1') and (password = '1' or '1'='1');
#{}: 就相当于标识符 ?,可以有效解决SQL注入问题。
${}: 相当于字符串拼接,直接拼接,会有sql注入问题。
5.resultType和resultMap的区别
resultType: 返回我们的实体类、Integer、Map等。
resultMap: 返回自定义实体类。
6.怎么进行批量操作
使用foreach标签。
<foreach collection="集合名" item="自定义集合里每个元素的名字" open="(" close=")" separator=",">
sql语句
</foreach>
7.一个xml文件对应一个dao接口,dao接口的工作原理是什么?dao接口的方法可以重载吗?
原理: dao接口就是使用JDK代理,生成一个代理对象,代理对象会拦截dao接口的方法,根据接口的全限定名+方法名 去判断是那个xml文件的sql,不能重载,因为是根据 全限定名+方法名 去判断。
8.mybatis怎么实现的分页
(1) 自己编写分页: 获取数据的list,然后编写代码进行分页。
(2) 利用sql进行分页: 比如mysql的limit。
(3) RowBounds实现分页
//service层调用dao层接口,start开始的条数,limit每页几条
public List<RoleBean> queryByPage(int start, int limit) {
return roleDao.queryUsersByPage(new RowBounds(start, limit));
}
//dao层接口加入RowBounds参数,就可以实现分页
public List<UserBean> queryUsersByPage(RowBounds rowBounds);
9.mybatis支持延迟加载(懒加载)吗?原理是什么?
mybatis延迟加载的详解及其配置
支持的对象: Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指的就是一对一,collection指的就是一对多查询。
概念: 延迟加载的原理是在查询时只加载部分数据,当需要访问未加载的数据时再进行加载。这样可以减少查询所需的时间和资源,提高系统性能。
原理: MyBatis实现延迟加载的方式是使用代理对象,在访问未加载的数据时触发代理对象的方法,从而进行数据的加载。延迟加载可以通过配置文件或注解来实现。
10.mybatis的一级、二级缓存
mybatis缓存详解及其配置
一级缓存: 默认开启,在同一个sqlSession会话下的操作都会存入缓存,请求查询的数据都会存入缓存。当会话,有增删改操作,并提交的时候,缓存清空,没有失效时间,会随会话结束而结束。
二级缓存: 默认关闭,会话是全局的,一个sqlSessionFactory里面可能有多个sqlSession,sqlSession之间共享数据。当一级缓存关闭或者清除的时候会存进二级缓存。当会话中,有增删改的操作,并且commit时,缓存就会清空。有失效时间,cache默认是一小时,每当有数据存进来,就会判断是否超过一小时,如果超过就释放二级缓存。实体类还需要实现反序列化(Serializable接口)。
11.Xml文件中有哪些常用标签
<select>、<insert>、<delect>、<update>、<resultMap>、<sql>、<include>、<where>、<foeach>、<choose>、<if>、<when>、<trim>等。
12.如何获取自动生成的(主)键值?
使用usegeneratedkeys=”true”,在新增成功之后,会返回id,到你的对象中。
<insert id=”insertname” usegeneratedkeys=”true” keyproperty=”id”>
新增sql
</insert>
最后
以上就是聪慧草丛为你收集整理的Mybatis常见面试题(2023最新)前言1.mybatis是什么2.mybatis的优点和缺点3.mybatis和Hibernate的区别4.#{}和${}的区别5.resultType和resultMap的区别6.怎么进行批量操作7.一个xml文件对应一个dao接口,dao接口的工作原理是什么?dao接口的方法可以重载吗?8.mybatis怎么实现的分页9.mybatis支持延迟加载吗?原理是什么?10.mybatis的一级、二级缓存11.Xml文件中有哪些常用标签12.如何获取自动生成的的全部内容,希望文章能够帮你解决Mybatis常见面试题(2023最新)前言1.mybatis是什么2.mybatis的优点和缺点3.mybatis和Hibernate的区别4.#{}和${}的区别5.resultType和resultMap的区别6.怎么进行批量操作7.一个xml文件对应一个dao接口,dao接口的工作原理是什么?dao接口的方法可以重载吗?8.mybatis怎么实现的分页9.mybatis支持延迟加载吗?原理是什么?10.mybatis的一级、二级缓存11.Xml文件中有哪些常用标签12.如何获取自动生成的所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复