Java面试题总结9:mybatis

mybatis的优缺点

优点:

基于SQL语句编程,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理,提供XML标签,支持编写动态SQL语句,并可重用,补充需要手动开关连接,很好的与各种数据库兼容,提供映射标签,支持对象与数据库的ORM字段关系映射,提供对象关系映射标签,支持对象关系组件维护

缺点:

SQL语句的编写工作量较大,对开发人员编写Sql语句的功底有一定要求

SQL语句依赖数据库,导致数据库移植性差,不能随意更换数据库

#{}和${}的区别是什么

#{}是预编译处理,是占位符,${}是字符串替换,是拼接符

mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement来赋值

mybatis在处理{}时,就会把{}替换成变量的值,调用statement来赋值

#{}的变量替换时在DBMS中,变量替换后,#{}对应的变量自动加上单引号

{}的变量替换时在DBMS外,变量替换后,{}对应的变量不会加上单引号、

使用#{}可以有效的防止sql注入,提高系统安全性

简述mybatis的插件运行原理,以及如何编写一个插件

mybatis的插件指的就是拦截器

mybatis只支持针对ParameterHandler ,ResultSetHandler,StatementHandler,Executor这四种接口的插件,mybatis使用jdk的动态代理,为需要拦截的接口生成dialing对象以实现接口方法拦截功能,每当执行这四种接口对象的方法时,就会进入拦截方法,具体就是InvovationHandler的invoke()方法,拦截你指定需要拦截的方法。

编写插件:

实现mybatis的interceptor接口并复写intercept()方法,如何再给插件编写注解,指定要拦截哪一个接口的哪些方法即可,在配置文件中配置编写的插件

java 复制代码
@Intercepts({@Signature(type =StatementHandler.class,method = "query" ,args = {
Statement.class, ResultHandler.class},

{@Signature(type =StatementHandler.class,method = "update" ,args = {
Statement.class, ResultHandler.class}
{@Signature(type =StatementHandler.class,method = "batch" ,args = {
Statement.class, ResultHandler.class})


invocation.proceed()执行具体的业务逻辑
相关推荐
CodeSheep程序羊7 分钟前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展
我是咸鱼不闲呀27 分钟前
力扣Hot100系列19(Java)——[动态规划]总结(上)(爬楼梯,杨辉三角,打家劫舍,完全平方数,零钱兑换)
java·leetcode·动态规划
加油,小猿猿1 小时前
Java开发日志-双数据库事务问题
java·开发语言·数据库
yuluo_YX1 小时前
Reactive 编程 - Java Reactor
java·python·apache
山岚的运维笔记1 小时前
SQL Server笔记 -- 第20章:TRY/CATCH
java·数据库·笔记·sql·microsoft·sqlserver
南极企鹅2 小时前
springBoot项目有几个端口
java·spring boot·后端
清风拂山岗 明月照大江2 小时前
Redis笔记汇总
java·redis·缓存
xiaoxue..2 小时前
合并两个升序链表 与 合并k个升序链表
java·javascript·数据结构·链表·面试
蚕豆哥2 小时前
【2026马年重启】我的 Primavera P6/Unifier 技术笔记,继续更新!
ai·oracle·项目管理·unifier·p6·进度管理·甲骨文
忧郁的Mr.Li2 小时前
SpringBoot中实现多数据源配置
java·spring boot·后端