Mybatis

Mybatis是一个半自动ORM(对象关系映射)框架,内部封装了JDBC,开发时只需要关注SQL就可以,不需要花费精力去处理数据库驱动、数据库连接等过程。

优点:内置JDBC,减少代码冗余  SQL写在xml中,与程序解耦  兼容各种数据库 提供映射标签,对象和数据库字段相互映射

缺点:依赖数据库,导致数据库移植性差,不能随意更换数据库。

 

#{}: 就相当于标识符 ?,可以有效解决SQL注入问题。

${}: 相当于字符串拼接,直接拼接,会有sql注入问题。

sql注入:

select * from user_table where username=' "+userName+" ' and password=' "+password"'

传入参数为username = "1' OR '1'='1"; password = "1' OR '1'='1";时变为
select * from t_user where (username = '1' or '1'='1') and (password = '1' or '1'='1');

 

一个xml文件对应一个dao接口,dao接口的工作原理是什么?dao接口的方法可以重载吗?

原理: dao接口就是使用JDK代理,生成一个代理对象,代理对象会拦截dao接口的方法,根据接口的全限定名+方法名 去判断是那个xml文件的sql,不能重载,因为是根据 全限定名+方法名 去判断。

 

mybatis怎么实现的分页

(1) 自己编写分页: 获取数据的list,然后编写代码进行分页。

(2) 利用sql进行分页: 比如mysqllimit

(3) RowBounds实现分页

mybatis支持延迟加载(懒加载)吗?原理是什么?

支持的对象: Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指的就是一对一,collection指的就是一对多查询。

概念: 延迟加载的原理是在查询时只加载部分数据,当需要访问未加载的数据时再进行加载。这样可以减少查询所需的时间和资源,提高系统性能。

原理: MyBatis实现延迟加载的方式是使用代理对象,在访问未加载的数据时触发代理对象的方法,从而进行数据的加载。延迟加载可以通过配置文件或注解来实现。

 

mybatis的一级、二级缓存

一级缓存: 默认开启,在同一个sqlSession会话下的操作都会存入缓存,请求查询的数据都会存入缓存。当会话,有增删改操作,并提交的时候,缓存清空,没有失效时间,会随会话结束而结束。

二级缓存: 默认关闭,会话是全局的,一个sqlSessionFactory里面可能有多个sqlSessionsqlSession之间共享数据。当一级缓存关闭或者清除的时候会存进二级缓存。当会话中,有增删改的操作,并且commit时,缓存就会清空。有失效时间,cache默认是一小时,每当有数据存进来,就会判断是否超过一小时,如果超过就释放二级缓存。实体类还需要实现反序列化(Serializable接口)。

posted @   wrf12  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示