三层架构详解

三层架构是一种常见的软件架构模式,用于将应用程序划分为三个不同的层次:表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer),每个层次都有不同的职责和功能。

  1. 表示层(Presentation Layer):

    • 表示层是用户与系统交互的界面,负责接收用户的输入并展示数据给用户。
    • 它通常包括用户界面(UI)和用户体验(UX)设计。
    • 表示层可以是Web界面、移动应用程序、桌面应用程序等。
  2. 业务逻辑层(Business Logic Layer):

    • 业务逻辑层负责处理应用程序的业务逻辑,包括数据处理、业务规则和流程等。
    • 它独立于具体的数据存储方式,通过调用数据访问层来获取或保存数据。
    • 业务逻辑层通常包括各种服务、管理器或控制器等。
  3. 数据访问层(Data Access Layer):

    • 数据访问层负责与数据存储进行交互,包括数据库、文件系统或外部API等。
    • 它提供了对数据的读取、写入和更新等操作,以及数据的持久化和检索。
    • 数据访问层通常包括数据访问对象(DAO)、数据模型和数据库连接等。

三层架构的优势:

  • 分离关注点:将应用程序划分为不同的层次,使各层之间的职责清晰分离,提高了代码的可维护性和可测试性。
  • 提高复用性:通过将业务逻辑层和数据访问层独立出来,可以使它们在不同的表示层之间共享和复用。
  • 灵活性和扩展性:由于每个层次的职责明确,可以更容易地对某个层次进行修改或扩展,而不会对其他层次产生影响。

Java三层架构实战:从数据库表到控制层的完整开发流程
​ 在Java开发中,三层架构是一种常用的架构模式,可以将应用程序按照不同的职责划分为数据库表设计、实体层、DAO层、Mapper层、Service层、ServiceImpl和Controller层。本文将详细介绍每个层级的作用和示例代码,帮助大家了解并应用Java三层架构。

顺序:数据库表——>实体层——>DAO层——>Mapper层——>Service层——>ServiceImpl——>Controller层

1. 数据库表设计
首先,根据需求设计数据库表结构,定义表的字段、关系和约束。例如,我们创建了名为"Student"的表,包含了"id"、“name”、"age"和"major"字段。

2. 实体层
实体层是对象模型与数据库表之间的映射层。创建一个与数据库表对应的实体类,例如"Student"类,包含与表字段对应的属性、构造函数和Getter/Setter方法。

示例代码:

public class Student {
    private int id;
    private String name;
    private int age;
    private String major;

    // 构造函数、Getter/Setter方法
}

3. DAO层写接口

DAO层是数据访问层,定义了对数据库进行增删改查操作的接口。创建一个与实体类对应的DAO接口,例如"StudentDAO",定义插入、更新、删除、查询等方法。

示例代码:

public interface StudentDAO {
    void insert(Student student);
    void update(Student student);
    void delete(int id);
    Student getById(int id);
    List<Student> getAll();
}

4. Mapper层

Mapper层是DAO层的实现,负责编写与DAO接口对应的映射规则,即SQL和实体类(POJO)的映射规则。使用MyBatis等框架编写映射规则,将SQL语句与实体类关联起来。

示例代码:

<!-- StudentMapper.xml -->
<mapper namespace="com.example.dao.StudentDAO">
    <insert id="insert" parameterType="com.example.model.Student">
        INSERT INTO Student (id, name, age, major)
        VALUES (#{id}, #{name}, #{age}, #{major})
    </insert>
    <!-- 其他SQL语句 -->
</mapper>

5. Service层

Service层是业务逻辑层,处理具体的业务逻辑。创建一个与实体类对应的Service接口,定义业务方法,例如添加学生、更新学生信息等。

示例代码:

public interface StudentService {
    void addStudent(Student student);
    void updateStudent(Student student);
    void deleteStudent(int id);
    Student getStudentById(int id);
    List<Student> getAllStudents();
}

6. ServiceImpl

ServiceImpl是Service层的具体实现,实现Service接口中定义的方法。在具体方法中调用DAO层的方法来实现数据访问和业务逻辑处理

示例代码:

@Service
public class StudentServiceImpl implements StudentService {
    @Autowired
    private StudentDAO studentDAO;

    @Override
    public void addStudent(Student student) {
        studentDAO.insert(student);
    }

    @Override
    public void updateStudent(Student student) {
        studentDAO.update(student);
    }

    @Override
    public void deleteStudent(int id) {
        studentDAO.delete(id);
    }

    @Override
    public Student getStudentById(int id) {
        return studentDAO.getById(id);
    }

    @Override
    public List<Student> getAllStudents() {
        return studentDAO.getAll();
    }
}

7. Controller层
Controller层负责处理用户请求和返回响应。创建一个与实体类对应的Controller类,使用@RestController和@RequestMapping注解来定义URL映射,通过依赖注入方式引入Service接口,并在方法中调用Service层的方法来处理用户请求和返回响应。

示例代码:

@RestController
@RequestMapping("/students")
public class StudentController {
    @Autowired
    private StudentService studentService;

    @PostMapping
    public ResponseEntity<String> addStudent(@RequestBody Student student) {
        studentService.addStudent(student);
        return ResponseEntity.ok("Student added successfully.");
    }

    // 其他方法的实现
}


 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值