Java Web简明教程–Java篇[14]–数据库操作简化

简介: Java Web简明教程–Java篇[14]–数据库操作简化

上一篇中演示的代码中,有很多重复部分,比如针对每个实体类如StudentInfo、ClassInfo、RoomInfo,都要写逻辑基本上是一模一样的查询、更新、删除、添加方法。既然是重复,那么可以想办法提取规则,精简代码。


猫哥想到的,有两个方向。


第一种,既然读出来的都是数据库表格的内存映射,那么最简单的,我们可以定义一个类如下:


public class Table{
    String column1;
    String column2;
    ...
    String columnN。
}



N的取值比数据库表中列数最多的表的列数再多一点就行。这样不管我们怎么从数据库中联多少表,我们拿出数据之后就按顺序往Table类的column1、column2等变量里面放就行。而删除、修改、增加直接写sql语句就行了,也很方便。


说到这里,其实可以用List<Map<String, String>>来直接存储一个表的所有数据。例如,可以使用这样的List<Map<String, String>>来存储我们上一篇中查询出来的学生数据:

public static void main(String[] args) {//测试
    StudentOperation stuOper=new StudentOperation();
    List students=stuOper.selectAll();
    List<Map<String, String>> table=new ArrayList<Map<String, String>>();
    for(Object obj:students){
      StudentInfo stu=(StudentInfo)obj;
      Map<String, String> row = new HashMap<String, String>();
      row.put("姓名", stu.getStudentName());
      row.put("班级", stu.getStudentClass().getClassName());
      table.add(row);
    }
    System.out.println(table.toString());
  }

来看下输出:


[{姓名=火星人, 班级=一年级一班}, {姓名=霸王龙, 班级=一年级一班}, {姓名=赵柳, 班级=一年级二班}]

1

OK,识货的人一看就知道,实在是漂亮,当然我们既然有了List<Map<String, String>> 这个模拟类型,也就不必要自定义StudentInfo等类了,直接将ResultSet读出的东西赋值给List<Map<String, String>>类型对象保存即可。


到了这里,是不是感觉快完美了?其实还差得远了,有没有发现我们每个Map<String,String>对象里面都保存了列名(比如姓名、班级)。而真实世界中只需要保存一次列名就行了,所以是不是应该再封装?其实在C#世界里有一个DataTable类,就是完美模拟了数据库表在内存中的形态,有兴趣的可以自己看下功能,然后在Java上实现下。


第一个方向,纯粹是简化了部分代码量,但是不够优雅。为啥不够优雅,最直观的,Java是面向对象的,而前面相当于把对象都砍掉了,没有对象,那封装、多态等面向对象带来的好处也就不好享受了。所以还得想想其他出路。


其实也很好想,我们可以让类的名字与数据库表名字相同,然后让类里面属性的名字与数据库列名字相同,这样规则就很明显了,数据库的结构我们不清楚,但是我们可以通过类的结构得出数据库表结构,进而就可以操作数据库了,而类的结构可以通过反射来获取,这样来看,是不是问题就解决了。


还有表之间的关系呢…看来光靠类结构描述的不够啊,所以还可以借助其他的东西例如xml文件、例如Java注解来描述更多的类和数据库结构之间的关系。嗯,可想而知这样的东西自己封装是非常麻烦的。哈哈,但是现在有现成的框架,我们只需要按框架规则写代码就OK了,轻松而愉快。这一类的框架代表是Hibernate和Mybatis,在后续的系列中,猫哥会介绍MyBatis的使用。



相关文章
|
1月前
|
存储 移动开发 大数据
HTML5 Web IndexedDB 数据库详解
IndexedDB 是一种高效的浏览器存储方案,允许在本地存储大量结构化数据,支持索引和事务,适用于需要离线和大数据处理的应用。它由数据库、对象仓库等组成,通过键值对存储数据,确保数据一致性和完整性。本介绍展示了如何创建、读取、更新和删除数据,以及事务和错误处理的最佳实践。
|
8天前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
|
29天前
|
网络安全 开发工具 数据安全/隐私保护
|
11天前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
35 4
|
13天前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。
|
10天前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
26 0
WK
|
16天前
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
19 0
|
1月前
|
前端开发 Java API
JAVA Web 服务及底层框架原理
【10月更文挑战第1天】Java Web 服务是基于 Java 编程语言用于开发分布式网络应用程序的一种技术。它通常运行在 Web 服务器上,并通过 HTTP 协议与客户端进行通信。
23 1
|
1月前
|
存储 移动开发 数据库
HTML5 Web IndexedDB 数据库常用数据存储类型
IndexedDB 支持多种数据存储类型,满足复杂数据结构的存储需求。它包括基本数据类型(如 Number、String、Boolean、Date)、对象(简单和嵌套对象)、数组、Blob(用于二进制数据如图像和视频)、ArrayBuffer 和 Typed Arrays(处理二进制数据)、结构化克隆(支持 Map 和 Set 等复杂对象),以及 JSON 数据。尽管不直接支持非序列化数据(如函数和 DOM 节点),但可以通过转换实现存储。开发者应根据具体需求选择合适的数据类型,以优化性能和使用体验。
|
1月前
|
SQL 存储 移动开发
HTML5 Web SQL 数据库详解
Web SQL 数据库是 HTML5 中的一种本地存储技术,允许在浏览器中使用 SQL 语言操作本地数据,支持离线访问和事务处理,适用于缓存数据和小型应用。然而,其存储容量有限且仅部分现代浏览器支持,标准已不再积极维护,未来可能被 IndexedDB 和 localStorage 等技术取代。使用时需谨慎考虑兼容性和发展前景。