MyBatis相关

MyBatis基本概念

MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生信息。将接口和Java的POJO映射为数据库中的记录

SqlSessionFactory

每个基于MyBatis的应用都是以一个SqlSessionFactory的实例为中心,SqlSessionFactory可以通过SqlSessionFactoryBuilder通过读取XML或者从一个预先定制的Configuration构建。
XML配置文件包含DataSource、TransactionManager。
SqlSession可以从SqlSessionFactory中获得

Mapper Instances

映射器是创建用来绑定映射语句的接口。映射器接口的实例是从SqlSession中获得的。
总体的生成顺序为SqlSessionFactoryBuilder -> SqlSessionFactory -> SqlSession -> Mapper -> POJO

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);

优缺点

优点

  • 易于上手和掌握
  • sql卸载xml里,便于统一管理和优化
  • 接触sql与升序代码的耦合
  • 提供映射标签,支持对象和数据库的ORM映射关系
  • 提供xml标签,支持动态sql

缺点

  • sql工作量大,多字段多关联时尤其明显
  • sql依赖于数据库,导致数据库移植性差
  • 由于xml里标签id必须唯一,导致DAO中方法不支持方法重载。
  • 字段映射标签和对象关系映射标签仅仅是对映射关系的描述,具体实现仍然依赖于sql。(比如配置了一对多Collection标签,如果sql里没有join子表或查询子表的话,查询后返回的对象是不具备对象关系的,即Collection的对象为null)
  • DAO层过于简单,对象组装的工作量较大。
  • 不支持级联更新、级联删除。
  • 编写动态sql时,不方便调试,尤其逻辑复杂时。

常见问题

MyBatis与Hibernate的对比

MyBatis是一个半自动化的ORM框架,需要自己编写sql而Hibernate是一个全自动化的。
MyBatis学习门槛低,更容易操作原生SQL,方便调优,但工作量更大。
Hibernate对象/关系映射能力强,数据库无关性好,可以不写SQL减少很多工作量。但是学习门槛更高,想要对SQL进行调优需要比较精通。

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

#{}是占位符替换,相当于’?’替换为对应的参数,可以防止SQL注入。
${}是纯为本替换,相关与sql的简单拼接,可以动态拼接表名等其他字段,更方便灵活但是有SQL注入的危险。

最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?

MyBatis可以通过配置在制定的目录下进行扫描xml文件和@Mapper的接口。接口的报名对应于xml中的namespace,接口的方法名对应于xml中的id字段。通过约定优于配置的方式可以自动将接口通过JDK动态代理,找到对应的xml的MappedStatement,进行sql的执行然后返回。

Mybatis比IBatis比较大的几个改进是什么?

  • 有接口绑定,包括注解绑定sql和xml绑定Sql ,
  • 动态sql由原来的节点配置变成OGNL表达式,
  • 在一对一,一对多的时候引进了association,在一对多的时候引入了collection节点,不过都是在resultMap里面配置
  • IBatis里面的核心处理类交SqlMapClient,MyBatis里面的核心处理类叫做SqlSession

参考链接
http://www.cnblogs.com/huajiezh/p/6415388.html
http://www.mybatis.org/mybatis-3/zh/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值