之前,结合教程以及书籍学习过mybatis,但是没有较为完整的整理一下mybatis 的学习心得以及重要的技能点,所以写一个系列性的文章来重新认识学习mybatis,加深自己的印象,首先了解一下Mybatis的简介:
持久层框架的出现和传统的JDBC编程是分不开的,Java程序都是通过JDBC连接数据库的,再者深入一点,其出现和Java的ORM的发展史息息相关。通过传统的JDBC的方式可以通过sql语言实现对数据库的编程,JDBC只是定义了一些接口规范而具体的实现则是由各个数据库厂商实现,每个数据库都有其特殊性,所以没办法统一管理,也可以理解为,JDBC是一种桥接模式,它联通了数据库和我们的Java应用。
虽然提供了连接数据库的功能,但是同时也引入了巨大的问题,总结一般的整个过程,可以分为一下几步:
1.使用JDBC编程需要连接数据库,注册驱动和数据库信息。
2.操作Connection,打开Statement。
3.通过Statement执行sql,得到的结果使用ResultSet存放。
4.使用TesultSet读取数据,然后通过代码转换为具体的pojo对象。
5.最后关闭数据库连接,关闭相关的资源。
使用传统的JDBC方式也存在很大的弊端,工作量较大,先连接,后处理JDBC底层事务,处理数据类型,同时还需要Connection对象,Statement对象等的参与才能完成数据的虎丘以及ResultSet对象去拿到数据,可以发现,对于一个简单的sql查询都很复杂,如果涉及的复杂的应用,那工作量就更加巨大,于是ORM模型出现了。
简单的说,ORM模型就是数据库的表和简单的Java对象的映射关系模型,主要取决于数据库数据和pojo对象的相互映射。较为成功的一个框架为Hibernate框架:其时建立在若干的pojo和xml映射文件提供的规则映射到数据库表上的,换句话说我们可以直接通过pojo直接操作数据库的数据,他提供的时一种全表映射,并且Hibernate对JDBC的封装程度较高,大部分情况下可以不再编写SQL语言,只需要使用HQL就可以了。
Hibernate通过配置文件就可以把数据库的数据直接映射到pojo上,我们可以通过操作pojo去操作数据库记录,对于不擅长书写SQL的开发者是一个好消息。其主要的是通过建立Hibernate的工厂对象,用它来作为全局对象,产生Session接口,这样就可以操作数据库了。通过使用和了解,总结了一下优点:
1.清除了代码的映射规则,它全部被分离到了xml或者注解里面去配置。
2.无需在管理数据库连接,它也是配置在XML里面的。
3.一个会话中不需要操作多个对象,只需要操纵Session对象就可以了。
4.关闭资源时,只需要关闭一个Session就可以了。
因此通过Hibernate框架操作数据库比传统的JDBC的方式要方便的多,消除了大量的代码,此外同其他文档了解到,其还提供了级联,缓存,映射,一对多等功能。但是,Hibernate也是有很大缺陷,任何一个框架都有其不完美的地方,我们只需要根据自己的需求选择最合适的那个框架应用即可,其缺点总结如下:
1.全表映射带来的不便,例如更新时需要发送所有字段。
2.无法根据不同的条件组装SQL,对多表关联和复杂的sql查询支持较差,需要自己写SQL,同时也需要自己将数据组装成为pojo对象。
3.不能够有效的支持存储过程,虽然有HQL,但是性能较差,大型互联网系统往往需要优化SQL,而Hibernate做不到。这时候便出现了Mybatis框架。
这个框架能够解决Hibernate的不足,这是一个半自动映射的框架,其被成为半自动的是因为他需要手工配置POJO,sql和映射关系,而全表映射的Hibernate只需要提供pojo和映射关系就可以了。其实,mybatis是appache的一个开源醒目iBatis,2010年这个项目迁移到google code,并改名为Mybatis,2013年迁移到GitHub,目前有Github进行维护。
Mybatis需要提供下面三个文件,sql,映射规则和pojo。Mybatis虽然配置的要比Hibernate多,但是mybatis可以配置动态的sql,这也就解决了Hibernate的一些问题。同时,由于mybatis可以自己配置sql,所以也可以优化sql,也可以通过配置实现支持存储过程。而且,在一些规则基础上,可以实现自动映射,而不需编写任何映射规则,大大地提高了开发的效率和速度。
配置mybatis的配置文件,以及其对应的映射文件,实现准确的自动映射,还需要一个接口,不需要任何实现类,这样就能够实现sql和映射规则在xml文件里面进行了分离,同时也可以自由的进行sql的编写。
Hibernate作为一个较为流行的Java ORM框架,它确实编程简易,需要我们提供映射的规则完全可以通过IDE生成,其开发效率确实要高于Mybatis,假如项目的场景不是很复杂,而且性能要求不是很苛刻的时候,可以考虑使用Hibernate框架实现快速有效的开发。
但是若需要一个灵活的,同时,可以动态生成映射关系的框架,那么mybatis确实是一个较好的选择,它能够支持JDBC的大多数内容,包括事务,动态表名等,但是需要自己配置映射规则和sql,所以其开发的工作量相比较Hibernate要大一些。
关于mybatis的详细使用和配置将在后续的文章中继续讲解。