Java 持久层概述

Java 持久层概述JDBCJavaData 是一系列接口规范 Java 程序都是通过 JDBC 连接数据库的 然后通过其执行 SQL 对数据库进行操作 DBC 只是 Sun 公司定义的接口规范 具体实现是交由各个数据库厂商去实现的 因为每个数据库都有其特殊性 这些是 Java 规范没办法确定的 importjava sql importjava util logging Level importjava util logging Logger publicclas

微信公众号_CoderLi

JDBC

Java Database Connectivity 是一系列接口规范。Java 程序都是通过 JDBC 连接数据库的、然后通过其执行SQL、对数据库进行操作。

DBC 只是 Sun 公司定义的接口规范、具体实现是交由各个数据库厂商去实现的、因为每个数据库都有其特殊性、这些是 Java 规范没办法确定的

微信公众号:CoderLi

import java.sql.*; import java.util.logging.Level; import java.util.logging.Logger; public class JdbcExample { 
    public static void main(String[] args) { 
    JdbcExample example = new JdbcExample(); Role role = example.getRole(1L); System.out.printf("role_name => " + role.getRoleName()); } public Role getRole(Long id) { 
    Connection connection = this.getConnection(); PreparedStatement ps = null; ResultSet rs = null; try { 
    // 操作 Connection,打开 Statement 对象 ps = connection.prepareStatement("select id,role_name,note from t_role where id = ?"); ps.setLong(1,id); // 通过 Statement 执行 SQL,返回结果到 ResultSet 对象 rs = ps.executeQuery(); // 通过 ResultSet 读取数据,然后通过代码转化为具体的 POJO 对象 while (rs.next()){ 
    Long roleId = rs.getLong("id"); String roleName = rs.getString("role_name"); String note = rs.getString("note"); Role role = new Role(); role.setId(id); role.setRoleName(roleName); role.setNote(note); return role; } } catch (SQLException e) { 
    Logger.getLogger(JdbcExample.class.getName()).log(Level.SEVERE,null,e); } finally { 
    this.close(rs,ps,connection); } return null; } private Connection getConnection(){ 
    // 使用 JDBC 编程需要连接数据库,注册驱动和数据库信息 Connection connection = null; try { 
    Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/mybatis1?characterEncoding=utf8"; String user = "root"; String password = "root"; connection = DriverManager.getConnection(url,user,password); } catch (ClassNotFoundException | SQLException e) { 
    Logger.getLogger(JdbcExample.class.getName()).log(Level.SEVERE,null,e); return null; } return connection; } private void close(ResultSet rs,Statement stmt,Connection connection){ 
    // 关闭数据库相关资源 try { 
    if (rs != null && !rs.isClosed()){ 
    rs.close(); } } catch (SQLException e) { 
    Logger.getLogger(JdbcExample.class.getName()).log(Level.SEVERE,null,e); } try { 
    if (stmt != null && !stmt.isClosed()){ 
    stmt.close(); } } catch (SQLException e) { 
    Logger.getLogger(JdbcExample.class.getName()).log(Level.SEVERE,null,e); } try { 
    if (connection != null && !connection.isClosed()){ 
    connection.close(); } } catch (SQLException e) { 
    Logger.getLogger(JdbcExample.class.getName()).log(Level.SEVERE,null,e); } } } 
  • 注册数据库驱动类,指定数据库地址,其中包括 DB 的用户名、密码及其他连接信息;
  • 调用 DriverManager.getConnection() 方法创建 Connection 连接到数据库;
  • 调用 Connection 的 createStatement() 或 prepareStatement() 方法,创建 Statement 对象,此时会指定 SQL(或是 SQL 语句模板 + SQL 参数);
  • 通过 Statement 对象执行 SQL 语句,得到 ResultSet 对象,也就是查询结果集;
  • 遍历 ResultSet,从结果集中读取数据,并将每一行数据库记录转换成一个 JavaBean 对象;
  • 关闭 ResultSet 结果集、Statement 对象及数据库 Connection,从而释放这些对象占用的底层资源。

ORM

ORM(Object Relational Mapping,对象-关系映射)框架来封装 1~6 步的重复性代码,实现对象模型、关系模型之间的转换。

微信公众号:CoderLi 微信公众号:CoderLi

常见的 ORM 框架 Mybatis、Hibernate

JPA

JPA 是在 JDK 5.0 后提出的 Java 持久化规范(JSR 338)。JPA 规范本身是为了整合市面上已有的 ORM 框架,结束 Hibernate、EclipseLink、JDO 等 ORM 框架各自为战的割裂局面,简化 Java 持久层开发。

微信公众号:CoderLi

Spring Data JPA

Spring Data JPA 是符合 JPA 规范的一个 Repository 层的实现

微信公众号:CoderLi

虽然市面上的绝大多数 ORM 框架都实现了 JPA 规范,但是它们在 JPA 基础上也有各自的发展和修改,这样导致我们在使用 JPA 的时候,依旧无法无缝切换底层的 ORM 框架实现。而使用 Spring Data JPA 时,由于Spring Data JPA 帮助我们抹平了各个 ORM 框架的差异,从而可以让我们的上层业务无缝地切换 ORM 实现框架。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231850.html原文链接:https://javaforall.net

(0)
上一篇 2025年11月17日 下午12:01
下一篇 2025年11月17日 下午12:22


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号