- Mybatis 中#和KaTeX parse error: Expected 'EOF', got '#' at position 6: 的区别? #̲相当于对数据 加上 双引号,相当于直接显示数据
#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是
111,那么解析成 sql 时的值为 order by “111”, 如果传入的值是 id,则解析成的 sql 为 order by “id”.
$将传入的数据直接显示生成在 sql 中。如:order by u s e r i d user_id userid,如果传入的值是 111,那么解析成 sql 时的值为
order by user_id, 如果传入的值是 id,则解析成的 sql 为 order by id.
Mybatis 的编程步骤是什么样的?
1 、 创 建 SqlSessionFactory
2、通过 SqlSessionFactory 创建 SqlSession
3、通过 sqlsession 执行数据库操作
4、调用 session.commit()提交事务
5、调用 session.close()关闭会话
Mybatis 中一级缓存与二级缓存?
- 一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或
close 之后,该 Session 中的所有 Cache 就将清空。 - 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap 存储,不同在于其存储作用域为
Mapper(Namespace),并且可自定义存储源,如 Ehcache。作用域为 namespance 是指对该 namespance 对应的
配置文件中所有的 select 操作结果都缓存,这样不同线程之间就可以共用二级缓存。启动二级缓存:在 mapper 配置文
件中:。
二级缓存可以设置返回的缓存对象策略:。当 readOnly="true"时,表示二级缓存返
回给所有调用者同一个缓存对象实例,调用者可以 update 获取的缓存实例,但是这样可能会造成其他调用者出现数
据不一致的情况(因为所有调用者调用的是同一个实例)。当 readOnly="false"时,返回给调用者的是二级缓存总缓
存对象的拷贝,即不同调用者获取的是缓存对象不同的实例,这样调用者对各自的缓存对象的修改不会影响到其他的调
用者,即是安全的,所以默认是 readOnly=“false”; - 对于缓存数据更新机制,当某一个作用域(一级缓存 Session/二级缓存 Namespaces)的进行了 C/U/D 操作后,
默认该作用域下所有 select 中的缓存将被 clear。