前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2022年Java备战秋招,程序员求职必看的Mybatis面试题

2022年Java备战秋招,程序员求职必看的Mybatis面试题

原创
作者头像
Java程序猿
修改2022-07-13 21:49:48
1.2K0
修改2022-07-13 21:49:48
举报
文章被收录于专栏:Java核心技术Java核心技术

前言

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

小编分享的这份2022年Java秋招备战面试题总计有1000多道面试题,包含了MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Java 并发编程、Java基础、Spring、微服务、Linux、Spring Boot 、Spring Cloud、RabbitMQ、kafka等16个专题技术点,都是小编在今年金三银四总结出来的面试真题,已经有很多粉丝靠这份PDF拿下众多大厂的offer,今天在这里总结分享给到大家!【已完结】

1、什么是Mybatis?

2、Mybaits的优点:

3、MyBatis框架的缺点:

4、MyBatis框架适用场合:

5、MyBatis与Hibernate有哪些不同?

6、#{}和${}的区别是什么?

7、当实体类中的属性名和表中的字段名不一样 ,怎么办 ?

第 1 种: 通过在查询的 sql 语句中定义字段名的别名,让字段名的别名和实体类 的属性名一致。

代码语言:javascript
复制
<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>

第 2 种: 通过<resultMap>来映射字段名和实体类属性名的一一对应的关系

代码语言:javascript
复制
<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>

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

第 1 种:在 Java 代码中添加 sql 通配符。

代码语言:javascript
复制
string wildcardname = “%smi%”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
select * from foo where bar like #{value}
</select>

第 2 种:在 sql 语句中拼接通配符,会引起 sql 注入

代码语言:javascript
复制
string wildcardname = “smi”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
select * from foo where bar like "%"#{value}"%"
</select>

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

10、Mybatis是如何进行分页的?分页插件的原理是什么?

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

第一种是使用<resultMap>标签,逐一定义数据库列名和对象属性名之间的映 射关系。

第二种是使用 sql 列的别名功能,将列的别名书写为对象属性名。

有了列名与属性名的映射关系后,Mybatis 通过反射创建对象,同时使用反射给 对象的属性逐一赋值并返回,那些找不到映射关系的属性,是无法完成赋值的。

12、如何执行批量插入?

首先,创建一个简单的 insert 语句:

代码语言:javascript
复制
<insert id=”insertname”>
insert into names (name) values (#{value})
</insert>

然后在 java 代码中像下面这样执行批处理插入:

代码语言:javascript
复制
list < string > names = new arraylist();
names.add(“fred”);
names.add(“barney”);
names.add(“betty”);
names.add(“wilma”);
// 注意这里 executortype.batch
sqlsession sqlsession =
sqlsessionfactory.opensession(executortype.batch);
try {
namemapper mapper = sqlsession.getmapper(namemapper.class);
for (string name: names) {
mapper.insertname(name);
}
sqlsession.commit();
} catch (Exception e) {
e.printStackTrace();
sqlSession.rollback();
throw e;
}
finally {
sqlsession.close();
}

13、如何获取自动生成的(主)键值?

14、在mapper中如何传递多个参数?

3、第三种:多个参数封装成 map

代码语言:javascript
复制
try {
//映射文件的命名空间.SQL 片段的 ID,就可以调用对应的映射文件中的
SQL
//由于我们的参数超过了两个,而方法中只有一个 Object 参数收集,因此
我们使用 Map 集合来装载我们的参数
Map < String, Object > map = new HashMap();
map.put("start", start);
map.put("end", end);
return sqlSession.selectList("StudentID.pagination", map);
} catch (Exception e) {
e.printStackTrace();
sqlSession.rollback();
throw e;
} finally {
MybatisUtil.closeSqlSession();
}

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

16、Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有什么?

18、为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?

19、 一对一、一对多的关联查询 ?

代码语言:javascript
复制
<mapper namespace="com.lcb.mapping.userMapper">
<!--association 一对一关联查询 -->
<select id="getClass" parameterType="int"
resultMap="ClassesResultMap">
select * from class c,teacher t where c.teacher_id=t.t_id and
c.c_id=#{id}
</select>
<resultMap type="com.lcb.user.Classes" id="ClassesResultMap">
<!-- 实体类的字段名和数据表的字段名映射 -->
<id property="id" column="c_id"/>
<result property="name" column="c_name"/>
<association property="teacher"
javaType="com.lcb.user.Teacher">
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
</association>
</resultMap>
<!--collection 一对多关联查询 -->
<select id="getClass2" parameterType="int"
resultMap="ClassesResultMap2">
select * from class c,teacher t,student s where c.teacher_id=t.t_id
and c.c_id=s.class_id and c.c_id=#{id}
</select>
<resultMap type="com.lcb.user.Classes" id="ClassesResultMap2">
<id property="id" column="c_id"/>
<result property="name" column="c_name"/>
<association property="teacher"
javaType="com.lcb.user.Teacher">
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
</association>
<collection property="student"
ofType="com.lcb.user.Student">
<id property="id" column="s_id"/>
<result property="name" column="s_name"/>
</collection>
</resultMap>
</mapper>

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

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

22、Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?

23、Mybatis的一级、二级缓存:

24、什么是MyBatis的接口绑定?有哪些实现方式?

25、使用MyBatis的mapper接口调用时有哪些要求?

26、Mapper编写有哪几种方式?

第一种:接口实现类继承 SqlSessionDaoSupport:使用此种方法需要编写 mapper 接口,mapper 接口实现类、mapper.xml 文件。

第二种:使用 org.mybatis.spring.mapper.MapperFactoryBean:

1、在 sqlMapConfig.xml 中配置 mapper.xml 的位置,如果 mapper.xml 和 mappre 接口的名称相同且在同一个目录,这里可以不用配置

代码语言:javascript
复制
<mappers>
<mapper resource="mapper.xml 文件的地址" />
<mapper resource="mapper.xml 文件的地址" />
</mappers>

2、定义 mapper 接口:

1、mapper.xml 中的 namespace 为 mapper 接口的地址

2、mapper 接口中的方法名和 mapper.xml 中的定义的 statement 的 id 保持一 致

3、Spring 中定义

代码语言:javascript
复制
<bean id="" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="mapper 接口地址" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

第三种:使用 mapper 扫描器:

4、使用扫描器后从 spring 容器中获取 mapper 的实现对象

27、简述Mybatis的插件运行原理,以及如何编写一个插件。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 1、什么是Mybatis?
      • 2、Mybaits的优点:
        • 3、MyBatis框架的缺点:
          • 4、MyBatis框架适用场合:
            • 5、MyBatis与Hibernate有哪些不同?
              • 6、#{}和${}的区别是什么?
                • 7、当实体类中的属性名和表中的字段名不一样 ,怎么办 ?
                  • 8、 模糊查询like语句该怎么写?
                    • 9、通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?
                      • 10、Mybatis是如何进行分页的?分页插件的原理是什么?
                        • 11、Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
                          • 12、如何执行批量插入?
                            • 13、如何获取自动生成的(主)键值?
                              • 14、在mapper中如何传递多个参数?
                                • 15、Mybatis动态sql有什么用?执行原理?有哪些动态sql?
                                  • 16、Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有什么?
                                    • 18、为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?
                                      • 19、 一对一、一对多的关联查询 ?
                                        • 20、MyBatis实现一对一有几种方式?具体怎么操作的?
                                          • 21、MyBatis实现一对多有几种方式,怎么操作的?
                                            • 22、Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?
                                              • 23、Mybatis的一级、二级缓存:
                                                • 24、什么是MyBatis的接口绑定?有哪些实现方式?
                                                  • 25、使用MyBatis的mapper接口调用时有哪些要求?
                                                    • 26、Mapper编写有哪几种方式?
                                                      • 27、简述Mybatis的插件运行原理,以及如何编写一个插件。
                                                      相关产品与服务
                                                      云数据库 MySQL
                                                      腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                                                      领券
                                                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档