自学内容网 自学内容网

JDBC-Dao层模式

分层思维

    分层思维是软件架构设计的一种重要思想,它通过将应用程序划分为多个相互独立且依赖关系的层。

    通常分为以下三层关系。

web层:主要负责与用户进行交互,处理请求。

service层:业务逻辑层,主要负责处理应用程序的业务逻辑,它接收来自web层的数据进行业务处理,然后调用数据访问层来访问数据库。

dao层:数据访问层,主要负责与数据库进行交互,实现数据的增删查改。

    分层目的:

  1. 提高代码的可维护性:通过分层,可以将代码按照功能进行划分,使得每个层次都更加清晰和易于维护。当需要修改某个功能时,只需要关注相关的层次,而无需了解整个系统的全部代码。
  2. 提高代码的可扩展性:分层架构使得新的功能可以更容易地添加到系统中。例如,如果需要添加一个新的业务逻辑,只需要在业务逻辑层中进行修改,而无需影响其他层次。
  3. 促进团队协作:通过分层,可以将系统划分为多个相对独立的模块,每个模块可以由不同的团队或开发人员来负责。这有助于促进团队协作和分工,提高开发效率。
  4. 降低系统风险:由于分层架构将系统划分为多个层次,每个层次都承担不同的职责,因此可以降低系统风险。例如,当数据库结构发生变化时,只需要修改数据访问层,而无需影响其他层次。

Dao模式

步骤:

1. 根据表创建对应的实体类,数据库的数据类型要对应类的数据类型。数据库中的decimal对应BigDecimal。

2. 数据库中的命名规范通常使用下划线,而在类中使用小驼峰命名法。

3. 编写dao层,dao层通常由dao接口定义数据访问的抽象方法和dao接口的实现类

                                               


示例:

UserDao接口的内容:

package com.fs.dao;
import com.fs.entity.Student;
import java.util.List;

public interface UserDao {
    /**
     *
     *根据id查询用户
     */
    Student findById(int id);

    /**
     * 查询所有
     */
    List<Student> findAll();

    /**
     * 添加学生
     */
    int save(Student student);

    /**
     *删除学生
     */
    int delete(int id);
}

UserDaoimpl实现类的内容:

package com.fs.dao.impl;
import com.fs.dao.UserDao;
import com.fs.entity.Student;
import com.fs.util.jdbcUtil;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class UserDaoImpl implements UserDao {

    @Override
    public Student findById(int id) {
        String sql = "select stu_no,name,sex,age from student where stu_no = ?";
        ResultSet resultSet = null;
        try {
            resultSet = jdbcUtil.executeQuery(sql,id);
            Student student = new Student();
            while(resultSet.next()){
                student.setStuNo(resultSet.getInt("stu_no"));
                student.setName(resultSet.getString("name"));
                student.setSex(resultSet.getString("sex"));
                student.setAge(resultSet.getInt("age"));
            }
            return student;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            jdbcUtil.close(resultSet);
        }

    }

    @Override
    public List<Student> findAll() {
        String sql = "select stu_no,name,sex,age from student ";
        ResultSet resultSet = null;
        List<Student> students = new ArrayList<>();
        try {
            resultSet = jdbcUtil.executeQuery(sql);
            while(resultSet.next()){
                Student student = new Student();
                student.setStuNo(resultSet.getInt("stu_no"));
                student.setName(resultSet.getString("name"));
                student.setSex(resultSet.getString("sex"));
                student.setAge(resultSet.getInt("age"));
                students.add(student);
            }
            return students;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            jdbcUtil.close(resultSet);
        }
    }

    @Override
    public int save(Student student) {
        String sql = "insert into student(name,sex,age) values(?,?,?)";
        int i = jdbcUtil.executeUpdate(sql,student.getName(),student.getSex(),student.getAge());
        return i;
    }

    @Override
    public int delete(int id) {
        String sql = "delete from student where stu_no = ?";
        int i = jdbcUtil.executeUpdate(sql,id);
        return i;

    }
}

接下来写了一个测试类: 

import com.fs.dao.UserDao;
import com.fs.dao.impl.UserDaoImpl;
import com.fs.entity.Student;

import java.util.ArrayList;
import java.util.List;

public class DaoTest {
    public static void main(String[] args) {
        UserDao userDao = new UserDaoImpl();
        Student s1 = userDao.findById(1001);
        System.out.print(s1.getName()+" ");
        System.out.print(s1.getAge()+" ");
        System.out.println(s1.getSex());
        Student s2 = new Student("小明","男",20);
        userDao.save(s2);

        List<Student> list = userDao.findAll();
        for(Student s:list){
            System.out.print(s.getStuNo()+" ");
            System.out.println(s.getName());
        }
        
    }
}

                 

程序可以正常运行,以后写代码都需要遵从这种模式。


原文地址:https://blog.csdn.net/m0_74386799/article/details/143719736

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!