当前位置: 首页>后端>正文

Mybatis 知识

实现原理

JDK动态代理,jdbc

启动流程

读取mybatis-config.xml

SqlSessionFactoryBuilder->sqlSessionFactory->openSession()->sqlSession->getMapper()->执行

sql注入

#{}是预编译处理,${}是字符串替换; 后者一般用来设置不同表名;

字符替换不能防止sql注入,所以可以自己加一些简单的判断,比如变量不能太长,或得在特定的集合里面。

Dao接口

Dao接口里的方法,是不能重载的,因为是全限名+方法名定位MappedStatement。

工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Dao接口生成代理proxy对象,代理对象proxy会拦截接口方法,转而执行MappedStatement所代表的sql,然后将sql执行结果返回。

返回结果封装

1.<resultMap>标签,逐一定义列名和对象属性名之间的映射关系

2.将列别名书写为对象属性名

Mybatis通过反射创建对象,同时使用反射给对象的属性逐一赋值并返回

缓存

分一级,二级缓存

一级缓存作用域为Session,基于 PerpetualCache 的 HashMap 本地缓存

二级缓存作用域为Mapper(Namespace),需要在sql文件指定开启,可以自定义存储源,比如用Ehcache


https://www.xamrdz.com/backend/3jq1938413.html

相关文章: