当前位置: 首页 > 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);
        }
    }
}

今天的分享就到此结束了

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

 

 

相关文章:

  • java-net-php-python-springboot舞房管理系统演示录像0512计算机毕业设计程序
  • 澳亚通过聆讯:上半年营收近3亿美元 元气森林与新希望乳业是股东
  • Linux中线程池的制作
  • Python——基础知识(1)
  • 笔试强训48天——day24
  • 【车载开发系列】UDS诊断---写入数据($0x2E)
  • ARM ACP
  • 评职称需要什么专利
  • CMake详细教程
  • CorelDRAW破解版是如何一步一步坑人的
  • 堆排序讲解
  • 网络工程师备考3章
  • 算法day42|背包问题
  • 《构建中小企业网络V7.1》实验
  • R语言贝叶斯Poisson泊松-正态分布模型分析职业足球比赛进球数
  • Matplotlib入门[05]——注释与标签
  • HarmonyOS/OpenHarmony应用开发-FA模型综述
  • Vue中的diff算法深度解析
  • redis常用数据结构基本命令
  • 公路交叉数(POJ3067)-树状数组解决逆序对
  • 电加热油锅炉工作原理_电加热导油
  • 大型电蒸汽锅炉_工业电阻炉
  • 燃气蒸汽锅炉的分类_大连生物质蒸汽锅炉
  • 天津市维修锅炉_锅炉汽化处理方法
  • 蒸汽汽锅炉厂家_延安锅炉厂家
  • 山西热水锅炉厂家_酒店热水 锅炉
  • 蒸汽锅炉生产厂家_燃油蒸汽发生器
  • 燃煤锅炉烧热水_张家口 淘汰取缔燃煤锅炉
  • 生物质锅炉_炉
  • 锅炉天然气_天燃气热风炉