高效掌握JDBC技术(二)| 掌握ORM思想 | 定义连接数据库的工具类(上)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 高效掌握JDBC技术(二)| 掌握ORM思想 | 定义连接数据库的工具类

一、ORM思想及实践

ORM框架思想:


广义上,ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的相互转换。 狭义上,ORM可以被认为是,基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口。


在对象模型和关系型模型之间实现映射

image.png

两者的区别:数据格式不同、操作数据的方式不同

两者的映射:

一张表的设计 – 一个类

表中的一个字段 – 类中的一个属性

表中的一行数据 – 一个对象

一条SQL – 一个方法

实践部分:


1、实体类

作用:跟数据库中表的设计进行映射,解决了两者之间数据格式不同的问题

java 数据库
类:对对象的设计 表:对字段的设计
属性 字段:列
对象

1.一张表对应一个实体类

2.类名必须与表名相关

3.类必须实现Serializable接口

4.一个字段对应一个属性

5.属性类型必须为引用类型

6.必须提供无参构造(建议全属性有参构造同步存在)

7.为了保证对象安全,正常对属性进行封装

/**
 * 映射t_user表
 */
public class User implements Serializable {
    private Integer id;
    private String name;
    private String sex;
    private Integer age;
    public User() {
    }
    public User(Integer id, String name, String sex, Integer age) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}

2、DAO模式

作用:用来解决两者之间数据操作方式不同的问题

image.png

实现:


一张表对应一个接口,接口中存放着对该表的所有操作的行为方法

接口名应与表名相关:t_user-->UserDao

包:com.xxx.dao

实现类:

一个实现类实现一个接口

实现类的命名:UserDao-->UserDaoImpl

包:com.xxx.dao.impl

优点:让方法声明与方法实现分离,可以促使接口成为一套行为规范,该规范可以拥有多种不同的实现方式,提高程序的可扩展性


UserDao接口:

package com.bz.dao;
import com.bz.entity.User;
/**
 * t_user的所有行为方法
 */
public interface UserDao {
    /**
     * 往表中添加一条信息
     * @param user  包含着所有属性值的对象
     * @return 受影响的行数
     */
    int insertUser(User user) throws  Exception;
    /**
     * 根据用户id查找指定用户信息
     * @param id  被查询的id
     * @return 对应的用户信息对象
     */
    User seleteUserById(Integer id) throws  Exception;
}

UserDaoImpl实现:

package com.bz.dao.impl;
import com.bz.dao.UserDao;
import com.bz.entity.User;
/**
 * 分别在不同的方法中使用JDBC6大步实现不同的功能方法
 */
public class UserDaoImpl implements UserDao {
    @Override
    public int insertUser(User user) throws Exception{
        //1. 加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2. 获取连接
        //用户名
        String username = "root";
        //密码
        String pwd = "123456";
        //连接的url
        String url = "jdbc:mysql://localhost:3306/baizhi2109?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai";
        Connection conn = DriverManager.getConnection(url, username, pwd);
        //3. 获取发送SQL的工具
        String sql="insert into t_user (u_name,u_sex,u_age) VALUES(?,?,?)";
        PreparedStatement ps = conn.prepareStatement(sql);
        //4. 发送并执行SQL
        //给占位符赋值:用参数对象的值给表中字段赋值
        ps.setString(1,user.getName());
        ps.setString(2,user.getSex());
        ps.setInt(3,user.getAge());
        int n=ps.executeUpdate();
        //5. 处理结果集  略
        //6.关闭资源
        ps.close();
        conn.close();
        return  n;//把受影响行数返回
    }
    @Override
    public User seleteUserById(Integer id) throws  Exception {
        User user=null;//用来返回的User对象
        //1. 加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2. 获取连接
        //用户名
        String username = "root";
        //密码
        String pwd = "123456";
        //连接的url
        String url = "jdbc:mysql://localhost:3306/baizhi2109?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai";
        Connection conn = DriverManager.getConnection(url, username, pwd);
        //准备发送SQL
        String sql = "select * from t_user where u_id=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        //发送SQL
        //给占位符赋值
        ps.setInt(1,id);
        ResultSet rs=ps.executeQuery();
        //处理结果集
        if (rs.next()){//判断结果集中是否存在内容
            Integer uid = rs.getInt("u_id");
            String uname = rs.getString("u_name");
            String usex = rs.getString("u_sex");
            Integer uage = rs.getInt("u_age");
            //根据字段值构建对应的User对象
            user= new User(uid, uname, usex, uage);
        }
        //关闭资源
        rs.close();
        ps.close();
        conn.close();
        return user;
    }
}

测试UserDao的接口实现类:

package com.bz.test;
import com.bz.dao.UserDao;
import com.bz.dao.impl.UserDaoImpl;
import com.bz.entity.User;
public class TestUser {
    public static void main(String[] args) throws Exception{
        //创建实现类对象
        UserDao ud=new UserDaoImpl();
    //测试查询方法
        User user= ud.seleteUserById(2);
        System.out.println(user);
        //创建用来添加的对象
        User user = new User("zhangsan", "男", 38);
        //调用添加方法,接收返回值
        int n = ud.insertUser(user);
        //判断返回值
        if (n>0){
            System.out.println("添加成功");
        }else{
            System.out.println("添加失败");
        }
    }
}
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
12天前
|
安全 Java 数据库连接
gbase8a JDBC常用特性-Kerberos认证方式连接
JDBC常用特性-Kerberos认证方式连接
|
13天前
|
Java 数据库连接 网络安全
JDBC常用特性-SSH隧道连接
JDBC常用特性-SSH隧道连接
|
1月前
|
数据库 索引
深入探索数据库索引技术:回表与索引下推解析
【10月更文挑战第15天】在数据库查询优化的领域中,回表和索引下推是两个核心概念,它们对于提高查询性能至关重要。本文将详细解释这两个术语,并探讨它们在数据库操作中的作用和影响。
53 3
|
1月前
|
数据库 索引
深入理解数据库索引技术:回表与索引下推详解
【10月更文挑战第23天】 在数据库查询性能优化中,索引的使用是提升查询效率的关键。然而,并非所有的索引都能直接加速查询。本文将深入探讨两个重要的数据库索引技术:回表和索引下推,解释它们的概念、工作原理以及对性能的影响。
77 3
|
2月前
|
存储 缓存 监控
数据库优化技术:提升性能与效率的关键策略
【10月更文挑战第15天】数据库优化技术:提升性能与效率的关键策略
96 8
|
2月前
|
存储 NoSQL 关系型数据库
数据库技术深度解析:从基础到进阶
【10月更文挑战第17天】数据库技术深度解析:从基础到进阶
99 0
|
3天前
|
存储 JSON NoSQL
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
29 15
|
1月前
|
负载均衡 网络协议 数据库
选择适合自己的数据库多实例负载均衡技术
【10月更文挑战第23天】选择适合自己的数据库多实例负载均衡技术需要全面考虑多种因素。通过深入的分析和评估,结合自身的实际情况,能够做出明智的决策,为数据库系统的高效运行提供有力保障。
114 61
|
21天前
|
SQL 定位技术 数据库
深入探索Django ORM:高效数据库操作的秘诀####
本文旨在为读者揭开Django ORM(对象关系映射)的神秘面纱,通过一系列生动的比喻和详实的案例,深入浅出地讲解其核心概念、工作原理及高级特性。我们将一起探讨如何利用Django ORM简化数据库交互,提升开发效率,同时确保数据的一致性和安全性。不同于传统的技术文档,本文将以故事化的形式,带领读者在轻松愉快的氛围中掌握Django ORM的精髓。 ####
|
1月前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
53 3

热门文章

最新文章