JDBC是由Sun公司制定的一套访问数据库的规范,除了DriverManager外,其他的全是接口,接口的具体实现由数据库厂商去实现(所以用JDBC需要添加数据库驱动包,驱动包里面的类就是JDBC规范那些接口的实现类),这样,程序员用JDBC操作所有实现这个规范的数据库都是一样的方法,只是针对不同的数据库sql可能不同。
Hibernate的底层是由JDBC去实现的,是对JDBC的封装,用hibernate的HQL语句,就可以不用考虑数据库之间的差异,因为hibernate会根据配置文件里面的dialect(数据库方言)和ORM配置文件把HQL语句翻译成能适应当前数据库的sql语句,然后从底层用JDBC去执行(增加了上层的处理,所以效率比JDBC慢),并根据映射文件把相应字段的结果封装到对象的相应属性中。
ibatis也是一个持久层框架,也是对JDBC的封装,但是效率比hibernate略高,因为ibatis不是用框架去生成相应的sql,而是由程序员自己写sql,然后底层的JDBC去执行,并通过映射文件,将SQL所需的参数,以及返回的结果字段映射到指定 PO类,因为少了类似hibernate把HQL翻译成SQL的过程,所以ibatis效率比hibernate更高。
在大型的项目中,尤其是大数据量的地方,一般都不用hibernate,因为用hibernate是以牺牲效率为代价的(尤其是大批量处理的时候尤为明显),最近我做了一个大批量处理几百万条数据的功能,我直接绕过公司框架的API,直接从底层用JDBC去做,效率高了不少。
jdbc是一套数据库访问标准,提供了一组接口,是JAVA语言访问数据库用到的东西
hibernate是一套ORM映射框架,提供以对象的方式访问数据,但底层还是要把对象映射为JDBC来访问的。
ibatis也是一套数据库访问框架,但它是把SQL语句给抽出来了,这样将来改语句的时候不用修改代码,底层也是JDBC
jdbc 一切都在你的掌握中
hibernate ORM 框架, 用起来容易; 让你用 对象的方式思考问题
ibatis 也是 ORM 框架,但是对应的 SQL 语句要你自己定义
全手动、自动化、半自动化
jdbc什么都要自己弄,代码很多,sql语句自己写
Hibernate等提供了全面的数据库封装机制的“全自动化”ORM 实现而言,“全自动”ORM 实现了 POJO 和数据库表之间的映射,以及 SQL 的自动生成和执行。
ibatis 对业务逻辑实现人员而言,面对的是纯粹的 Java对象,这一层与通过 Hibernate 实现 ORM 而言基本一致,而对于具体的数据操作,Hibernate 会自动生成SQL 语句,而ibatis 则要求开发者编写具体的 SQL 语句。