1. Spring 和MyBatis整合之后 为什么一级缓存会失效

    • 因为Spring在使用完dao之后会立即关闭sqlSession对象。如果让它生效的话,打开事务就会生效。
  2. 二级缓存中要注意的点
    • 二级缓存里面的数据不能存那种一直累加到很大的。

    • 二级缓存是基于命名空间来的,缓存是拿来存储少量或者周期不长 但是要经常需要操作的数据

  3. ResultMap和ResultType的差别

    • ResultType 一般是直接指定返回值与别名库当中的java对象的映射 比如:Map ,String 自定义对象(注意:自定义对象的属性名和数据库列名要相同)
    • ResultMap 自己指定返回值与对象及与对象内部属性名和数据库列名的绑定
  4. #{}和${}的区别

    • #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by “111”,如果传入的值是id,则解析成的sql为order by “id”.
    • $将传入的数据直接显示生成在sql中如:order by useriduser_iduserid,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.
    • #方式能够很大程度防止sql注入。
    • $方式无法防止Sql注入。
    • $方式一般用于传入数据库对象,例如传入表名.
    • 一般能用#的就别用$.
    • MyBatis排序时使用order by 动态参数时需要注意,用$而不是#
  5. MyBatis与Hibernate有哪些不同?

    • MyBatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过MyBatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。
    • MyBatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化要求成果输出迅速。但是灵活的前提是MyBatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。
    • Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用Hibernate开发可以节省很多代码,提高效率。但是Hibernate的缺点是学习门槛高,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要具有很强的经验和能力才行。
    • 总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。
  6. 为什么说MyBatis是半自动ORM映射工具?它与全自动的区别在哪里

    • Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。
    • 而MyBatis在查询关联对象或关联集合对象时,需要手动编写sql来完成,所以,称之为半自动ORM映射工具。
  7. mapeer的编写方式

    • XML的方式
    • 注解的方式
  8. MyBatis是如何进行分页的?分页插件的原理是什么?

    • MyBatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。
    • 分页插件的基本原理是使用MyBatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。
  9. MyBatis映射文件中,如果A标签通过include引用了B标签的内容,请问,B标签能否定义在A标签的后面,还是说必须定义在A标签的前面?

    • 虽然MyBatis解析Xml映射文件是按照顺序解析的,但是,被引用的B标签依然可以定义在任何地方,MyBatis都可以正确识别。
    • 原理是,MyBatis解析A标签,发现A标签引用了B标签,但是B标签尚未解析到,尚不存在,此时,MyBatis会将A标签标记为未解析状态,然后继续解析余下的标签,包含B标签,待所有标签解析完毕,MyBatis会重新解析那些被标记为未解析的标签,此时再解析A标签时,B标签已经存在,A标签也就可以正常解析完成了。
  10. MyBatis 动态 sql 是做什么的?都有哪些动态 sql?能简述一下动态 sql 的执行原理不?

    • MyBatis 动态 sql 可以让我们在 Xml 映射文件内,以标签的形式编写动态 sql,完成逻辑判断和动态拼接 sql 的功能。
    • MyBatis 提供了 9 种动态 sql 标签:trim|where|set|foreach|if|choose|when|otherwise|bind。
    • 其执行原理为,使用 OGNL 从 sql 参数对象中计算表达式的值,根据表达式的值动态拼接 sql,以此来完成动态 sql 的功能。
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐