面试题整理之Mybatis


说明: 整理自互联网、自己学习使用。

1.介绍下Mybatis?(什么是Mybatis?)

  • mybatis是一个ORM框架,主要承担着与数据库交互的任务。内部封装了jdbc,使用者无需关注驱动加载、创建连接、创建statement等与业务无关的过程,只需要关注sql语句本身。mybatis支持原生的sql,可以严格控制sql语句的性能。
  • mybatis 支持使用xml和注解来实现对象和和数据库表的映射, 避免了jdbc代码和手动设置参数和结果集。
  • 可以将各种要执行的statement配置起来, 通过java对象和sql中的动态参数映射成最终的sql语句, 并且可以将mybatis执行的结果集映射出java对象进行返回。
  • 适合对性能要求高, 需求变化较多的项目。是一个灵活的DAO层解决方案。

2.Mybatis有哪些优点

  • 基于sql语句编程, 灵活性高。 不会对现有的程序或者数据库造成影响。
  • xml语句中编写sql可以很好的实现与java代码的解耦。
  • 支持动态SQL语句的编写。
  • 与各种数据库兼容性高。
  • 可以与Spring、SpringBoot很好的集成。
  • 提供对象关系映射标签, 支持对象关系组件维护。

3.Mybatis的缺点

  • 手写原生sql, 对sql的功底要求高。
  • sql依赖数据库, 可移植性差, 不好随意切换数据库。

4.MyBatis与Hibernate有哪些不同?

  • Hibernate不完全是一个ORM框架, mybatis 需要程序员手写sql。
  • mybatis只需关注sql, 可以对sql进行优化, 适合对关系数据模型要求不高的软件开发。
  • hibernate 对象关系映射能力较强, 数据库无关性好。但需要额外的学习hql..

5.Mybatis中#{}${}的区别是什么?

  • #{}是参数占位符, 是对具体参数的预处理,Mybatis会将sql语句中的#{}替换成?,然后在sql执行之前调用PrepareStatement的参数设置方法, 按序给?占位符设置参数值。比如:ps.sestInt(0,parameterValue) 至于#{item.name} 的取值方式则是使用反射方式从参数对象中获取item对象的name属性值, 相当于parm.getItem().getName() 使用#{}可以有效的防止SQL注入, 提高系统的安全性。
  • ${} 可以理解为是替换{}内部变量的值。是Properties文件中的变量占位符, 可以用于标签属性或者sql内部, 属于静态的文本替换, ${driver} 会被静态替换为com.mysql.jdbc.Driver

6.当实体类的属性名和字段名的不一样怎么办? 如何处理

  • 如果只是下划线和驼峰命名的区别直接开启驼峰命名规则用的多
  • 如果不止这个区别
    • 在sql 语句中定义字段名的别名, 使得字段名的别名和实体类的属性名一致即可。
    <select id=”selectorder” parametertype=”int” resultetype=”com.xx.domain.order”>
        select order_id id, order_no orderno ,order_price price form orders where order_id=#{id};
    </select>
    
    • 使用<resultMap> 标签来映射字段名和实体类的属性名。
    <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>
    

7.如何使用模糊查询?

  • 在Java代码中直接添加通配符
String name = "%洋%";

List<Person> persons = PersonMapper.selectLike(name);
<select id=”selectLike”>
select * from foo where bar like #{value}
</select>
  • 在sql语句中拼接通配符, 会引起sql注入。
<select id=”selectlike”>
    select * from foo where bar like "%"#{value}"%"
</select>

8.xml文件中, 除了常见的 select、insert、update、delete 还有哪些标签?

来自京东


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM