-
conception
-
是什么
-
持久化框架
- 定制化SQL,存储过程以及高级映射
-
website
-
1,office website
- http://www.mybatis.org/mybatis-3/index.html
- 2,参考:http://www.cnblogs.com/kevin1990/p/6231122.html
-
3,实践:
- http://www.cnblogs.com/jeffen/p/6211186.html
-
Why mybatis
- 1,jdbc很多的代码
- 2,手动设置参数和获取结果集
- 解决
-
有什么
- 1,XML配置
- 2,XML映射文件
- 3,动态SQL
- 4,SQL语句构建器
-
能干什么
- 1,可对原生配置和原生map使用简单XML或注解
- 2将接口和pojo映射成db中的记录。
- 3,和Spring整合
- 4,逆向工程
-
最佳实践
-
1,selectone vs selectlist:
- 选择一条,选择一条或多条
-
2,#{} vs ${}
- #{}sql占位符,可有效防止sql注入
- ${} 变量占位符,实实在在参数:传入数据直接显示数据库中,无法防止SQL注入
- 结果:能用#{}尽量用#{}
- 延伸:%{}
- ,mybatis用在ognl表达式一种取值方式,eg:'%${username}%'
- http://www.cnblogs.com/jeffen/p/6211186.html
-
对比
-
共同
- 1,从配置文件得到sessionFactory(配置文件通常是xml,mapping文件)
- 2,由sessionFactory产生session
- 3,在session完成增删改查和事务提交
- 4,用完之后关闭session
-
mybatis
-
1,功能
- 1,半自动化ORM实现,Hibernate是全自动化
- 2,分页方式不同,mybatis可以逻辑、物理,Hibernate只用物理分页
- 2,灵活性:比Hibernate灵活,性能更好,比较轻量级
- 3,开发人员:mybatis学习门槛低,简单易学
-
Hibernate
- 1,Hibernate映射能力强,可以节省很多代码,提高效率
- 缺点:学习门槛较高,怎么设计O/R映射,性能和对象之间如何权衡。
-
question
-
find
-
1,除了增删改查,还有那些标签?--京东
- <resultMap>,<sql><include><select>
- 9个动态SQL标签:trim|where|set|foreach|if|choose|when|otherwise|bind
-
2,xml配置文件,有一个与dao接口对应的,这接口原理?参数不同时,能重载吗?
- 1,其实就是Mappter接口,映射文件中的namespace值
- 2,mapper接口没有实现类
- 3,dao接口工作原理是JDK动态代理,生成proxy对象拦截接口方法,执行MappedStatement的SQL,后将SQL执行结果返回。
- 4,不能重载,因为是权限名+方法名的保存和寻找策略
-
3,mybatis怎么进行分页,原理?
-
mybatis
- 逻辑分页:用RowBounds逻辑分页,先把数据全查出来,在offset和limit截断
- 物理分页:用插件Paginator 或PageHelper
-
延伸,分页方式
- 物理分页
- 数据库本身提供分页方式,不足:不同数据库不同搞法;好处就是效率高
- 逻辑分页
- 用游标分页,好处数据库统一,坏处效率低
- Hibernate使用物理分页
-
4,mybatis插件运行原理,怎么写一个插件?
- 四个ParameterHandler,ResultSetHandler,StatementHandler,Executor接口插件
- mybatis使用jdk动态代理,为需要拦截的接口生成代理
-
5,mybatis有动态SQL吗,做什么?原理?
- 有,以标签形式编写完成:逻辑判断和动态拼接SQL功能。(有9中标签)
- 原理:用ognl从SQL参数对象中技术表达式值,根据表达式值拼接SQL,来完成SQL功能
-
6,一对一,一对多怎么实现,区别?
- 将selectone to selectList
-
关联对象查询分类?
- 1,单独发一个SQL
- 2,嵌套查询,用join。优点?
- 是用一个SQL就讲主次对象全称查出来了。
-
7,延迟加载原理?
-
原理
- 为什么用?
- 为了避免无谓性能开销
- 是什么?
- 真正需要时,才真正的加载数据
- how:用CGLIB创建目标对象的代理对象,调用目标是进行拦截
-
mybatis中?
- 支持两个,association关联对象(一对一)和Collection(一对多)的延迟加载。
-
8,mybatis怎么执行批处理?
- 使用BatchExecutor完成批处理
-
9,有哪些Executor执行器,作用,区别?指定哪一种?
-
1,SimpleExecutor
- 每执行一次update或select,开启一次statement,用完就关闭。
- 2,ReuseExcecutor
- 3,BactchExceutor
-
10,为什么说mybatis是半自动orm映射工具?
- Hibernate可以根据关联模型获得对象,不需要写SQL语句
- mybatis要手动编写SQL语句来完成。
-
questions website
- http://www.cnblogs.com/huajiezh/p/6415388.html
-
question team
- 1,mybatis 动态sql,if判断,业务逻辑?
- 2,hibernate 封装性,不灵活 如何体现?
- 3,jpa,hibernate, mybatis, nativeSQL的差异
- 4,ORM,缓存,事务,池化
- 5,特别注意自己要去延伸:缓存(每个项目都有)、安装(银行中)