- Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建 statement 等复杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高。
- MyBatis 可以使用 XML 或者注解来配置和映射原生信息,将 POJO 映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
- 通过 xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过 Java对象和 statement 中 sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 Java 对象并返回(从执行 sql 到返回 result 的过程)
面试题:
通常一个 xml 映射文件,都会写一个 Dao 接口与之对应,请问,这个 Dao 接口的工作原理是什么?Dao 接口里的方法,参数不同时,方法能重载吗?
答:Dao 接口即 Mapper 接口,接口的全限名,就是配置文件中的 namespace 的值;接口的方法名,就是映射文件中 MapperStatement 的 id 值,接口方法内的参数,就是传递给 sql 的参数。
Mapper 接口时没有任何实现的,当调用接口方式,接口全限名 + 方法名拼接字符串作为 key 值,可唯一定位一个 MapperStatement。在 Mynatis中,每一个 <select>、<insert>、<update>、<delete>
标签都会被为一个MapperStateMment对象。
Mapper接口里的方法,是不能重载的,因为使用 全限名 + 方法名的保存和寻找策略。Mapper 接口的工作原理是 Jdk 动态代理,Mybatis 运行时会使用 Jdk 动态代理为 Mapper 接口生成代理对象 proxy,代理对象会拦截接口方法,转而执行 MapperStatement 所代表的 sq;,然后将 sql 执行结果返回。