JDBC-Dao层模式
分层思维
分层思维是软件架构设计的一种重要思想,它通过将应用程序划分为多个相互独立且依赖关系的层。
通常分为以下三层关系。
web层:主要负责与用户进行交互,处理请求。
service层:业务逻辑层,主要负责处理应用程序的业务逻辑,它接收来自web层的数据进行业务处理,然后调用数据访问层来访问数据库。
dao层:数据访问层,主要负责与数据库进行交互,实现数据的增删查改。
分层目的:
- 提高代码的可维护性:通过分层,可以将代码按照功能进行划分,使得每个层次都更加清晰和易于维护。当需要修改某个功能时,只需要关注相关的层次,而无需了解整个系统的全部代码。
- 提高代码的可扩展性:分层架构使得新的功能可以更容易地添加到系统中。例如,如果需要添加一个新的业务逻辑,只需要在业务逻辑层中进行修改,而无需影响其他层次。
- 促进团队协作:通过分层,可以将系统划分为多个相对独立的模块,每个模块可以由不同的团队或开发人员来负责。这有助于促进团队协作和分工,提高开发效率。
- 降低系统风险:由于分层架构将系统划分为多个层次,每个层次都承担不同的职责,因此可以降低系统风险。例如,当数据库结构发生变化时,只需要修改数据访问层,而无需影响其他层次。
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)!