MyBatis面试题

MyBatis面试题

1.什么是MyBatis?

MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatista避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML注解来配置和映射原生信息,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

2.MyBatis中使用#和$书写占位符有什么区别?

1.#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号
2.$ 将传入的数据直接显示生成在sql中
3.#方式能够很大程度防止sql注入,$方式无法防止sql注入

4.$方式一般用于传入数据库对象
5.一般能用#的就别用 $
注意:一般如果将表名、列名作为参数的动态功能操作时,必须使用$,而不能使用#。如MyBatis排序时使用order by动态参数时需要使用 $

3.MyBaits中的动态SQL是什么意思?

MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑,一般在我们的Mapper.xml映射文件中使用,MyBatis中用于实现动态SQL的标签元素主要有:
if , choose(when,otherwise) , trim , where , set , foreach

4.MyBatis中如何实现分页?

分页的目的是减少一次性查询出数据的额外开销,提高应用的性能。
1.SQL语句分页,利用传递的页码和每页显示数,使用limit分页
2.采用mybatis拦截器插件实现分页

5.MyBatis中如何实现数据映射?

MyBatis要求我们自己完成查询sql语句,然后对查询的类进行映射,默认情况下如果类和实体属性一致,则可以直接使用resultType进行关联映射,如果不一致,则需要自定义resultMap进行映射说明。当然如果数据库是下划线,而java中是驼峰命名,则可以在mybatis主配置中添加驼峰命名的全局setting配置即可。

6.MyBatis中的缓存如何使用?

1)缓存是为了提高程序的性能,把从数据库中查询出来和使用过的对象保存在内存中,当以后要使用某个对象时,先查询缓存中是否有这个对象,如果有则使用缓存中的对象,如果没有则去查询数据库,并将查询出来的对象保存在缓存中,以便下次使用。
2)MyBatis中有一级缓存和二级缓存,其中一级缓存是SqlSession级别的缓存,在同一个Sqlsession操作时都会默认使用,当会话关闭则会自动清空无法使用。二级缓存是Mapper级别的缓存,需要在主配置中声明开启,然后在Mapper.xml中使用 < cache >标签声明后才能使用。
3)缓存使用时需要注意,经常修改和准确度要求很高的数据不适合放在缓存中,因为很容易产生脏数据,从而造成程序中的数据不准确。

7.MyBatis中的使用流程?

1)首先项目中加入mybatis依赖,在maven的pom.xml中添加
2)创建并修改mybatis-config.xml核心配置文件(配置全局属性、别名、数据库连接、注册的Mapper等)
3)创建实体类和数据表映射
4)创建功能操作接口,完成抽象方法
5)针对抽象方法完成对应的Mapper.xml中的映射或者使用注解实现
6)运行时加载配置,产生SqlSessionFactory对象,然后调用openSession方法获取SqlSession,然后拿到Mapper接口代理对象,调用方法完成操作
7)关闭对话

8.MyBatis中的关联如何实现?

1)一般使用 < association>标签进行一对一的对象关联映射
2)使用< conllection>标签进行一对多的集合关联映射

9.MyBatis中的插件如何实现?

插件也可以理解为拦截器,即在mybatis执行某个sql语句或者结果处理前后,均可以自己编写代码进行额外的操作,Mybatis仅可以编写针对ParameterHandler、ResultSetHandler、StatementHandler、Executor这4种接口的插件。Mybatis使用JDK的动态代理,为需要拦截的接口生成代理对象以实现接口方法拦截功能,每当执行这4种接口对象的方法时,就会进入拦截方法,具体就是InvocationHandler的invoke()方法,只会拦截那些你指定需要拦截的方法,具体使用时还需要在拦截器类上进行签名以及在主配置文件中声明才能使用。

10.请描述Mybatis中的优缺点?

1)Mybatis的优点:屏蔽jdbc api的底层访问细节;自己定制sql能自定义映射,和将sql语句与java代码进行分离;提供了将结果集自动封装称为实体对象和对象的集合的功能,queryForList返回对象集合,用queryForObject返回单个对象;提供了自动将实体对象的属性传递给sql语句的参数。其次mybatis很好的跟spring集成。
2)Mybatis的缺点:SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求,SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

11.请描述MyBatis如何进行批量操作?

mybatis中提供了< foreach>标签,可以对集合、数组进行循环,从而实现动态的批量操作。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值