MyBatis里的#{}和${}区别
- ${}相当于使用字符串拼接,将传递进来的参数原样拼接SQL中,存在SQL注入的风险
- #{}相当于使用占位符,解析传递进来的参数数据,可以防止SQL注入,提高系统安全性
Mybatis的工作原理
- 1.系统启动的时候会加载解析全局配置文件和对应的映射文件。
- 2.构建会话工厂、会话工厂创建SqlSession对象,该对象中包含执行SQL的所有方法
-
- Executor接口会根据SqlSession传递的参数动态地生产需要执行的SQL语句
-
- 在Executor接口的执行方法中,包含一个MappedStatement类型的参数,该参数是对映射信息的封装,用于储存映射的SQL语句的id、参数。
- 3.输入参数映射,在执行方法时,MappedStatement对象会对用户执行SQL语句的输入参数进行定义,Executor执行器会通过MappedStatement对象在执行SQL前,将输入的java对象映射到SQL语句中。
- 4.输出结果映射。在数据库中执行完SQL语句后,MappedStatement对象会对SQL执行输出的结果进行定义,Executor执行器会通过MappedStatement对象在执行SQL语句后,将输出结果映射至java对象中。
Mybatis的理解
基于java的持久层框架,支持定制化SQL储存过程,高级映射。
- 1.提供非常方便的API实现增删改查操作
- 2.支持灵活的缓存处理方案
- 3.提供丰富的灵活表情来实现复杂的业务处理。if foreach where
Mybatis里面的缓存机制
- 1.一级缓存,是SqlSession级别的一个缓存,也叫本地缓存,因为每一个用户在执行查询的时候,都需要使用SqlSession来执行,为了避免每一次都去查询数据库,Mybatis把查询出来的数据缓存到SqlSession的本地缓存里面,后续的SQL如果在命中缓存的情况,就可以直接从本地缓存去读取这样一个数据。
- 2.二级缓存,当多个用户在查询数据的时候,只要有任何一个SqlSession拿到了数据,就会放入二级缓存里面,其他的SqlSession可以直接从二级缓存里面去加载数据,它的查询流程为先查二级缓存,在查一级缓存,再查数据库。二级缓存相对一级缓存来说,它实现了SqlSession之间的缓存数据的一个共享
Mybatis的Xml映射文件中有哪些标签
- 1.select标签,用于数据查询操作
- 2.insert标签,插入
- 3.update标签,更新
- 4.delete标签,删除
- 5.esultMap标签,用于SQL返回与实体类映射关系信息
- 6.SQL标签,用于定义可重的SQL代码片段,以便多个SQL语句中使用,参数可以静态的确定下来,并且可以在不同的include的元素中定义不同的参数值
- 7.if单个条件判断,用于实现条件筛选
- 8.foreach标签用于更新或保存数据时的批量操作
- 9.choose、when、otherwise用于实现条件的多种判断