zoukankan      html  css  js  c++  java
  • Mtbatis系列常见面试问题(二)

    MyBatis 实现一对一有几种方式?具体怎么操作的?
    :有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次,通过在resultMap里面,配置association借点配置一对一的类就可以完成。嵌套查询是先查一个表,根据这个表里面的结果的外键id,去在另外一个表里面查询数据,也是通过association配置,单另外一个表的查询通过select熟悉配置。

    Mybatis 能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别?
    :能,Mybatis不仅可以知晓一对一,一对多的关联查询,还可以知晓多对一,多对多的关联查询,多对一查询,其实就是一对一查询,值需要把selectOne()修改为selectList()即可:

    多对多查询,其实就是一对多查询,只需要把selectOne()修改为selectList即可。

    关联对象查询,有两种实现方式,一种是单独发送一个sql去查询关联对象,赋给主对象,然后返回朱对象。另一种是使用嵌套查询,嵌套查询的含义为使用join查询,一部分列是A对象的熟悉只,另外一部分列是关联对象B的属性值,好处是只发一个sql查询,就可以吧主对象和其他关联对象查出来。

    MyBatis 里面的动态 Sql 是怎么设定的?用什么语法?
    Mtbatis里面的动态sql,一般是通过id节点来实现,通过OGNL与否来实现,但是如果要写得完整,必须配合where,trim节点,

    where节点是判断包含节点有内容就插入where,否则不插入,trim节点是用来判断如果动态语句是以and或or开始,那么会自动把这个and或者or

    去掉。

    Mybatis 是如何将 sql 执行结果封装为目标对象并返回的?都有哪些映射形式?
    :第一种,是使用<resultMap>标签,逐一定义列名和对象属性名之间的映射关系。

    第二种,是使用sql列的别名功能,将列别名书写为对象属性名,比如T_NAME AS NAME,对象属性名一般是name,小写

    但是列名是不区分大小写,Mybatis会忽略列名大小写,智能找到预支对应对象属性名,你甚至可以写成T_NAME AS NaMe ,

    Mybatis一样可以正常工作,

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

    完成赋值的。

    Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签?
    还有很多其他的标签, <resultMap><parameterMap><sql><include>
    <selectKey>,加上动态 sql 9 个标签,
    trim|where|set|foreach|if|choose|when|otherwise|bind 等,其中<sql>sql 片段标签,通
    <include>标签引入 sql 片段, <selectKey>为不支持自增的主键生成策略标签。
    当实体类中的属性名和表中的字段名不一样,如果将查询的结果封装到指定 pojo
    1)通过在查询的 sql 语句中定义字段名的别名。
    2)通过<resultMap>来映射字段名和实体类属性名的一一对应的关系。
    通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应, Dao 的工作原理,是否可以重
    载?
    不能重载,因为通过 Dao 寻找 Xml 对应的 sql 的时候全限名+方法名的保存和寻找策
    略。接口工作原理为 jdk 动态代理原理,运行时会为 dao 生成 proxy,代理对象会拦截接口
    方法,去执行对应的 sql 返回数据。

    持续更新ing-----23






    岁月无声无息的溜走,除了带走一个无聊者的时光,还会沉淀一个努力者的人生。
  • 相关阅读:
    蜘蛛禁止访问文件
    基于PhalApi的Smarty拓展 (视图层的应用)
    MySQL数据库存表情
    查看PHP版本等相关信息
    读取数据库表信息
    nginx简介
    Redis发布订阅
    Redis持久化
    Redis主从复制
    Redis的Java客户端Jedis
  • 原文地址:https://www.cnblogs.com/dayandday/p/10832696.html
Copyright © 2011-2022 走看看