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进行分页: 比如mysql的limit。
(3) RowBounds实现分页
mybatis支持延迟加载(懒加载)吗?原理是什么?
支持的对象: Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指的就是一对一,collection指的就是一对多查询。
概念: 延迟加载的原理是在查询时只加载部分数据,当需要访问未加载的数据时再进行加载。这样可以减少查询所需的时间和资源,提高系统性能。
原理: MyBatis实现延迟加载的方式是使用代理对象,在访问未加载的数据时触发代理对象的方法,从而进行数据的加载。延迟加载可以通过配置文件或注解来实现。
mybatis的一级、二级缓存
一级缓存: 默认开启,在同一个sqlSession会话下的操作都会存入缓存,请求查询的数据都会存入缓存。当会话,有增删改操作,并提交的时候,缓存清空,没有失效时间,会随会话结束而结束。
二级缓存: 默认关闭,会话是全局的,一个sqlSessionFactory里面可能有多个sqlSession,sqlSession之间共享数据。当一级缓存关闭或者清除的时候会存进二级缓存。当会话中,有增删改的操作,并且commit时,缓存就会清空。有失效时间,cache默认是一小时,每当有数据存进来,就会判断是否超过一小时,如果超过就释放二级缓存。实体类还需要实现反序列化(Serializable接口)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!