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

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

yuyutoo 2024-11-07 14:17 2 浏览 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来实现租房网应用的数据持久化吧。

相关推荐

jQuery VS AngularJS 你更钟爱哪个?

在这一次的Web开发教程中,我会尽力解答有关于jQuery和AngularJS的两个非常常见的问题,即jQuery和AngularJS之间的区别是什么?也就是说jQueryVSAngularJS?...

Jquery实时校验,指定长度的「负小数」,小数位未满末尾补0

在可以输入【负小数】的输入框获取到焦点时,移除千位分隔符,在输入数据时,实时校验输入内容是否正确,失去焦点后,添加千位分隔符格式化数字。同时小数位未满时末尾补0。HTML代码...

如何在pbootCMS前台调用自定义表单?pbootCMS自定义调用代码示例

要在pbootCMS前台调用自定义表单,您需要在后台创建表单并为其添加字段,然后在前台模板文件中添加相关代码,如提交按钮和表单验证代码。您还可以自定义表单数据的存储位置、添加文件上传字段、日期选择器、...

编程技巧:Jquery实时验证,指定长度的「负小数」

为了保障【负小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【负小数】的方法。HTML代码<inputtype="text"class="forc...

一篇文章带你用jquery mobile设计颜色拾取器

【一、项目背景】现实生活中,我们经常会遇到配色的问题,这个时候去百度一下RGB表。而RGB表只提供相对于的颜色的RGB值而没有可以验证的模块。我们可以通过jquerymobile去设计颜色的拾取器...

编程技巧:Jquery实时验证,指定长度的「正小数」

为了保障【正小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【正小数】的方法。HTML做成方法<inputtype="text"class="fo...

jquery.validate检查数组全部验证

问题:html中有多个name[],每个参数都要进行验证是否为空,这个时候直接用required:true话,不能全部验证,只要这个数组中有一个有值就可以通过的。解决方法使用addmethod...

Vue进阶(幺叁肆):npm查看包版本信息

第一种方式npmviewjqueryversions这种方式可以查看npm服务器上所有的...

layui中使用lay-verify进行条件校验

一、layui的校验很简单,主要有以下步骤:1.在form表单内加上class="layui-form"2.在提交按钮上加上lay-submit3.在想要校验的标签,加上lay-...

jQuery是什么?如何使用? jquery是什么功能组件

jQuery于2006年1月由JohnResig在BarCampNYC首次发布。它目前由TimmyWilson领导,并由一组开发人员维护。jQuery是一个JavaScript库,它简化了客户...

django框架的表单form的理解和用法-9

表单呈现...

jquery对上传文件的检测判断 jquery实现文件上传

总体思路:在前端使用jquery对上传文件做部分初步的判断,验证通过的文件利用ajaxFileUpload上传到服务器端,并将文件的存储路径保存到数据库。<asp:FileUploadI...

Nodejs之MEAN栈开发(四)-- form验证及图片上传

这一节增加推荐图书的提交和删除功能,来学习node的form提交以及node的图片上传功能。开始之前需要源码同学可以先在git上fork:https://github.com/stoneniqiu/R...

大数据开发基础之JAVA jquery 大数据java实战

上一篇我们讲解了JAVAscript的基础知识、特点及基本语法以及组成及基本用途,本期就给大家带来了JAVAweb的第二个知识点jquery,大数据开发基础之JAVAjquery,这是本篇文章的主要...

推荐四个开源的jQuery可视化表单设计器

jquery开源在线表单拖拉设计器formBuilder(推荐)jQueryformBuilder是一个开源的WEB在线html表单设计器,开发人员可以通过拖拉实现一个可视化的表单。支持表单常用控件...

取消回复欢迎 发表评论: