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


    前言:七月末八月初的时候,秋招正式打响,公司会放出大量的全职和实习岗位。为了帮助秋招的小伙伴们,学长这里整理了一系列的秋招面试题给大家,所以小伙伴们不用太过焦虑,相信你们一定能超常发挥,收到心仪公司的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语句:

    1. id=”insertname”>
    2. insert into names (name) values (#{value})

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

    1. list < string > names = new arraylist();
    2. names.add(“fred”);
    3. names.add(“barney”);
    4. names.add(“betty”);
    5. names.add(“wilma”);
    6. //注意这里 executortype.batch
    7. sqlsession sqlsession =
    8. sqlsessionfactory.opensession(executortype.batch);
    9. try {
    10. namemapper mapper = sqlsession.getmapper(namemapper.class);
    11. for (string name: names) {
    12. mapper.insertname(name);
    13. }
    14. sqlsession.commit();
    15. } catch (Exception e) {
    16. e.printStackTrace();
    17. sqlSession.rollback();
    18. throw e;
    19. }
    20. finally {
    21. sqlsession.close();}

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

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

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

    示例:

    1. id=”insertname” usegeneratedkeys=true” keyproperty=
    2. id”>
    3. insert into names (name) values (#{name})
    4. name name = new name();
    5. name.setname(“fred”);
    6. int rows = mapper.insertname(name);
    7. //完成后,id已经被设置到对象中
    8. system.out.println(“rows inserted =+ rows);
    9. system.out.println(“generated key value =+ name.getid());

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

    1、第一种:

    DAO层的函数

    publicUserselectUser(Stringname,Stringarea);

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

    1. id="selectUser"resultMap="BaseResultMap">
    2. select * fromuser_user_t whereuser_name = #{0}anduser_area=#{1}

    2、第二种:使用@param

    注解:

    1. public interfaceusermapper{
    2. user selectuser(@param(“username”) string
    3. username,@param(“hashedpassword”) string hashedpassword);}

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

    1. id=”selectuser” resulttype=”user”>
    2. select id, username, hashedpassword
    3. from some_table
    4. where username = #{username}
    5. and hashedpassword = #{hashedpassword}

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

    1. try{
    2. //由于我们的参数超过了两个,而方法中只有一个 Object参数收集,因此我们使用 Map集合来装载我们的参数
    3. MapString,Object>map= newHashMap();
    4. map.put("start", start);
    5. map.put("end", end);
    6. returnsqlSession.selectList("StudentID.pagination", map);
    7. }catch(Exception e) {
    8. e.printStackTrace();
    9. sqlSession.rollback();
    10. throwe;
    11. }finally{
    12. MybatisUtil.closeSqlSession();

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

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

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

  • 相关阅读:
    redis的单线程模型
    服务器部署 Vue 和 Django 项目的全记录
    张一鸣:我遇到的优秀年轻人的5个特质
    量纲化处理汇总
    target is not existed: .page-component__scroll .el-scrollbar__wrap
    企业微信机器人对接GPT
    PHP实现微信小程序状态检测(违规、暂停服务、维护中、正在修复)
    ES 文档与索引介绍
    【JAVA】日志打印java.util.logging.*函数自定义格式,并且显示调用时行号
    力扣HOT100 - 200. 岛屿数量
  • 原文地址:https://blog.csdn.net/m0_63722685/article/details/126359580