mybatis的优缺点
优点:
- 基于SQL语句编程,比较灵活,不会对程序代码和数据库的现有设计造成影响;SQL语句与业务代码分离便于统一管理SQL,也接触了与业务代码的耦合。
- 与JDBC相比,减少了代码量,降低了冗余代码,也避免了手动打开和关闭SQL连接
- 提供了很多的第三方插件(分页、逆向工程)
- 提供了XML标签,支持动态SQL
- 提供了映射标签,支持对象与数据库的ORM字段关系映射
缺点:
- SQL语句依赖于数据库,导致可移植性差,不能随便切换数据库源,比如mysql和Oracle之间的切换
- SQL语句变量工作量较大,当字段比较多、关联表比较多时,对SQL编写能力有一定要求
$和#的区别
带#的变量,入参会经过prepareStatement预编译,经过编译之后再把入参拼接到SQL中;而带$符的变量的入参是直接拼接在SQL中,不会加''。直接拼接的这种方式可能会出现SQL注入风险,也就是入参作为一段SQL,然后拼接到原有的SQL语句后面,影响数据和系统安全。
mybatis的插件运行原理,如何编写一个插件
mybatis只支持ParameterHandler、ResultSetHandler、StatementHandler、Executor这四种接口的插件,Mybatis使用JDK的动态代理,为需要拦截的接口生成代理对象以实现方法拦截功能,每当执行这四种接口对象的方法时,就会进入拦截方法,具体就是InvocationHandler和invoke方法,可以指定需要看得的方法。
插件具体操作实现:编写类实现ibatis的Interceptor接口,在类上增加注解@Interceptors({@Signature(type="StatementHandler.class",method="query",args={Statement.class,ResultSetHandler.class})})和@Component,实现接口的interceptor方法,可以这里对执行的方法进行拦截
网友评论