分层思维
分层思维是软件架构设计的一种重要思想,它通过将应用程序划分为多个相互独立且依赖关系的层。
通常分为以下三层关系。
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 {@Overridepublic 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);}}@Overridepublic 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);}}@Overridepublic 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;}@Overridepublic 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());}}
}
程序可以正常运行,以后写代码都需要遵从这种模式。