首页   快速返回

mybatis知识点     所属分类 mybatis 浏览量 51
#{}和${}的区别
#{} 预编译处理,${} 字符串替换。
#{}可以有效的防止SQL注入

like 写法

String name = "%xxx%";
select * from t_user where name like #{name}

name="xxx";
select * from t_user where name  LIKE CONCAT('%',#{name},'%'))

sql xml 标签 
select|insert|updae|delete
动态sql标签
trim|where|set|foreach|if|choose|when|otherwise|bind
使用OGNL从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql



Xml + dao接口
namespace + sqlId
Map< String, MappedStatement>
不支持重载
使用JDK动态代理为Dao接口生成proxy对象,代理对象proxy会拦截接口方法,执行MappedStatement所代表的sql,然后将sql执行结果返回。

Mapper接口方法名和mapper.xml中定义的每个sql的id相同;
Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同;
Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同;
Mapper.xml文件中的namespace即是mapper接口的类路径。


Mybatis分页
Mybatis使用RowBounds进行分页,对ResultSet执行内存分页(假分页,非物理分页)
分页插件原理
使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,
然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。

select * from student
拦截sql后重写为
select t.* from (select * from student)t limit 0,10

Mybatis插件运行原理

可以编写针对 ParameterHandler(参数处理程序) ResultSetHandler(结果集处理) StatementHandler Executor(执行)这4种接口的插件


sql执行结果封装

sql列别名
resultMap

https://gitee.com/dyyx/springboothello/blob/master/src/main/resources/mapper/UserMapper.xml


三种基本的Executor执行器
SimpleExecutor ReuseExecutor BatchExecutor
SimpleExecutor
每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。
ReuseExecutor
执行update或select,以sql作为key查找Statement对象,存在就使用,不存在就创建,
用完后,不关闭Statement对象,而是放置于Map< String, Statement>内,供下一次使用 
BatchExecutor
执行update(没有select,JDBC批处理不支持select),
将所有sql都添加到批处理中 addBatch ,等待统一执行 executeBatch 
它缓存了多个Statement对象,每个Statement对象都是addBatch()完毕后,等待逐一执行executeBatch()批处理。
与JDBC批处理相同。


MyBatis缓存
一级缓存 二级缓存
一级缓存 与 session关联 默认开启
二级缓存 作用域为 Mapper(Namespace) 可自定义缓存组件 譬如 Ehcache  默认关闭
使用二级缓存对象类需要实现Serializable序列化接口

上一篇     下一篇
关于如何挣钱的35条建议

代理的几种实现方式

RPC原理简介

dubbo功能模块介绍

网站架构演变过程

redis消息发布与订阅