前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >秋招面试题系列- - -Java工程师(三)

秋招面试题系列- - -Java工程师(三)

原创
作者头像
叶秋学长
发布2022-08-17 09:46:37
3790
发布2022-08-17 09:46:37
举报
文章被收录于专栏:全栈学习专栏全栈学习专栏

前言:七月末八月初的时候,秋招正式打响,公司会放出大量的全职和实习岗位。为了帮助秋招的小伙伴们,学长这里整理了一系列的秋招面试题给大家,所以小伙伴们不用太过焦虑,相信你们一定能超常发挥,收到心仪公司的Offer~~ 内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux等技术栈

目录

MyBatis面试题

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

12、如何执行批量插入?

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

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

1、第一种:

2、第二种:使用@param

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

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


MyBatis面试题

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

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

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

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

12、如何执行批量插入?

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

代码语言:javascript
复制
id=”insertname”>

insert into names (name) values (#{value})

然后在 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、如何获取自动生成的(主)键值?

insert方法总是返回一个 int值,这个值代表的是插入的行数。

如果采用自增长策略,自动生成的键值在 insert方法执行完后可以被设置到传入的参数对象中。

示例:

代码语言:javascript
复制
id=”insertname” usegeneratedkeys=”true” keyproperty=”

id”>

insert into names (name) values (#{name})

name name = new name();

name.setname(“fred”);

int rows = mapper.insertname(name);

//完成后,id已经被设置到对象中

system.out.println(“rows inserted =” + rows);

system.out.println(“generated key value =” + name.getid());

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

1、第一种:

DAO层的函数

publicUserselectUser(Stringname,Stringarea);

对应的 xml,#{0}代表接收的是 dao层中的第一个参数,#{1}代表 dao层中第二参数,更多参数一致往后加即可。

代码语言:javascript
复制
id="selectUser"resultMap="BaseResultMap">

select * fromuser_user_t whereuser_name = #{0}anduser_area=#{1}

2、第二种:使用@param

注解:

代码语言:javascript
复制
public interfaceusermapper{

user selectuser(@param(“username”) string

username,@param(“hashedpassword”) string hashedpassword);}

然后,就可以在 xml像下面这样使用(推荐封装为一个 map,作为单个参数传递给mapper):

代码语言:javascript
复制
id=”selectuser” resulttype=”user”>

select id, username, hashedpassword

from some_table

where username = #{username}

and hashedpassword = #{hashedpassword}

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

代码语言:javascript
复制
try{

//由于我们的参数超过了两个,而方法中只有一个 Object参数收集,因此我们使用 Map集合来装载我们的参数

MapString,Object>map= newHashMap();

map.put("start", start);

map.put("end", end);

returnsqlSession.selectList("StudentID.pagination", map);

}catch(Exception e) {

e.printStackTrace();

sqlSession.rollback();

throwe;

}finally{

MybatisUtil.closeSqlSession();

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

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

Mybatis提供了 9种动态 sql标签:trim | where | set | foreach | if | choose| when | otherwise | bind。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MyBatis面试题
  • 11、Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
  • 12、如何执行批量插入?
  • 13、如何获取自动生成的(主)键值?
  • 14、在 mapper中如何传递多个参数?
    • 1、第一种:
      • 2、第二种:使用@param
        • 3、第三种:多个参数封装成 map
        • 15、Mybatis动态 sql有什么用?执行原理?有哪些动态 sql?
        相关产品与服务
        云数据库 MySQL
        腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档