Java开发工程师最新面试题库系列——Mybatis框架部分(附答案) (2)

流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用。

如果没有流式查询,我们想要从数据库取 1000 万条记录而又没有足够的内存时,就不得不分页查询,而分页查询效率取决于表设计,如果设计的不好,就无法执行高效的分页查询。因此流式查询是一个数据库访问框架必须具备的功能。

流式查询的过程当中,数据库连接是保持打开状态的,因此要注意的是:执行一个流式查询后,数据库访问框架就不负责关闭数据库连接了,需要应用在取完数据后自己关闭。

Mybatis模糊查询LIKE语句应该怎么写?

答:

1、${%field%}:存在SQL注入问题,不推荐

2、"%"#{field}"%"

3、CONCAT('%',#{field},'%')

4、bind标签了解

Mybatis配置文件中的SQL id是否能重复?

答:同一个namespace下是不能重复的

Mybatis如何防止SQL注入?

答:

1、使用#{}来设置参数

2、正则表达式过滤非法字符

Mybatis如何实现主键回填?

答:使用useGeneratedKeys="true",标识开启主键回填,keyProperty="id"指定主键回填设置到哪一个属性。

<insert useGeneratedKeys="true" keyProperty="id"> insert into t_book (b_name,author) values (#{name},#{author}); </insert>

Mybatis使用了哪些设计模式?

答:

Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder;

工厂模式,例如SqlSessionFactory、ObjectFactory、MapperProxyFactory;

单例模式,例如ErrorContext和LogFactory;

代理模式,Mybatis实现的核心,比如MapperProxy、ConnectionLogger,用的jdk的动态代理;还有executor.loader包使用了cglib或者javassist达到延迟加载的效果;

组合模式,例如SqlNode和各个子类ChooseSqlNode等;

模板方法模式,例如BaseExecutor和SimpleExecutor,还有BaseTypeHandler和所有的子类例如IntegerTypeHandler;

适配器模式,例如Log的Mybatis接口和它对jdbc、log4j等各种日志框架的适配实现;

Mybatis的缓存机制有什么作用?

答:做服务器的进程内部缓存,提高查询效率,降低数据库访问频率。Mybatis有三种缓存,一级缓存、二级缓存、第三方缓存EhCache,一级缓存时默认开启的,作用域时SqlSession。二级缓存默认关闭需要在配置中使用enableCache="true"开启,二级缓存时namespace作用域的。第三方缓存需要引入额外Jar包,并且在配置中开启二级缓存开关,配置第三方缓存的核心类。

Mybatis一级缓存和二级缓存有什么区别?

答:

img

1、作用域不同:

​ 一级缓存的作用域是SqlSession级别的Map,二级缓存是namespace级别的,也叫全局缓存

2、默认配置不同

​ 一级缓存默认开启,二级缓存默认关闭,需要在mybatis.cfg.xml配置文件中开启

<settings> <setting value="true"/> </settings

Mybatis-plus和TK-Mybatis是什么框架?

答:Mybatis的增强框架,帮助开发人员更加简化开发。这些框架提供了大部分的简单SQL语句封装的API,提供了分页插件,简化了配置流程。不过只对单表有好的支持,多表关联查询支持差,一般需要手动编写多表的SQL,不过可以原生和增强一起使用。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwxwz.html