前边我们讲过了Mybatis框架的逆向工程,即通过数据库中的表来生成对应的Java代码,Java代码包括POJO类、Mapper接口和Mapper.xml映射文件。只需要配置好heneratorConfig.xml中的数据库连接属性、数据库中对应的表和生成Java代码所在的然后运行GeneratorSqlmap类中的main方法就可以生成Java的代码了。
学习过了两个持久层的框架Hibernate和Mybatis,今天我们从技术选型的角度来区分一下这两个持久层框架的异同。
首先需要关注的是二者的本质区别,Hibernate是一个ORM框架(对象关系映射),是不需要写SQL的,它只是需要编写一种面向对象的SQL语句,所以当他执行数据库操作的时候,程序向数据库发出的SQL它是很难修改的,这也是它的缺点,即不够灵活。而Mybatis则不容,它需要程序员来编写SQL,并且对输入参数与SQL参数之间、查询结果和Java的POJO对象之间通过mapper.xml的方式进行了映射,所以他是一个半ORM类型的持久层框架。
Hibernate的HQL查询语言使用了硬编码,且是写在Java代码中,这样一旦我们需要修改,那么就要重新编译Java代码,当一个Java工程体量很大时,就会浪费很多时间,而Mybatis将SQL语句写在了mapper.xml配置文件中,我们修改过后不需要重新编译Java代码就可以重新执行,利于维护和修改。
其次Hibernate可以通过编写好的Java对象生存对应的数据库的表格,而Mybatis可以通过逆向工程将数据库中的表格生成对应的Java代码,Mybatis的实用性较高,因为我们在实际项目中可以通过UML工具如PowerDesigner来生成数据库表格,然后通过数据库表格生成Java代码,之后改一改就可以使用了,很省事。
但其实Hibernate没有网络上没有对应的逆向工程直接让我们使用,但是他提供了了个Hibernate tools可以让我们来使用,并且逆向生成的代码不需要hbm.xml文件,可以直接使用注解的方式对pojo和数据库表格的内容完成映射。