正文
一、我的笔记
一.mybatis、hibernate及传统jdbc的对比?
1.1 传统jdbc连接数据库经过的过程
(1)使用jdbc编程需要连接数据库,注册驱动和数据库信息
(2)操作Connection,打开Statement对象
(3)通过Statement对象执行SQL,返回结果到ResultSet对象
(4)使用ResultSet读取数据,通过相关的代码转换成具体的POJO对象
(5)关闭数据库的相关资源
1.2 传统jdbc的弊端
(1)工作量相对较大。需要先建立数据库连接,然后处理jdbc底层事务,处理数据类型。还需要操作Connection对象、Statement对象和ResultSet对象去获取数据,并准确关闭它们。
(2)对jdbc编程可能产生的异常进行捕获处理并正确关闭资源,这个操作太复杂且繁琐,对于更复杂的应用程序就不适用。
*ORM模型:数据库的表和java对象的映射关系模型,通过这层映射关系,可以将数据库表的数据转换化为java对象,以便更加容易理解和应用java程序。
2.1 hibernate简介
为了解决数据库数据和POJO对象的相互映射,通过POJO可以直接操作数据库的数据,它提供一种全表映射模型,全表映射只需要提供POJO和映射关系即可
2.2 hibernate的优势
(1)消除代码的映射规则,它被分离到XML或者注解里面去配置
(2)无需再管理数据库连接,它也配置在XML里面
(3)一个会话中,不用操作多个对象,只要操作Session即可
(4)关闭资源只需要关闭一个Session即可
2.3 hibernate的劣势
(1)全表映射带来的不便,比如更新时需要发送所有的字段
(2)无法根据不同的条件组装不同的SQL
(3)对多表关联和复杂的SQL查询支持较差。需要自己写SQL,返回后,需要自己将数据组装为POJO
(4)不能有效支持存储过程
(5)虽然有HQL,但是性能较差。大型互联网系统往往需要优化SQL,而hibernate做不到。
2.4 hibernate模型(素材来自:process on)
3.1 mybatis简介
为了解决hibernate的不足,半自动映射的框架产生,半自动映射需要提供POJO、SQL和映射关系
3.2 mybatis的优势
(1)简单易学和容易掌握
(2)sql写在xml里,方便统一管理和优化
(3)提供xml标签,支持编写动态sql
(4)解除sql与程序代码的耦合
(5)提供映射标签,支持对象与数据库的ORM字段关系映射
3.3 mybatis的劣势
(1)编写sql语句工作量较大,尤其是字段多、关联多表时,更是如此
(2)sql语句依赖数据库,导致数据库移植差,不能更换数据库
(3)编写动态sql时,不方便调试,尤其逻辑复杂时
(4)缓存使用不当,容易产生脏数据
3.4 mybatis模型(素材来自:process on)
二、mybatis的基本构成
1. SqlSessionFactoryBuilder(构造器):根据XML配置或java编码来生成工厂接口SqlSessionFactory
2. SqlSessionFactory(工厂接口):创建会话SqlSession(单例模式)
3. SqlSession(会话):类似JDBC的Connection对象,既可以发送SQL去执行并返回结果,也可以获取Mapper的接口
4. SQL Mapper:mybatis新设计的组件,由一个Java接口和XML文件(或注解)构成的,需要给出对应的SQL和映射规则。它负责发送SQL去执行,并返回结果