MyBatis(一)

1. #{}和${}的区别?

  • #{}相当于在SQL中拼接一个?占位符,在SQL执行之前使用PreparedStatement将?替换成参数,所以#{}是预编译处理,相对安全,能防止SQL注入;${}直接将参数拼接在SQL中
  • #{}会将参数加上一个单引号,${}不会;表的字段如果加了单引号会使order by / group by 失效,所以在这种场景中使用${}

2. 当实体类的属性名和表中的字段名不一致怎么办?

  • SQL查询出来的字段起别名,与属性名对应上
  • 使用ResultMap封装,column和property标签配置
  • 数据库通常命名为带下划线,实体类命名为驼峰命名,配置开启驼峰映射

3. 动态SQL是什么?执行原理?有哪些标签?

  1. 在XML文件中,使用标签编写动态SQL,根据标签中的逻辑判断,动态地拼接SQL
  2. 执行原理:计算表达式的值在不同的条件下拼接不同的SQL
  3. <where/><if/><set/><choose/><when/><otherwise/><trim/><foreach/><bind/>

4. Mapper接口绑定的方式有几种

  • 使用xml映射文件,接口路径与对应xml映射文件路径相同,在XML文件中使用namespace指定接口的全限定名,使用<select/><insert/>等标签在xml文件中书写SQL语句,标签的id和接口的方法名对应。
  • 在接口的方法上贴注解@Select/@Insert等,在注解中写SQL语句

5. 在Mapper如何传递多个参数?

  • 默认的参数arg0,arg1,或者param1, param2
  • 自己封装一个Map或实体类
  • 使用@Param(value = “username”)注解,由注解中的value指定参数名

6. Mybatis分页的原理是什么?分页插件的原理是什么?

  • 自带的分页原理是查询出所有的结果,然后在内存中使用RowBounds封装分页条件,对ResultSe进行数据截取,是逻辑分页
  • PageHelper使用拦截器在sql执行之前,拼接分页语句和分页参数,是物理分页
    在这里插入图片描述

7. 什么是Mybatis

  • Mybatis是一个半自动的ORM框架,封装了JDBC,我们只需要关注sql语句本身,不用去处理加载驱动,获取连接,释放连接等操作,直接编写原生SQL,可以严格控制SQL性能,灵活度高
  • 使用xml配置或注解配置来映射实体类与数据库,避免了手动处理结果集
  • mybatis通过xml或注解方式配置sql和参数,通过java对象和参数进行映射生成最终执行的sql语句,最后mybatis执行sql并将结果集映射为Java对象并返回

8. Mybatis的优点

  • 封装了JDBC代码,减少了大量的代码冗余
  • 自动处理结果集,也可以手动配置映射规则(resultMap)
  • 支持手写原生SQL,可以严格控制SQL性能,灵活性高
  • 支持动态SQL,更灵活了
  • 兼容各种数据库,和Spring很好地集成

9. Mybatis的缺点

  • SQL编写的工作量大,对SQL功底有一定的要求
  • SQL语句依赖于数据库,导致数据库移植性差

10. Mybatis和Hibernate的区别

  • Mybatis 不完全是一个ORM框架,需要自己手写SQL
  • Mybatis 直接编写原生SQL,可以严格控制SQL性能,但因为这样无法做到数据库无关性,
  • Hibernate对象/关系映射能力强,数据库无关性好,用Hibernate开发可以节省很多代码,提高效率

11. Mybatis有哪些标签

  • select/insert/update/insert
  • resultMap/sql/include
  • where/if/set/trim/foreach/choose/when/otherwise/bind
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值