数据访问层
-
JDBC
通过SQL语句对数据库进行编程,JDBC(SUN)公司提供的一系列规范,具体实现由各个数据库厂商去实现,JDBC就是一种典型的桥连接模式- JDBC 创建数据库连接(注册驱动,数据库连接)
- 通过Connection获取Statement对象
- 通过Statement 对象执行SQL,返回结果ResultSet对象
- 通过ResultSet读取数据,然后通过代码转换成具体的POJ对象(java实体对象/JavaBean/实体类)
缺点: - 工作量相对比较大, 然后处理JDBC底层事务,处理数据类型
- 需要开发者自己处理Connection,Statement ,ResultSet对象获取数据,并且关闭
- 处理JDBC的编程异常, 对于一个简单的SQL处理都是比较复杂的
DBUtils -> ResultSet结果集的处理
对象关系映射: 数据库表和java对象(Plain, Ordinary java Object, 简称: POJO)的映射关系他主要解决数据库和POJO对象的相互转换
通过映射关系就可以简单迅速的把 数据库表的数据转换成POJO(映射文件,)只需要简单的配置就可以映射到java的实体类中
最初SUN公司推出JavaEE服务器端组件模型(EJB)EJB配置复杂,且使用范围小,于是很快被淘汰-
Hibernate
EJB的失败,应运而生的就是Hibernate框架
Hibernate 主要建立在POJO和XML映射(注解)直接操作实体类就可以对数据库中数据进行操作,他提供的是一种全表映射模型,
Hibernate 对JDBC封装是比较高,已经不需要编写SQl语句,只要使用HQL就可以了
对于不擅长SQL语句的程序员来说,Hibernate是一个很人性化的框架
优势- 配置了映射文件和数据库连接文件后,Hibernate可以通过Session操作,非常容易,消除了JDBC大的代码
- 提高了代码的易用性和可读性
- 提供级联操作,缓存,映射,一对多等功能
- 也可以通过HQL操作实体类
缺点 - 动态表名Hibernate没有办法实现
- Hibernate屏蔽了SQL语句,一张表中有上百个字段,而我们只需要一两列,不能自己适应
- 如果手写SQL还需要添加映射关系,和映射数据
- 全表映射,比如使用更新必须发送所有列所有字段,否则会见其他列设为null
- 无法根据不同的条件组装不同的SQL语句
- 对多张表级联和复杂SQL查询支持较差,需要自己写SQL语句,返回后需要将数据装成实体类
- 虽然提供HQL,但是性能较差,大型互联网项目往往需要优化SQL语句,Hibernate做不到
-
myBatis
- 更灵活,更方便
半自动映射框架,需要手动配置实体类(POJO) ,和SQL和映射关系(不会自动生成SQL语句)
需要自己配置映射文件还需要配置SQL语句 - SQL
- 映射规则
- POJO
- 更灵活,更方便
动态SQL语句可以根据不同的需求生成不同的SQL语句
- 自定义数据访问层(某些公司)
总结
JDBC 使用较少,因为需要编写太多的代码,操作麻烦, 还容易出错,不推荐
Hibernate 编写简单,只需要提供映射文件,完成可以通过IDE自动生成,而且不需要编写SQL语句开发效率高于JDBC和myBatis ,提供了缓存日志,级联等强大的功能复杂的查询,多表连接查询(5表查询)
如果你需要一个灵活的,可以动态生成映射文件的,那么myBatis就是一个好选择,上面能做的他都能做,需要自己编写SQL语句,开发人员必须熟练掌握SQL的编写方式mybatis的工作量稍高于Hibernate
Hibernate 适合简单的管理操作
myBatis 复杂的业务逻辑,没有关联的业务逻辑
JDBC 性能最高,但是代码工作量最大