数据访问层 (DAO)
数据持久化
持久化:将程序中的数据在瞬间状态下和持久状态间转换的机制(JDBC)
主要持久化操作:保存、删除、读取、和查找。
采用面向接口编程,可以降低代码间的耦合性,提高代码的可扩展性和可维护性。
DAO模式
- DAO ( DataAccessObjects ,数据存取对象) :
位于业务逻辑和持久化数据之间实现对持久化数据的访问
2.组成部分:
DAO接口:把对数据库的所有的操作定义成抽象方法,可以提供多种实现。
DAO实现类:针对不同数据库给出DAO接口定义方法的具体实现。
实体类:用于存放于传输对象数据。
数据库连接和关闭工具类:避免数据库连接和关闭代码的重复使用,方便修改
3.DAO模式提供了访问关系型数据库系统所需操作的接口,将数据访问和业务逻辑分 离,对上层提供面向对象的数据访问接口
4.优势:① 隔离了数据访问代码和业务逻辑代码;② 隔离了不同数据库实现。
分层开发
优势:
- 每一层专注于自己功能的实现,便于提高质量
- 便于分工协作,提高效率
- 便于代码复用
- 便于程序扩展
特点:
- 每一层都有自己的职责
- 上层不关心下层的实现细节,上层通过下层提供的对外接口来实现其功能
- 上层调用下层的功能,下层不能调用上层的功能;下层为上层提供服务,而不使用上层提供的功能
原则:
① 封装性原则:每个层次向外提供公开的统一接口,隐藏内部的功能实现细节,其他层次不能也没有必要了解其内部细节。
② 顺序访问原则:下一层为上一层提供服务,而不使用上一层提供的服务
(业务逻辑层 ----> 数据访问层 业务逻辑层 <---- 数据访问层)
实体类
特征:1.属性一般用private修饰(getter/setter方法—---用public修饰);
2.最好实现java.io.Serializable接口支持序列化机制,可以将该对象转换成字节序列而保存在磁盘上或在网络上传输;
3.对实体类提供无参构造方法,根据业务需要提供相应的有参构造方法;
4.定义属性serialVersionUID,解决不同版本之间的序列化问题
(private static final long serialVersionUID=2070056025956126480L)
方法调用时:
表示层——>业务逻辑层——>数据访问层
写代码时:
数据访问层——>业务逻辑层——>表示层
实体类(表在面向对象中的实现):
表名——类名、字段——属性 编写一个实体类,将一个表用类实现;包名——entity或models存放实体类
测试类、网页、界面UI(表示层)——main方法所在的类
业务逻辑层(桥梁作用):
表示层的数据,传递到数据访问层
BaseDAO类:
对表进行操作的类(包存放)——数据访问层 对数据库的访问和操作(辅助类)
数据访问层 (DAO)的更多相关文章
- view是视图层+action是控制层+service是业务层+dao是数据访问层。
- servlet层调用biz业务层出现浏览器 500错误,解决方法 dao数据访问层 数据库Util工具类都可能出错 通过新建一个测试类复制代码逐步测试查找出最终出错原因
package com.swift.jztk.servlet; import java.io.IOException; import javax.servlet.ServletException; i ...
- 随机获得MySQL数据库中100条数据方法 驾照题库项目 MVC架构 biz业务层的实现类 根据考试类型rand或order通过dao数据访问层接口得到数据库中100或全部数据
package com.swift.jztk.biz; import java.util.Collections; import java.util.Comparator; import java.u ...
- 使用JDBC构建简单的数据访问层
本教程的目的是使用Java编写的分离的层去访问数据库中的表,这一层通常称为数据访问层(DAL) 使用DAL的最大好处是通过直接使用一些类似insert()和find()的方法简化了数据库的访问操作,而 ...
- [置顶] 数据持久层(DAO)常用功能–通用API的实现
在Web开发中,一般都分3层. Controller/Action 控制层, Service/Business 服务层/业务逻辑层, Dao 数据访问层/数据持久层. 在学习和工作的实践过程中,我发现 ...
- 数据持久层(DAO)通用API的实现
在Web开发中,一般都分3层.Controller/Action 控制层,Service/Business 服务层/业务逻辑层,Dao 数据访问层/数据持久层. 在学习和工作的实践过程中,我发现很多功 ...
- ClownFish:比手写代码还快的通用数据访问层
http://www.cnblogs.com/fish-li/archive/2012/07/17/ClownFish.html 阅读目录 开始 ClownFish是什么? 比手写代码还快的执行速度 ...
- Yii的学习(2)--数据访问对象 (DAO)
摘自Yii官网:http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.dao Yii提供了强大的数据库编程支持.Yii数据访问对象(DAO) ...
- 使用Ninject+Moq在单元测试中抽象数据访问层
一.测试方法的业务逻辑时,通常都需要从数据库读取测试数据,但是每次初始化数据库数据都很麻烦,也会影响到其它业务对数据的访问,怎样抽象数据访问层呢?就是用Moq去模拟数据访问的逻辑 二.步骤如下 ...
随机推荐
- mtd-util
1.1.4.1. mtd-util简介 mtd-util,即mtd的utilities,是mtd相关的很多工具的总称,包括常用的mtdinfo,flash_erase, flash_eraseall, ...
- js new关键字 和 this详解
构造函数 ,是一种特殊的函数.主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中. 构造函数用于创建一类对象,首字母要大写. 构造函数要和new一起 ...
- Linux 安装python3.7.3 提示已经自动安装了pip和setuptools 可是使用时bash提示没有找到pip
Linux 安装python3.7.3 提示已经自动安装了pip和setuptools 可是使用时bash提示没有找到pip 今天的任务就是找到解决办法 另外就是用布置好python3的路径
- 使用IDEA完成maven整合SSH框架时抛出Hibernate : Mapping (RESOURCE) not found
切入主题,看看今天的错误是如何发生的: 首先这是我的项目路径,java 是 Sources Root , resources 是 Resources Root ,放了所需要的配置文件,其中 Hiber ...
- pyhton学习,day1作业,用户名密码登录模块
要求,通过用户名密码登录,登录错误3次,锁定用户名 # coding=utf-8 # Author: RyAn Bi import os, sys #调用系统自己的库 accounts_file = ...
- Django Cannot assign "A1": "B1" must be a "C1" instance. 错误信息
常见报错 Cannot assign “A1”: “B1” must be a “C1” instance. 告诉我们 必须使用 C1 模型类的 实例,而不是具体的参数值. 这个错误信息,是我写入数据 ...
- Codeforces 1136D Nastya Is Buying Lunch (贪心)
题意: 给一个序列和一组交换序列(a,b),当且仅当a在b的前面(不允许有间隔),这两个数才能交换,问最后一个数最多能移动多少个位置. 分析: 这题是思路是十分的巧妙呀 , 用一个数组num[x] ...
- mutillidae之注册页面的Insert型报错注入
http://127.0.0.1/mutillidae/index.php?page=register.php 1.注册一个用户试一试,发现页面只提示用户注册成功信息,并五其它可回显信息,果断尝试盲注 ...
- mysql数据库知识
学而时习之,不亦说乎! --<论语> 数据库所有操作的总结. 1.mysql的数据库服务为mysqld.exe windo ...
- PIE SDK SFIM融合
1.算法功能简介 SFIM 融合方法全称为基于平滑滤波的亮度变换.基本原理是将高分辨率影像通过低通滤波抑制其高频空间信息保留低频信息,再将原高分辨率影像与通过低通滤波的高分辨率影像进行比值运算,以抵消 ...