MyBatis面经
一、为什么MyBatis是半ORM框架?
框架 | ORM | 原因 |
---|---|---|
MyBatis | 半自动ORM | MyBatis内部封装了JDBC、加载驱动、创建连接、创建Statement等过程,开发者只需要关注如何编写SQL语句,其它的都不需要关注,因此是半自动ORM框架。 |
Hibernate | 全自动ORM | 使用Hibernate查询关联对象时,可以根据对象关系模型直接获取,因此称为全自动ORM框架。 |
二、MyBatis的编程步骤?
步骤 | 描述 |
---|---|
Step1 | 创建SqlSessionFactory |
Step2 | 通过SqlSessionFactory创建sqlSession |
Step3 | 通过sqlSession操作数据库 |
Step4 | 调用sqlSession.commit() 提交事务 |
Step5 | 调用sqlSession.close() 关闭会话 |
三、#{} 和 ${} 的区别?
形式 | 作用 |
---|---|
#{} | 预编译处理,可以防止SQL注入 |
${} | 字符串替换 |
四、Mapper(Dao)接口的工作原理
形式 | 作用 |
---|---|
Step1 | Mapper接口是没有实现类的,当调用接口中的方法时,是通过接口全限定名 + 方法名的拼接字符串作为key值,定位MapperStatement的。因此,Mapper接口中的方法是不能重载的。 |
Step2 | Mapper接口底层原理是Jdk动态代理,MyBatis运行时会使用Jdk动态代理,为Mapper接口生成代理对象proxy,然后代理对象proxy会拦截接口中的方法,然后之幸MapperStatement对象所代表的sql语句,最后将sql的执行结果返回。 |