持久层技术
2020年10月26日大约 2 分钟约 597 字
1. 持久层技术解决方案:
- JDBC 技术:Connection, PreparedStatement, ResultSet
- Spring 的 JDBCTemplate:Spring 中对 JDBC 的简单封装
- Apache 的 DBUtils:和 Spring 的 JDBCTemplate 很像,也是对 JDBC 的简单封装
- 以上这些都不是框架:JDBC 是规范,Spring 的 JDBCTemplate 和 Apache 的 DBUtils 都只是工具类。
2. 原始 JDBC 开发存在的问题:
- 数据库连接创建、释放频繁,造成系统资源浪费从而影响系统性能;
- SQL 语句在代码中硬编码,造成代码不易维护,实际应用中 SQL 变化的可能较大,SQL 变动需要改变 java 代码;
- 查询操作时,需要手动将结果集中的数据手动封装到实体中,插入操作时,需要手动将实体的数据设置到 SQL 语句的占位符位置。
3. MyBatis
Mybatis 是一个优秀的基于 Java 的持久层框架,它内部封装了 JDBC,使开发者只需要关注 SQL 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程,它使用了 ORM 思想实现了结果集的封装。
- ORM(Object Relational Mapping) :对象关系映射,即把数据库表和实体类及实体类的属性对应起来,让我们可以通过操作实体类就实现对数据库表的操作。实体类中的属性和数据库表的字段名称需要保持一致。
- Mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 Java 对象和 statement 中 SQL 的动态参数进行映射生成最终执行的 SQL 语句,最后由 mybatis 框架执行 SQL 并将结果映射为 Java 对象并返回。
与 Hibernate 相比,Hibernate 的学习成本比较高,而 SQL 语句并不需要开发人员完成,只需要调用相关 API 即可, 这对于开发效率是一个优势,但是缺点是没办法对 SQL 语句进行优化和修改。而 MyBatis 虽然需要开发人员自己配置 SQL 语句,MyBatis 来实现映射关系,但是这样的项目可以适应经常变化的项目需求。所以,使用 MyBatis 的场景是,对 SQL 优化要求比较高,或是项目需求或业务经常变动。