0
点赞
收藏
分享

微信扫一扫

DAO实现DQL操作

艾米吖 2023-02-17 阅读 24


DAO(Data Access Object) 是一个数据访问接口,数据访问:顾名思义就是和数据库打交道。夹在业务逻辑和数据库资源之间。封装了数据的增删改查操作(CRUD)。

DAO实现DQL操作_java

  上面图中左边部分就是我们的客户端,比如我们需要查询某个信息,我们不直接操作数据库,而是调用中间的DAO组件获取我们想要的数据。这样的话对于多个客户端就可以省去好多冗余的代码。

  下图是在上图的基础上又加改进,增加了一个domain作为数据的中转。domain封装了对象的信息符合 JavaBean。

DAO实现DQL操作_Test_02

开发步骤 : 拷贝数据库驱动包

  1. 先创建一个表,存储信息: t_student
  2. 建立domain包和domain类 : Stunent
  3. 建立dao包和dao接口 : IStudentDAO
  4. 建立dao.impl 包和dao 实现类:StudentDAOImpl
  5. 根据DAO接口创建DAO测试类:StudentDAOTest
  6. 编写StudentDAOImpl中的每一个 DAO方法的实现
  7. 每编写一个DAO 方法的实现,就测试该功能是否正确

创建DAO 对象:
1 : 面向接口编程 :
接口变量 = new 实现类() ;
2 : DAO对象的名字,起名为xxxDAO,xxx表示对象名称.
比如 : employeeDAO ,studentDAO .
private IStudentDAO

                              

在写代码之前,我们要有这样一张表 :

代码:
我们这里用了 javabean规范。

         


先写 Student 类

package com._520it._01_smis.domain;

import lombok.Getter;
import lombok.Setter;

// 学生信息
@Setter@Getter
public class Student {
private Long id ;
private String name ; // 姓名
private Integer age ; // 年龄
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}

}

DAO接口 :
IStudentDAO.java

package com._520it._01_smis.dao;

import java.util.List;

import com._520it._01_smis.domain.Student;

// 封装的 Student 对象的CRUD 操作
// 增删改查
public interface IStudentDAO {
/**
* 保存操作
* @param stu 学生对象,封装了需要保存的信息
*/
void save(Student stu) ;
/**
* 删除操作
* id 删除指定id的学生
*
*/
void delete(Long id ) ;
/**
* 更新操作
* id : 被更改的学生 id
* newStu : 学生的新信息
*/
void update(Long id , Student newStu) ;
/**
* 查询学生的id
* 如果id存在,返回该学生对象,否则,返回null
*/
Student get(Long id ) ;
/**
* 查询并返回所有学生的信息
* @return 如果结果集为空, 返回一个空的list对象
*/
List<Student> listAll() ;


}

DAO接口的实现类 :
StudentDAOImpl.java

package com._520it._01_smis.dao.impl;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com._520it._01_smis.dao.IStudentDAO;
import com._520it._01_smis.domain.Student;
// 这是 Student DAO 的实现类
public class StudentDAOImpl implements IStudentDAO{

public void save(Student stu) {

}

public void delete(Long id) {

}

public void update(Long id, Student newStu) {

}

public Student get(Long id) {
String sql = "SELECT * FROM t_student WHERE id = "+ id ;
// 声明所用的资源对象

Connection conn = null ;
Statement st = null ;
ResultSet rs = null ;

try {

// 贾琏欲执事
// 1 加载数据库驱动
Class.forName("com.mysql.jdbc.Driver") ;
// 2 连接数据库
conn = DriverManager.getConnection("jdbc:mysql:///jdbcdemo","root","100200s+o2=so2") ;

// 创建语句对象
st = conn.createStatement() ;
// 执行SQL
rs = st.executeQuery(sql) ;
// 处理结果集
if(rs.next()) {
Student stu = new Student() ;
stu.setId(rs.getLong("id"));
stu.setName(rs.getString("name"));
stu.setAge(rs.getInt("age"));
return stu ;
}


} catch (Exception e) {
e.printStackTrace();
}finally {
// 释放资源
try {
if(rs !=null) {
rs.close();
}
} catch (Exception e2) {

}finally {
try {
if(conn !=null) {
conn.close();
}
}catch(Exception e3) {

}
finally {
try {
if(st !=null) {
st.close();
}
}catch(Exception e4) {

}

}
}

}



return null;
}

public List<Student> listAll() {
String sql = "SELECT * FROM t_student " ;
// 声明所用的资源对象

Connection conn = null ;
Statement st = null ;
ResultSet rs = null ;

List<Student> list = new ArrayList<>() ;
try {

// 贾琏欲执事
// 1 加载数据库驱动
Class.forName("com.mysql.jdbc.Driver") ;
// 2 连接数据库
conn = DriverManager.getConnection("jdbc:mysql:///jdbcdemo","root","100200s+o2=so2") ;

// 创建语句对象
st = conn.createStatement() ;
// 执行SQL
rs = st.executeQuery(sql) ;
// 处理结果集
while(rs.next()) {
Student stu = new Student() ;
stu.setId(rs.getLong("id"));
stu.setName(rs.getString("name"));
stu.setAge(rs.getInt("age"));
list.add(stu) ;

}


} catch (Exception e) {
e.printStackTrace();
}finally {
// 释放资源
try {
if(rs !=null) {
rs.close();
}
} catch (Exception e2) {

}finally {
try {
if(conn !=null) {
conn.close();
}
}catch(Exception e3) {

}
finally {
try {
if(st !=null) {
st.close();
}
}catch(Exception e4) {

}

}
}

}

return list;
}


}

测试 :
StudentDAOTest.java

package com._520it._01_smis.test;

import static org.junit.Assert.*;

import java.util.List;

import org.junit.Test;

import com._520it._01_smis.dao.IStudentDAO;
import com._520it._01_smis.dao.impl.StudentDAOImpl;
import com._520it._01_smis.domain.Student;

public class IStudentDAOTest {

// private 接口 xxxDAO = new 实现() ;
// private 类名 = new 实现类
private IStudentDAO dao = new StudentDAOImpl() ;
@Test
public void testSave() {
fail("Not yet implemented");
}

@Test
public void testDelete() {
fail("Not yet implemented");
}

@Test
public void testUpdate() {
fail("Not yet implemented");
}

@Test
public void testGet() {
Student stu = dao.get(5L);
System.out.println(stu);
}

@Test
public void testListAll() {
List<Student> stus = dao.listAll();
for(Student stu : stus ) {
System.out.println(stu);
}

}

}

最后运行测试类的 testGet方法

@Test
public void testGet() {
Student stu = dao.get(5L);
System.out.println(stu);
}

结果:

DAO实现DQL操作_Test_03


举报

相关推荐

0 条评论