当前位置: 首页 > news >正文

【JDBC】----封装工具类和ORM

分享第二十二篇励志语录

有些烦恼是我们凭空虚构的,而我们却把它当成真实去承受。想得太多只会毁了你,让你陷入忐忑,让实际上本不糟糕的事情,变得糟糕。阳光这么好,何必自寻烦恼。

 

目录

分享第二十二篇励志语录

一:封装工具类

1 为什么要封装工具类

2 重用性方案

2.1 方案思想

2.2 方案代码

3 跨平台方案

3.1 方案思想

3.2 方案代码

二、ORM

1 实体类(entity):零散数据的载体

2 ORM应用

2.1 创建表student

2 实现步骤

2.2 创建entity实体类

2.3 查询结果封装


一:封装工具类

1 为什么要封装工具类

  • 在实际JDBC中的使用中,存在着大量的重复代码:例如连接数据库、关闭数据库这些操作。

  • 我们需要把传统的JDBC代码进行重构,抽取出通用的JDBC工具类。以后连接任何数据库、释放资源都可以使用这个工具类。

 

2 重用性方案

2.1 方案思想

(1)新建一个工具类DBUtils。

(2)在工具类DBUtils类中封装获取连接、释放资源两个方法。

  • 提供public static Connection getConnection(){}方法。

  • 提供public static void closeAll(Connection connection,Statement statement,ResultSet resultSet){}方法

2.2 方案代码

package cn.bdqn.demo03;

import java.sql.*;

/**
 * 重用性方案
 * 获取连接
 * 释放资源
 */
public class DBUtils {

	static {// 类加载,执行一次!
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	// 1.获取连接
	public static Connection getConnection() {
		Connection connection = null;
		try {
			connection = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/java2217", "root", "123456");
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return connection;
	}

	// 2.释放资源
	public static void closeAll(Connection connection, Statement statement,
			ResultSet resultSet) {
		try {
			if (resultSet != null) {
				resultSet.close();
			}
			if (statement != null) {
				statement.close();
			}
			if (connection != null) {
				connection.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

3 跨平台方案

3.1 方案思想

(1)在项目src文件夹下创建db.properties文件,在文件中编写数据库驱动、数据库url、用户名、密码相关数据。

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/java2217
username=root
password=123456

(2)在工具类DBUtils类中读取db.properties配置文件数据。

定义private static final Properties PROPERTIES = new Properties();//读取配置文件的Map
​
定义static{
​
    //通过复用本类自带流,读取配置文件中的数据
​
    InputStream is = DBUtils.class.getResourceAsStream("配置文件路径");
​
    // 通过prop对象将流中的配置信息分隔成键值对
​
    PROPERTIES.load(is);
​
    //通过driverName的键获取对应的值(com.mysql.jdbc.Driver)
​
    String driverName=PROPERTIES.getProperty("driver");
    //注册驱动
    Class.forName(driverName);
}

(3)在工具类DBUtils类中封装获取连接、释放资源两个方法。

  • 提供public static Connection getConnection(){}方法。

  • 提供public static void closeAll(Connection connection,Statement statement,ResultSet resultSet){}方法

3.2 方案代码

package cn.bdqn.demo04;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class DBUtils {
	// //读取配置文件的Map
	private static final Properties PROPERTIES = new Properties();

	static {
		// 通过复用本类自带流,读取配置文件中的数据
		InputStream is = DBUtils.class.getResourceAsStream("/db.properties");

		try {
			// 通过prop对象将流中的配置信息分隔成键值对,将配置文件内容加载到properties集合
			PROPERTIES.load(is);
			// 注册驱动,通过driverName的键获取对应的值(com.mysql.jdbc.Driver)
			Class.forName(PROPERTIES.getProperty("driver"));
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	// 获取连接对象
	public static Connection getConnection() {
		Connection connection = null;
		try {
			connection = DriverManager.getConnection(
					PROPERTIES.getProperty("url"),
					PROPERTIES.getProperty("username"),
					PROPERTIES.getProperty("password"));
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return connection;
	}

	// 释放所有资源
	public static void closeAll(Connection connection, Statement statement,
			ResultSet resultSet) {
		try {
			if (resultSet != null) {
				resultSet.close();
			}
			if (statement != null) {
				statement.close();
			}
			if (connection != null) {
				connection.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

二、ORM

(1)ORM(Object Relational Mapping),对象关系映射。

(2)从数据库查询到的结果集(ResultSet)在进行遍历时,逐行遍历,然后一个字段一个字段的读取数据,取出的都是零散的数据。在实际应用开发中,我们需要将零散的数据进行封装整理。

(3)在Java中,将查询出来的数据封装成一个对象。

1 实体类(entity):零散数据的载体

  • 一行数据中心,多个零散的数据进行整理,一行数据(在数据库中称之为一条记录或者一个实体)对应Java中的一个对象。

  • 通过entity的规则对表中的数据进行对象的封装。

  • 表名=类名;列名=属性名;提供各个属性的getXxx()/setXxx()方法。

  • 提供无参构造方法、有参构造方法

  • 重写toString()方法

2 ORM应用

2.1 创建表student

1、创建一张学生表student,表的字段如下:

sid,学生编号,主键、自动增长。

name,学生姓名,字符串类型、唯一、非空。

age,年龄,int类型、非空。

phone,手机号码,字符串类型,非空

CREATE TABLE IF NOT EXISTS `student`(
    `sid` INT PRIMARY KEY AUTO_INCREMENT,
    `name` VARCHAR(10) UNIQUE NOT NULL,
    `age` INT NOT NULL,
    `phone` VARCHAR(11) NOT NULL
);

2、向student表中插入两条数据:

INSERT INTO `student` VALUES(1001,'zhangsan',19,'13112341234');
INSERT INTO `student` VALUES(1002,'lisi',19,'13866665555');

2 实现步骤

2.2 创建entity实体类

package com.cxyzxc.examples01;

/**
 * entity实体类
 * 
 * @author 程序员张小厨
 * 
 */
public class Student {
	/** 学号 */
	private int sid;
	/** 姓名 */
	private String name;
	/** 年龄 */
	private int age;
	/** 手机号码 */
	private String phone;

	// 无参构造方法
	public Student() {
		super();
	}

	// 有参构造方法
	public Student(int sid, String name, int age, String phone) {
		super();
		this.sid = sid;
		this.name = name;
		this.age = age;
		this.phone = phone;
	}

	// getXxx()/setXxx()方法
	public int getSid() {
		return sid;
	}

	public void setSid(int sid) {
		this.sid = sid;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	// 重写Object类中的toString()方法
	@Override
	public String toString() {
		return "id=" + sid + ", name=" + name + ", age=" + age + ", phone="
				+ phone;
	}

}

 

2.3 查询结果封装

package com.cxyzxc.examples01;
​
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
​
public class StudentJDBCQuery {
​
    public static void main(String[] args) {
​
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;
​
        try {
            // 2、获取连接对象(1、注册驱动在DBUtils类中完成了)
            connection = DBUtils.getConnection();
            // 3、获取发送SQL语句的对象
            statement = connection.createStatement();
            // 编写SQL语句
            String sql = "select * from student";
            // 4、执行SQL语句,得到结构集
            resultSet = statement.executeQuery(sql);
            // 5、遍历结果集,使用while循环进行遍历
            while (resultSet.next()) {
                // 如果有数据,根据列的编号获取每行每个字段的数据
                int sid = resultSet.getInt(1);
                String name = resultSet.getString(2);
                int age = resultSet.getInt(3);
                String phone = resultSet.getString(4);
                // 创建实体类对象
                Student student = new Student();
                // 将字段数据赋值给对应的实体类对象属性
                student.setSid(sid);
                student.setName(name);
                student.setAge(age);
                student.setPhone(phone);
                System.out.println(student);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtils.closeAll(connection, statement, resultSet);
        }
    }
}

今天的分享就到此结束了

创作不易点赞评论互关三连

 

 

相关文章:

  • 栾云平,带队到南京德云社演出引发热议
  • Spring Cloud(十五):微服务自动化部署 DevOps CI/CD、Maven打包、ELK日志采集
  • 研究研究 ES_OEMCONVERT 标志
  • 多线程与高并发(一)
  • 一张图让你牢记MySQL主从复制原理|原创
  • CleanMyMac2023一键清除垃圾缓存和恶意广告插件 时刻保持Mac畅快运行
  • PR-39 TFA 是富含脯氨酸和精氨酸的天然抗菌肽
  • HTML学生个人网站作业设计:公益专题扫黑除恶(HTML+CSS)
  • java计算机毕业设计跑腿管理系统源程序+mysql+系统+lw文档+远程调试
  • 给定一个已排序的数组,使用就地算法将重复的数字移除,使数组中的每个元素只出现一次,返回新数组的长度
  • c语言:关键字(二)
  • OpenGL 图像白平衡色温
  • Stable Diffusion模型阅读笔记
  • 三家前装出货超2万台,激光雷达明年「放量」是大概率事件
  • 图片扫描仪第一弹,我实现了一个办公位简笔画
  • 如何发布WMS/WMTS离线地图服务
  • 微软宣布 S2C2F 已被 OpenSSF 采用
  • 使用docker安装RocketMQ
  • Vue2基础篇-01-Vue2 入门概述
  • Java8 遍历List 使用stream().parallel()并发安全
  • 寄存器和移位寄存器分析与建模
  • Learning C++ No.4【类和对象No.3】
  • 详解视觉BEV3D检测模型: Fast-BEV: A Fast and Strong Bird‘s-Eye View Perception Baseline
  • PMT有两种基本模式――单光子计数和电流感应选择
  • 格式化并挂载ubi文件系统过程详解
  • 自由概率(Free probability)
  • 大数据之HBase基础
  • Python爬虫教你爬取视频信息
  • 基于微信小程序的火锅店点餐系统小程序
  • 一文带你吃透红黑树---红黑树如此简单
  • 2023年重庆高考588分能报什么大学 588分能上哪些院校
  • 2023年山东春季高考考试时间 什么时候考试
  • 单招被调剂可以不去吗 还能高考吗
  • 2023湖南双一流大学名单 湖南哪所学校好
  • 中专考大学要考什么科目 内容有哪些
  • 预计2023国家专项计划录取分数线是多少
  • 2021年浙江工商大学杭州商学院学费是多少 各专业收费标准
  • 神经科学专业课程有哪些
  • 2023软件工程专业课程有哪些 就业方向是什么
  • 现在进行时结构是什么 怎么构成的