设为首页 加入收藏

TOP

MyBatis常见问题描述
2023-07-25 21:34:56 】 浏览:37
Tags:MyBatis 常见问

1 什么是MyBatis

   Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注 SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。
 
2 MyBatis优缺点
  优点:与各种数据库兼容,基于SQL语句编程,与Spring集成,提供映射标签
  缺点:SQL语句编写工作量大,数据库移植性差。
 
3 #{}和${}的区别是什么?
#{}防止SQL注入,提供系统安全。会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值。
${},就 是把${}替换成变量的值。
 
4 Mybatis的一级、二级缓存:
(1)一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空,默认打开一级缓存。
(2)二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap 存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache。默认不打开二级缓存,要开启
二级缓存,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置 ;
// 注意这里 executortype.batch
sqlsession sqlsession = sqlsessionfactory.opensession(executortype.batch);
try {
namemapper mapper = sqlsession.getmapper(namemapper.class);
for (string name : names) {
mapper.insertname(name);
}
sqlsession.commit();
}catch(Exception e){
e.printStackTrace();
sqlSession.rollback();
throw e;
}
finally {
sqlsession.close();
}
(3)对于缓存数据更新机制,当某一个作用域(一级缓存 Session/二级缓存Namespaces)的进行了C/U/D操作后,默认该作用域下所有 select 中的缓存将被 clear 掉并重新更新,如果开启了二级缓存,则只根
据配置判断是否刷新。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java多线程(一篇从0讲透) 下一篇SpringCloud(十一)- 秒杀 抢购

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目