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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Tracert(traceroute)&Ping 工作原理分析

    Tracert(traceroute)&Ping 工作原理分析一、tracert工作过程分析Tracert命令用IP生存时间(TTL)字段和ICMP错误消息来确定从一个主机到网络上其他主机的路由。首先,tracert送出一个TTL是1的IP数据包到目的地,当路径上的第一个路由器收到这个数据包时,它将TTL减1。此时,TTL变为0,所以该路由器会将此数据包丢掉,并送回一个「ICMPtimeexceeded」消息(

    2022年9月24日
    2
  • struts2.3.32升级到struts2.5.26

    struts2.3.32升级到struts2.5.26下载 struts2 5 26jar 包官网下载更新 jar 新增或替换 commons io 2 6 jarlog4j api 2 12 1 jarognl 3 1 28 jarstruts2 core 2 5 26 jarstruts2 json plugin 2 5 26 jarstruts2 junit plugin 2 5 26 jarstruts2 spring plugin 2 5 26 jar 删除 xwork core 2 3 32 jar 修改 web xml

    2025年12月2日
    7
  • pycharm中pyqt5使用方法_对中仪使用方法视频

    pycharm中pyqt5使用方法_对中仪使用方法视频PyCharm中PyQt的使用方法一级目录二级目录三级目录一级目录二级目录三级目录

    2022年8月27日
    6
  • Java 中 Boolean 和 boolean的区别

    Java 中 Boolean 和 boolean的区别上次一个同学问 Boolean 类型的值不是只有 true 和 false 两种吗 为什么他定义的属性出现了 null 值 我们应该先明确一点 boolean 是 Java 的基本数据类型 Boolean 是 Java 的一个类 boolean 类型会在 赋零值 阶段给属性赋 false 而 Boolean 是一个类 会在 赋零值 阶段给对象赋 null 如果是静态属性 会在类加载时被赋值 如果是普通类属性 会在实例化对象时赋值 这两点可以了解一下 类加载机制 和 对象创建过程 类加载机制

    2025年6月14日
    5
  • 二传感器尺寸「建议收藏」

    二传感器尺寸「建议收藏」说到传感器的尺寸,其实是说感光器件的面积大小,这里就包括了CCD和CMOS。感光器件的面积越大,CCD/CMOS面积越大,捕捉的光子越多,感光性能越好,信噪比越高。下面是家用小DC图像传感器尺寸换算为公制的大小(单位为毫米):2/3英寸的画幅面积为(8.8×6.6mm)1/1.8英寸的画幅面积为(7.178×5.319mm)1/2英寸的画幅面积为(6.4×4.8mm)1/2.7英寸的画幅面…

    2022年6月12日
    49
  • Cordova App 打包全揭秘

    本文作者:大师兄(高武军)现就职于某公司移动端架构师兼产品开发。主要开发产品:mdn(适配app和微信的移动端解决方案),pageui(移动端ui组件库),formBuilder(可以让前端建表和操作表的表单设计器)。课程介绍点击查看原文Cordova是一个开源的移动开发框架。允许你用标准的Web技术——HTML5,CSS3和JavaScript做跨平台开发。应用在每个平台的

    2022年4月7日
    72

发表回复

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

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