Java面试--框架--MyBatis

MyBatis

1.什么是MyBatis?

是一个半自动化的orm(关系映射)框架,只用关心sql就好了,因为内置JDBC不需要花时间去处理数据库驱动和连接等过程。

2.MyBatis优缺点?

  • 优点:
    ①内置了JDBC,使数据库连接更简单。
    ②解耦,语句写在xml文件中,便于管理。
    ③兼容各种数据库。
    ④提供映射标签,对象和数据库字段相互映射。
  • 缺点:
    ①对于业务复杂的场景,多表多字段,对于sql编写要求严格。
    ②sql语句依赖数据库,导致数据库移植性差,不能随意更换数据库。

3.MyBatis的执行过程?

① 创建SqlSessionFactory:可以通过配置或代码来创建;
② 通过SqlSessionFactory创建SqlSession:SqlSession可以理解为程序和数据库之间的桥梁;
③ 通过sqlSession来执行数据库:先获取Mapper映射再执行SQL语句;
④ 调用commit()提交事务;
⑤ 调用close()关闭会话。

4.什么是sql注入? #{}和${}区别?

  • sql注入:在应用输入参数时输入恶意查询语句或插入语句,在sql解析执行是进行攻击。比如:在登录时输入密码时加入or语句,此时用${}就会出现sql注入问题。
  • #{}:相当于标识符 ?,可有效解决sql注入问题;
  • ${}:相当于字符串拼接,直接拼接,会有sql注入问题。

5.resultType和resultMap区别?

  • resultType:返回实体类、Integer、Map等 ;
  • resultMap:自定义实体类。

6.dao的工作原理?dao接口方法可以重载吗?

  • 原理:使用JDK代理,生成代理对象,代理对象会拦截dao接口方法。根据接口全限定名+方法名去判断是哪个xml文件sql;
  • 不能重载:根据全限定名+方法名判断的
    全限名:xml文件的namespace 方法名:映射文件中的Statement的id值

7.mybatis怎么实现分页?

①代码分页,获取所有list然后进行代码分页,这种速度不快。
②利用sql中limit分页。limit语法:limit [offset,] rows; offset:开始的行数 rows:返回每页具体行数。limit后可以是一个参数也可以是两个参数。
③使用RowBounds实现分页 new RowBounds(开始行数,查询每页总行数);
④使用PageHelper插件实现分页。注意的是离它最近的SQL有效。

8.MyBatis的一级、二级缓存?

缓存:存在内存中的数据,因为缓存速度更快
缓存适用场景:①.查询数据长时间不会改变 ②.查询数据正确与否不影响操作
一级缓存:默认开启,在同一个会话中操作都会存入缓存,会话中有增删改操作时提交后就会清空缓存,没有失效时间,会话周期结束就会释放。
二级缓存:默认关闭,开启需配置,会话是全局的会有多个会话,当一级缓存清除或者关闭就会存入二级缓存,这个有一小时失效时间。

9. 延迟加载?

什么是延迟加载:顾名思义就是等一会加载,当需要访问未加载的数据时再进行加载,这样可以减少时间和资源,提高系统性能。
延迟加载:多张表关联查询操作时用到一种方案。如果单表查询完全没有延迟加载概念。
如查询用户和部门的信息,如果只需要用户信息,不需要部门信息,这时候就可以用延迟加载来处理。

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值