iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >【JAVA高级】——吃透JDBC中的封装工具类、ORM和Date工具类
  • 769
分享到

【JAVA高级】——吃透JDBC中的封装工具类、ORM和Date工具类

数据库javamysql 2023-08-31 07:08:16 769人浏览 安东尼
摘要

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:乐趣国学的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:JAVA开发者成长之路

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。

🍎个人主页:乐趣国学的博客

🍊个人信条:不迁怒,不贰过。小知识,大智慧。

💞当前专栏:JAVA开发者成长之路

✨特色专栏:国学周更-心性养成之路

🥭本文内容:【JAVA高级】——吃透JDBC中的封装工具类、ORM和Date工具类

更多内容点击👇

                       【JAVA高级】——吃透JDBC中的SQL注入问题和解决方案

                       【JAVA高级】——一文学会JDBC操作数据库

本文目录

💖 封装工具类

✨ 为什么要封装工具类

✨ 重用性方案

💫 方案思想

💫 方案代码

✨ 跨平台方案

💫 方案思想

💫 方案代码

💖 ORM

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

✨ ORM应用

💫 创建表student

✨ 实现步骤

💫 创建entity实体类

💫 查询结果封装

✨ ORM优缺点

💫 优点

💫 缺点

💖 Date工具类

✨ 问题描述

✨ 与日期时间相关的类

💫 java.util.Date

💫 java.sql.Date

💫 SimpleDateFormat

✨ 封装DateUtils工具类

💖投票传送门(欢迎小伙伴们投票)


💖 封装工具类

✨ 为什么要封装工具类

  • 在实际JDBC中的使用中,存在着大量的重复代码:例如连接数据库、关闭数据库这些操作。
  • 我们需要把传统的JDBC代码进行重构,抽取出通用的JDBC工具类。以后连接任何数据库、释放资源都可以使用这个工具类。

在这里插入图片描述

✨ 重用性方案

💫 方案思想

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

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

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

💫 方案代码

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();}}}

✨ 跨平台方案

💫 方案思想

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

driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/java2217username=rootpassWord=123456

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

//读取配置文件的Map

定义private static final Properties PROPERTIES = new Properties();

定义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){}方法

💫 方案代码

package cn.bdqn.demo04;import java.io.IOException;import java.io.InputStream;import java.sql.*;import java.util.Properties;public class DBUtils {// //读取配置文件的Mapprivate 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),对象关系映射。它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。

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

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

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

  • 一行数据中心,多个零散的数据进行整理,一行数据(在数据库中称之为一条记录或者一个实体)对应Java中的一个对象。
  • 通过entity的规则对表中的数据进行对象的封装。
  • 表名=类名;列名=属性名;提供各个属性的getXxx()/setXxx()方法。
  • 提供无参构造方法、有参构造方法
  • 重写toString()方法

✨ ORM应用

💫 创建表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');

✨ 实现步骤

💫 创建entity实体类

package com.cxyzxc.examples01;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()方法@Overridepublic String toString() {return "id=" + sid + ", name=" + name + ", age=" + age + ", phone="+ phone;}}

💫 查询结果封装

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);}}}

✨ ORM优缺点

💫 优点

    1、隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来。

    2、ORM使我们构造固化数据结构变得简单易行。在ORM年表的史前时代,我们需要将我们的对象模型转化为一条一条的SQL语句,通过直连或是DB helper在关系数据库构造我们的数据库体系。而现在,基本上所有的ORM框架都提供了通过对象模型构造关系数据库结构的功能。这,相当不错。

💫 缺点

    1、无可避免的,自动化意味着映射和关联管理,代价是牺牲性能(早期,这是所有不喜欢ORM人的共同点)。现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的。

    2、面向对象的查询语言(X-QL)作为一种数据库与对象之间的过渡,虽然隐藏了数据层面的业务抽象,但并不能完全的屏蔽掉数据库层的设计,并且无疑将增加学习成本。

    3、对于复杂查询,ORM仍然力不从心。虽然可以实现,但是不值的。视图可以解决大部分calculated column,case ,group,having,order by, exists,但是查询条件(a and b and not c and (d or d))。

💖 Date工具类

✨ 问题描述

(1)数据库中存储的日期时间类型为java.sql.Date类型,Java应用层存储的日期时间类型为java.util.Date类型。

(2)从数据库获取的日期时间类型数据可以直接赋值给Java应用层的日期时间类型变量,因为java.sql.Date类是java.util.Date类的子类,向上转型(父类引用指向子类对象)是可以直接赋值的。

(3)Java应用层的日期时间类型数据不能直接存储在数据库中,需要进行相应的转换。

(4)preparedStatement.setDate(int parameterIndex, Date x)中Date为java.sql.Date类型。

✨ 与日期时间相关的类

💫 java.util.Date

(1)Java语言常规应用层面的日期时间类型,可以通过字符串创建对应的日期时间对象,但是已经过时。常用构造方法如下(很多构造方法已经过时):

(2)不能直接通过JDBC将java.util.Date类型数据插入到数据库中。

💫 java.sql.Date

(1)不可以通过字符串创建对应的时间对象,只能通过毫秒值创建对象(1970年1月1日0点0分0秒至今的毫秒值),常用构造方法如下:

(2)可以直接通过JDBC将java.util.Date类型数据插入到数据库中。

💫 SimpleDateFormat

(1)SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。

(2)SimpleDateFormat使得可以选择任何用户定义的日期-时间格式的模式。

(3)SimpleDateFormat应用如下:

package com.cxyzxc.examples04;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class SimpleDateFormatTest {public static void main(String[] args) {// 指定日期格式SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");try {String strDate1 = "2022-10-22";// 将字字符串解析成日期类型(java.util.Date)java.util.Date date1 = sdf.parse(strDate1);System.out.println("字符串解析成日期:" + date1);Date date2 = new Date();String strDate2 = sdf.format(date2);System.out.println("日期解析成字符串:" + strDate2);} catch (ParseException e) {e.printStackTrace();}}}

✨ 封装DateUtils工具类

package com.cxyzxc.examples04;import java.text.ParseException;import java.text.SimpleDateFormat;public class DateUtils {private static final SimpleDateFormat SIMPLEDATEFORMAT = new SimpleDateFormat("yyyy-MM-dd");// 字符串转换为java.util.Date类型日期时间public static java.util.Date strDateToUtilDate(String strDate) {try {return SIMPLEDATEFORMAT.parse(strDate);} catch (ParseException e) {e.printStackTrace();}return null;}// java.util.Date类型日期时间转换为java.sql.Date类型日期时间public static java.sql.Date utilDateToSqlDate(java.util.Date date) {// long date.getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT以来此 Date对象表示的毫秒数return new java.sql.Date(date.getTime());}// java.util.Date类转换为字符串类型public static String utilDateToString(java.util.Date date) {return SIMPLEDATEFORMAT.format(date);}}

💖投票传送门(欢迎小伙伴们投票)

来源地址:https://blog.csdn.net/hh867308122/article/details/127595227

您可能感兴趣的文档:

--结束END--

本文标题: 【JAVA高级】——吃透JDBC中的封装工具类、ORM和Date工具类

本文链接: https://www.lsjlt.com/news/384457.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 【JAVA高级】——吃透JDBC中的封装工具类、ORM和Date工具类
    ✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:乐趣国学的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:JAVA开发者成长之路 ...
    99+
    2023-08-31
    数据库 java mysql
  • 怎么在java中封装一个JDBC工具类
    本篇文章给大家分享的是有关怎么在java中封装一个JDBC工具类,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序...
    99+
    2023-06-06
  • 如何在java中封装一个JDBC工具类
    如何在java中封装一个JDBC工具类?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布...
    99+
    2023-06-14
  • 如何在Java中自定义封装一个JDBC工具类
    如何在Java中自定义封装一个JDBC工具类?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。步骤① 创建配置文件(config.properties),用于存放注册驱动和连接...
    99+
    2023-06-06
  • Java日期工具类的封装详解
    概述 在日常的开发中,我们难免会对日期格式化,对日期进行计算,对日期进行校验,为了避免重复写这些琐碎的逻辑,我这里封装了一个日期工具类,方便以后使用,直接复制代码到项目中即可使用。 ...
    99+
    2022-11-13
    Java日期工具类 Java日期类
  • HttpClient 4.0封装工具类是怎样的
    这篇文章将为大家详细讲解有关HttpClient 4.0封装工具类是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。以下为本人在实际开发过程中封装的HttpClient工具类,HttpC...
    99+
    2023-06-03
  • C#串口通信工具类的封装
    本文实例为大家分享了C#串口通信工具类的封装代码,供大家参考,具体内容如下  1、SerialPortHelper串口工具类封装 using System; using S...
    99+
    2024-04-02
  • Java超级实用的Freemarker工具类
    目录一、工具类二、测试一、工具类 public class FreemarkerUtil {         public static void execute(String f...
    99+
    2024-04-02
  • Pandas封装Excel工具类的方法步骤
    目录引言1、列表转Excel文件2、多个列表转Excel文件3、读取Excel表格数据4、合并多个Excel文件到一个文件中(每个文件对应一个工作表)引言 Excel是一种广泛使用的...
    99+
    2023-05-16
    Pandas封装Excel Pandas Excel封装
  • Redis工具类封装RedisUtils的使用示例
    此RedisUtil工具类的功能: 直接使用此RedisUtil工具类的所需条件: 项目基于SpringBoot。pom.xml中需要引入依赖spring-boot-starter...
    99+
    2024-04-02
  • Java利用Reflect实现封装Excel导出工具类
    目录定义ExcelExportEnum定义导出方法校验入参利用java反射获取Service中的所有method提取method中的入参对象,获取其Class传入参数,调用导出方法注...
    99+
    2022-11-13
    Java Reflect封装Excel导出工具类 Java Excel导出 Java Reflect
  • SpringBoot中操作Redis及工具类的封装详解
    目录一、引入依赖及进行配置二、使用三、Redis 操作工具类的封装一、引入依赖及进行配置 1.maven依赖的引入(继承了SpringBoot的父模块,所以不需要再声明版本) <...
    99+
    2023-05-19
    SpringBoot操作Redis方法 SpringBoot如何操作Redis SpringBoot操作Redis SpringBoot Redis
  • SpringBoot中Bean拷贝及工具类封装的实现
    目录一、使用Spring BeanUtils使用示例:二、Bean 拷贝工具类封装使用示例在我们SpringBoot 项目的开发中,经常需要做对象的拷贝和转化,例如我们需要把前端传给...
    99+
    2023-05-19
    SpringBoot Bean拷贝 springboot复制bean
  • Java时间工具类Date的常用处理方法
    目录前言Date 类构造方法常用方法前言 Date 类 Date 类表示系统特定的时间戳,可以精确到毫秒。Date 对象表示时间的默认顺序是星期、月、日、小时、分、秒、年。 构造方法...
    99+
    2024-04-02
  • java8日期工具类封装的实战记录
    目录前言在Java 8中如何处理日期和时间再封装Java8新增的日期、时间包总结前言 java现在应该是更新到16了,想想我当年刚参加工作的时候。普遍还都是java7,那时候没有Sp...
    99+
    2024-04-02
  • C#串口通信工具类的封装方法
    本篇内容介绍了“C#串口通信工具类的封装方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 1、SerialPortHelper串...
    99+
    2023-06-29
  • Java中的工具类有哪些
    这期内容当中小编将会给大家带来有关Java中的工具类有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。如下所示:工具类功能BeanUtils提供了对于JavaBean进行各种操作,克隆对象,属性等等Be...
    99+
    2023-05-31
    java 工具类 ava
  • Java中RedisUtils工具类的使用
    目录前言一.pom.xml引入所需依赖二.RedisUtils工具类三.如何使用工具类四.工具类中批量更新Redis Hash详解总结前言 本文将提供一个redis的工具类,可以用在...
    99+
    2024-04-02
  • Java日期工具类操作字符串Date和LocalDate互转
    目录字符串转DateDate转字符串字符串转LocalDateDate转LocalDateLocalDate转字符串两个日期的时间差一天的开始和结束时间工具类前言: 避免重复造轮子,...
    99+
    2024-04-02
  • Java的MD5工具类和客户端测试类
    什么是MD5? Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作