百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

我的Java Web之路48 - 数据库应用的开发步骤

yuyutoo 2024-11-07 14:17 3 浏览 0 评论

本系列文章旨在记录和总结自己在Java Web开发之路上的知识点、经验、问题和思考,希望能帮助更多(Java)码农和想成为(Java)码农的人。

目录

  1. 介绍
  2. 数据库选型
  3. 租房网的数据库选型
  4. 数据库设计
  5. 租房网的数据库设计
  6. 编写访问数据库的代码

介绍

我们的租房网应用目前使用Spring MVC和Spring IoC,已经将展示层、模型层和控制器层进行了初步的分离(参考这篇文章)。

但是模型层使用的仍然是模拟数据,实际生产环境(就是部署到真正供用户访问的服务器,一般还有开发环境测试环境)中肯定是使用真实数据,所以必须将一切数据都存储到数据库中(这里的数据库就是泛指可以永久保存数据的系统,比如文件系统、关系数据库、NoSQL数据库等,可以参考这篇文章)。

在Java中,主要使用JDBC(Java DataBase Connectivity,即Java数据库连接)来访问各种数据库,主要是关系数据库。

我们就使用JDBC来进一步解决租房网的数据持久化问题。不过,数据持久化问题不仅仅涉及持久化本身,还涉及数据持久化之后如何访问的问题。我将采用比较符合人的思维习惯的步骤来介绍这个过程。

下面的内容都是笔者自己的思考,不一定就正确或者适用,仅供读者朋友参考,也欢迎读者朋友批评指正。

数据库选型

首先,我们第一个想到的问题就是我们的数据要存在什么地方?

你可能会说,当然是硬盘上啊。这样回答也没有错,硬盘的确是当下主要的存储介质,不管是机械硬盘、固态硬盘、磁盘阵列。

然而,我们如果要直接编程操作存储介质那就太费劲了,于是人们发明了文件系统(也可以说是一种数据库管理系统)、数据库管理系统(可能是基于文件系统的),它们都提供相应的编程接口(即API),这样就能减轻数据库应用的编程负担。

但是,就目前来说,数据库分很多种,文件系统、关系数据库、NoSQL数据库等等,而每一种类又有很多具体的数据库产品,比如关系数据库就有Oracle、MySQL等等。我们到底要选择哪一种的哪一款产品呢?

嗯,这就是数据库选型的问题。它取决于下面的几个因素:

  • 数据本身的特点,比如数据从哪产生的、产生的频率多大、产生的数据是什么内容,比如数字、文本、图片、视频、音频、地理位置等;有的数据可以描述一个个现实的实体对象,有的数据描述的是实体对象的行为或者实体对象之间的关系;有的数据可以形成流,有的数据可以形成树、图等结构。结构化半结构化非结构化这三个概念也是描述数据本身的特点的。事实上,结构化数据基本上可以等同于关系数据,即可以提炼出表及其各个列(即实体及其各个属性)。
  • 人们使用数据的特点,是一次写入数据后以后只读不再更新,还是需要不断更新该数据,新增数据的频率是多大,更新数据的频率是多大,每次读取、新增、更新的数据量是多少,数据的读写分布在某个局部范围还是均匀分布,是单条处理居多还是批量处理居多,访问聚合数据居多还是独立数据居多,是每个数据操作独立还是往往多个数据操作是一个整体,是同一个数据多个用户需要访问还是基本上一个数据就一个用户访问等等。
  • 数据库产品本身的许可类型(License)、价格、特性、性能、稳定性、部署是否容易、扩容成本、运维成本等。

租房网应用的数据库选型

目前租房网应用的数据主要有两个,一个是用户数据,一个是房源数据。用户数据主要是通过用户注册添加的,但目前租房网应用并没有这个功能。房源数据也是用户发布而添加的,租房网应用同样还没有这个功能。

很明显,用户和房源很容易映射到现实中的实体,一个用户具有用户名和密码等属性,一个房源具有位置、房主、其他具体情况等静态信息(事实上,这些应该算是房产的属性,房产只有在需要出租出去的时候才成为房源,房源应该是房产的其中某种状态,但我们先不用搞这么复杂,就先这么统一对待吧),以及发布时间、发布者等动态/行为信息。

它们都是用户通过浏览器添加到我们的数据库中的,数据量应该也不会太大。后续的数据访问也主要是以读操作为主,短时间内访问量也不会太大。当然这个跟你对应用的定位有关,你如果希望应用迅速火爆起来,必然要实施各种营销和推广措施,这样的话短时间内数据量和访问量可能快速增长。

既然如此,我们完全可以采用关系数据库来解决数据的持久化问题。事实上,大多数Web应用都可以采用关系数据库,或者至少先拿关系数据库来尝试一下,那些所谓的大数据只存在于少数巨头互联网公司。

另外,开发环境和测试环境、生产环境的数据库应该不一样。在开发环境,我们最好选择不需要单独部署数据库服务器的数据库产品,否则,开发受限太多,既要部署数据库服务器,还受网络情况等影响,单元测试也不容易做。

测试环境和生产环境的数据库应该选择同款数据库才对。

所以,在租房网应用的开发环境中,我选择的是H2Database(可以参考这篇文章),直接在工程中添加它的一个JAR包即可。至于测试环境和生产环境,那就不作考虑了,毕竟它只是用来演示的,又不是真的要上线运营。

数据库设计

选定好了数据库,我们需要根据该数据库产品进行设计。

简单来说,对于关系数据库,我们就是要设计数据库中存在哪些表,每张表的各个列是什么,每个列的数据类型和约束是什么,是否要建立索引等等。

但事实上,要想进行数据库设计,一般先要对我们的业务、数据进行分析,实际上也属于需求分析的范畴。分析的方法也有很多,大家可以自行查阅相关资料。

当然,关系数据库的设计形成了比较系统的理论,什么关系模型、关系代数、关系演算、三范式、完整性约束等等,这里就不再赘述了。

当然,数据库设计可以采用文档工具记录下来,也可以采用所选定的数据库管理系统直接设计,也可以采用专业的第三方产品比如PowerDesigner等。

而设计也会有相应的方法论、理论、原则、规范等,这个也需要经过学习、实践、思考、总结等成长四步而沉淀到个人的,这里也不再赘述了。

一句话,方法论和工具都很重要。

租房网的数据库设计

至于我们的租房网,我们就继续采用简单、够用为原则,目前涉及到的数据就是用户数据和房源数据,那就设计用户表和房源表。

用户表设计三个列,一列是用户ID,一旦生成就不再变;一列是用户名;一列是密码。三个列都是字符串类型,但长度可以限制在某个固定长度,表的主键就是用户ID。实际上密码不能明文存储到数据库中,而是需要加密存储。

房源表也设计三个列吧,分别是房源ID、房源名称、房源详情,也都是字符串类型,但房源详情可以采用变长字符串,长度可以大一些,200、500都可以,但也不可过大,表的主键是房源ID。

这都是粗略的设计,仅用作演示我们开发基于数据库的应用是需要这么一步的,并不符合现实的需求,如果有需要,后面可以改进以符合现实的需求。

在测试环境和生产环境中,往往需要由数据库管理员(即DBA)来建立数据库、数据表,分配相应的权限,包括数据库用户名和密码,甚至是部署独立的数据库服务器。

在开发环境中,一般是采用嵌入式的数据库,建库、建表、添加测试数据等都是自己执行SQL脚本或编程来实现。

编写访问数据库的代码

这一步往往依赖于某个库。

在Java中,JDBC是最常用的数据库访问API,而它仅仅是个接口规范,实际上还需要具体某个支持JDBC的数据库产品提供的驱动包,它本质上就包含JDBC各个接口的实现类。

还记得这篇文章中提到的接口的作用和使用模式吗?

JDBC基本上也是遵从这种方式,上面的某个接口可以替换成JDBC中的某个接口,底下的实现类就是各个数据库厂商提供的驱动里面相应于该接口的某个实现类,上面使用该接口的外部程序就是我们的Web应用程序了,它仅仅使用JDBC接口而已,但实际运行时需要配置一个具体的数据库驱动(即JDBC的实现),这其实就是数据库驱动加载,后面再详细介绍。

当然,直接使用JDBC可能比较复杂,于是很多第三方厂商又将JDBC进行了封装,比如Spring就提供了JDBCTemplate来简化JDBC的操作,还有很多ORM(Object Relational Mapping,简称ORM,对象关系映射)框架也提供了某个方面的封装,这些以后再详细介绍。

下篇文章我们就初步使用JDBC来实现租房网应用的数据持久化吧。

相关推荐

野路子科技!2步教你把手机改造成一个FTP服务器,支持PC互传

哈喽,大家好,我是野路子科技,今天来给大家带来一个教程,希望大家喜欢。正如标题所言,就是教大家如何把售价改造成FTP服务器,而这个时候估计有朋友会问了,把手机改造成FTP服务器有什么用呢?现在有Q...

不得不看:别样于Server-U的群晖文件存储服务器的搭建与使用

我先前的作品中,有着关于Server-U的ftp文件存储服务器的搭建与访问的头条文章和西瓜视频,而且我们通过各种方式也给各位粉丝介绍了如何突破局域网实现真正意义上的公网访问机制技术。关于Server-...

Qt三种方式实现FTP上传功能_qt引入qftp库

FTP协议FTP的中文名称是“文件传输协议”,是FileTransferProtocol三个英文单词的缩写。FTP协议是TCP/IP协议组中的协议之一,其传输效率非常高,在网络上传输大的文件时,经...

Filezilla文件服务器搭建及客户端的使用

FileZilla是一个免费开源的FTP软件,分为客户端版本和服务器版本,具备所有的FTP软件功能。可控性、有条理的界面和管理多站点的简化方式使得Filezilla客户端版成为一个方便高效的FTP客户...

美能达柯美/震旦复印机FTP扫描怎么设置?

好多网友不知道怎么安装美能达/震旦复印机扫描,用得最多是SMB和FTP扫描,相对于SMB来说,FTP扫描安装步骤更为便捷,不容易出问题,不需要设置文件夹共享,所以小编推荐FTP来扫描以美能达机器为例详...

CCD(简易FTP服务器软件)_简单ftp服务器软件

CCD简易FTP服务器软件是一款很方便的FPT搭建工具,可以将我们的电脑快速变成一个FPT服务器。使用方法非常简单,只要运行软件就会自动生效,下载银行有该资源。该工具是不提供操作界面的,其他用户可以输...

Ubuntu系统搭建FTP服务器教程_ubuntu架设服务器

在Ubuntu系统上搭建FTP服务器是文件传输的一个非常实用方法,适合需要进行大量文件交换的场景。以下是一步步指导,帮助您在Ubuntu上成功搭建FTP服务器。1.安装vsftpd软件...

理光FTP扫描设置教程_理光ftp扫描设置方法

此教程主要用来解决WIN10系统下不能使用SMB文件夹扫描的问题,由于旧的SMB协议存在安全漏洞,所以微软在新的系统,WIN8/WIN10/SERVER201220162018里使用了新的SMB传...

纯小白如何利用wireshark学习网络技术

写在前面工欲善其事必先利其器!熟悉掌握一种神器对以后的工作必然是有帮助的,下面我将从简单的描述Wireshark的使用和自己思考去写,若有错误或不足还请批评指正。...

京东买13盘位32GB内存NAS:NAS系统安装设置教程

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:yasden你没有看错,我在京东自营商城购买硬件,组装了一台13盘位,32GB内存的NAS,硬盘有13个盘位!CPU是AMD的5500!本文...

FileZilla搭建FTP服务器图解教程_filezilla server搭建ftp服务器

...

python教程之FTP相关操作_python ftps

ftplib类库常用相关操作importftplibftp=ftplib.FTP()ftp.set_debuglevel(2)#打开调试级别2,显示详细信息ftp.connect(“I...

xftp怎么用,xftp怎么用,具体使用方法

Xftp是一款界面化的ftp传输工具,用起来方便简单,这里为大家分享下Xftp怎么使用?希望能帮到有需要的朋友。IIS7服务器管理工具可以批量管理、定时上传下载、同步操作、数据备份、到期提醒、自动更新...

树莓派文件上传和下载,详细步骤设置FTP服务器

在本指南中,详细记录了如何在树莓Pi上设置FTP。设置FTP可以在网络上轻松地将文件传输到Pi上。FTP是文件传输协议的缩写,只是一种通过网络在两个设备之间传输文件的方法。还有一种额外的方法,你可以用...

win10电脑操作系统,怎么设置FTP?windows10系统设置FTP操作方法

打印,打印,扫描的日常操作是每一个办公工作人员的必需专业技能,要应用FTP作用扫描文件到电脑上,最先要必须一台可以接受文件的FTP服务器。许多软件都需要收费标准进行,但人们还可以应用Windows的系...

取消回复欢迎 发表评论: