Mybatis原理

1:Mybatis中,#和$有什么区别?

#浮会将传入参数变成字符串类型,而$符会直接注入。一般用#符比较多,因为这样可以防止sql注入。

(in关键字中,如果后面跟着#符号,传入7,10这俩个参数,会只查询到7这个参数。因为in关键字后面如果跟着字符串,会通过强制类型转换(cast as int)将字符串转换成int类型,这样只转换了一个7)

2:Mybatis中如何传入多个参数?

一般将多个参数放在map中,通过SqlSession传入给对应的sql;

可将多个参数封装成一个对象来进行传入

可通过@param注解传入参数

通过索引方式传入多个参数

3:Mybatis中requestMap和RequestType的区别?

RequestType是直接返回类型,而RequestMap是对外部RequestMap的引用,当有些复杂查询用RequestType,把参数当做一个对象没有办法完成时,可以用RequestMap来当做集合去完成。

4:Mybatis中<,>怎么表示?

转义字符

CDATA

5:Mybatis是什么及工作流程?

Mybatis是一种(ORM)对象关系映射框架,将接口和实体类映射到数据库中,它通过读取对应的配置文件,根据配置文件生成SqlSessionFactory对象,也就是会话工厂,然后通过SqlSessionFactory对象生成SqlSesson对象,再通过该对象完成一系列对数据库的操作。

6:Mybatis如何解析xml?

Mybatis通过xml或者注解来进行配置,底层是通过反射来进行解析xml文件,java的反射机制是可以在运行时,获取任何一个所有的属性和方法,并且对类方法和字段进行操作,Mybatis底层就是通过它来解析xml

7:Mybatis如何实现二级缓存?

一次缓存:(默认开启)是SqlSession级别的缓存,缓存在SqlSession中,commit过后会清除

二级缓存:mapper级别的缓存,缓存在SqlSessionFactory中,需要开启,并且还需要实现序列化,(Serializable接口,实现序列化接口)commit过后还会存在,再次访问时就会先访问上次的缓存内容

8:Mybatis与Spring整合?

通过MapperFactoryBean,这个通过mapper接口产生的mapper的类,在里面配置对应参数,factorybean是找到对应接口,sqlSessonfactory指定对应sqlSessonfactory,sqlSessonTemplate用于指定对应sqlSessonTemplate。最后在通过mapper文件中namespace找到对应类,通过sqlsession对象找到对应sql,最后操作数据库。

9:mapper接口工作原理:

通过jdk的动态代理方式为mapper接口创建proxy对象,代理对象会拦截接口中的方法,使它执行mapperStatement所代表的sql语句,并且把结果封装返回。

10:Mybatis分页原理

  Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页。

可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。

原理:分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,添加对应的物理分页语句和物理分页参数。

11:MyBatis延迟加载:

在关联查询时,利用延迟加载,先加载主信息。需要关联信息时再去按需加载关联信息。这样会大大提高数据库性能。

12:mybatis中一级缓存和二级缓存的简单介绍

 MyBatis会在一个SqlSession对象中创建一个本地缓存,对于每一次查询,都会根据查询的条件去本地缓存中查找是否在缓存中,如果在缓存中,就直接从缓存中取出,然后返回给用户;否则,从数据库读取数据,将查询结果存入缓存并返回给用户。

  一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象,在对象中有一个(内存区域)数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。

 第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。当一个sqlSession结束后该sqlSession中的一级缓存也就不存在了。Mybatis默认开启一级缓存。

 二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession去操作数据库得到数据会存在二级缓存区域,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。

 二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace,不同的sqlSession两次执行相同namespace下的sql语句且向sql中传递参数也相同即最终执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。Mybatis默认没有开启二级缓存需要在setting全局参数中配置开启二级缓存。如果缓存中有数据就不用从数据库中获取,大大提高系统性能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值