DAO——Data Access Objects 数据存取对象
DAO (DataAccessobjects 数据存取对象)是指位于业务逻辑和持久化数据之间实现对持久化数据的访问。通俗来讲,就是将数据库操作都封装起来。
对外提供相应的接口
在面向对象设计过程中,有一些"套路”用于解决特定问题称为模式。
DAO 模式提供了访问关系型数据库系统所需操作的接口,将数据访问和业务逻辑分离对上层提供面向对象的数据访问接口。
从以上 DAO 模式使用可以看出,DAO 模式的优势就在于它实现了两次隔离。
- 1、隔离了数据访问代码和业务逻辑代码。业务逻辑代码直接调用DAO方法即可,完全感觉不到数据库表的存在。分工明确,数据访问层代码变化不影响业务逻辑代码,这符合单一职能原则,降低了藕合性,提高了可复用性。
- 2、隔离了不同数据库实现。采用面向接口编程,如果底层数据库变化,如由 MySQL 变成 Oracle 只要增加 DAO 接口的新实现类即可,原有 MySQL 实现不用修改。这符合 "开-闭" 原则。该原则降低了代码的藕合性,提高了代码扩展性和系统的可移植性。
一个典型的DAO 模式主要由以下几部分组成。
- 1、DAO接口: 把对数据库的所有操作定义成抽象方法,可以提供多种实现。
- 2、DAO 实现类: 针对不同数据库给出DAO接口定义方法的具体实现。
- 3、实体类:用于存放与传输对象数据。
- 4、数据库连接和关闭工具类: 避免了数据库连接和关闭代码的重复使用,方便修改。
DAO接口:
/**
* Create by pengweijie on 2018/7/27
*/
public interface JobDao {
Job selectByName(String jobName);
Job selectById(int jobId);
List<Job> queryAllJob();
void deleteById(int jobId);
void insertJob(Job job);
}
DAO实现接口:
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.snnu.dao.JobDao">
<select id="selectById" resultType="Job">
SELECT *
FROM job
WHERE jobId=#{jobId}
</select>
<select id="selectByName" resultType="Job">
SELECT *
FROM job
WHERE jobName=#{jobName}
</select>
<delete id="deleteById" parameterType="Job">
DELETE FROM job WHERE jobId = #{jobId}
</delete>
<insert id="insertJob" parameterType="Job">
INSERT INTO Job (
jobId,
jobName,
salary)
VALUES (
#{jobId},
#{jobName},
#{salary}
)
</insert>
<select id="queryAllJob" resultType="Job">
SELECT *
FROM job
ORDER BY jobId ASC
</select>
</mapper>
job类:
package com.snnu.entity;
/**
* Create by pengweijie on 2018/7/27
*/
public class Job {
private Integer jobId;
private String jobName;
private Integer salary;
public int getJobId() { return jobId; }
public void setJobId(int jobId) {
this.jobId = jobId;
}
public String getJobName() {
return jobName;
}
public void setJobName(String jobName) {
this.jobName = jobName;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public Job(Integer jobId, String jobName, Integer salary) {
this.jobId = jobId;
this.jobName = jobName;
this.salary = salary;
}
@Override
public String toString() {
return "Job{" +
"jobId=" + jobId +
", jobName='" + jobName + '\'' +
", salary=" + salary +
'}';
}
}