springmvc 中dao层和service层的区别说明

下面是详细讲解“springmvc 中dao层和service层的区别说明”的攻略。

1. DAO层和Service层的作用

DAO层

DAO层(Data Access Object 层)是Spring框架中负责与数据库交互,并对数据进行CRUD(增删改查)的持久化操作代码的一层。在实际开发中,DAO层通常与Hibernate、MyBatis等持久化框架联合使用,以实现数据的持久化操作。

Service层

Service层是业务逻辑层,负责调用DAO层进行数据的增删改查操作,并进行业务处理。在一个系统中,Service层通常包含多个Service接口和实现类,每个接口和实现类负责处理一个或多个模块的业务逻辑。

2. DAO层和Service层的区别说明

DAO层和Service层都是Spring框架中的重要组成部分,它们的区别可以从以下几个方面来进行说明:

2.1 功能区别

DAO层主要实现与数据库的交互操作,它的主要职责是封装底层的数据访问技术,实现对数据的持久化操作。而Service层主要负责业务逻辑的处理,Service层对DAO层的调用是为了完成自己的业务逻辑需求。

2.2 数据库操作区别

DAO层的操作主要是与数据库打交道,进行增删改查等数据库操作。Service层在对DAO进行操作的同时,还会对数据进行逻辑处理,例如事务管理和业务校验等,并且Service层也可以通过接口提供给其他模块使用。

2.3 小规模应用区别

对于小规模的应用来说,DAO层和Service层通常放在一起,使用同一个类来实现数据库的操作和业务逻辑的处理。但是随着应用规模的扩大,DAO和Service逐渐分离成为两个独立的层次,从而使应用易于维护和扩展。

3. 两条示例说明

示例一

假设有一个电商网站,我们需要实现用户注册功能。首先,我们需要定义一个User类,用于封装用户信息:

public class User {
    private String username;
    private String password;
    //getter和setter方法省略
}

然后,我们需要在DAO层中定义一个UserDao接口和实现类,用于对User类进行增删改查操作:

public interface UserDao {
    void save(User user);
    void delete(User user);
    void update(User user);
    User findByUsername(String username);
}
@Repository
public class UserDaoImpl implements UserDao {

    @Autowired
    private SqlSessionFactory sqlSessionFactory;

    @Override
    public void save(User user) {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            sqlSession.insert("UserMapper.insert", user);
        }
    }

    @Override
    public void delete(User user) {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            sqlSession.delete("UserMapper.delete", user);
        }
    }

    @Override
    public void update(User user) {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            sqlSession.update("UserMapper.update", user);
        }
    }

    @Override
    public User findByUsername(String username) {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            return sqlSession.selectOne("UserMapper.findByUsername", username);
        }
    }
}

最后,在Service层中定义一个UserService接口和实现类,用于对User进行业务处理:

public interface UserService {
    User register(User user);
}
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Override
    public User register(User user) {
        User existingUser = userDao.findByUsername(user.getUsername());
        if (existingUser != null) {
            throw new RuntimeException("用户名已存在");
        }
        userDao.save(user);
        return user;
    }
}

示例二

接下来,我们举一个更复杂的例子,比如假设有一个部门管理系统。我们需要实现三个功能:

  1. 添加一个部门;
  2. 查询部门列表;
  3. 删除一个部门。

首先,我们需要定义一个Department类,用于封装部门信息:

public class Department {
    private Integer id;
    private String name;
    private String desc;
    //getter和setter方法省略
}

然后,我们需要在DAO层中定义一个DepartmentDao接口和实现类,用于对Department类进行增删改查操作:

public interface DepartmentDao {
    void save(Department department);
    void delete(Integer id);
    void update(Department department);
    Department findById(Integer id);
    List<Department> findAll();
}
@Repository
public class DepartmentDaoImpl implements DepartmentDao {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void save(Department department) {
        String sql = "INSERT INTO department (name, description) VALUES (?, ?)";
        jdbcTemplate.update(sql, department.getName(), department.getDesc());
    }

    @Override
    public void delete(Integer id) {
        String sql = "DELETE FROM department WHERE id=?";
        jdbcTemplate.update(sql, id);
    }

    @Override
    public void update(Department department) {
        String sql = "UPDATE department SET name=?, description=? WHERE id=?";
        jdbcTemplate.update(sql, department.getName(), department.getDesc(), department.getId());
    }

    @Override
    public Department findById(Integer id) {
        String sql = "SELECT * FROM department WHERE id=?";
        return jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(Department.class));
    }

    @Override
    public List<Department> findAll() {
        String sql = "SELECT * FROM department";
        return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Department.class));
    }
}

最后,在Service层中定义一个DepartmentService接口和实现类,用于对Department进行业务处理:

public interface DepartmentService {
    void addDepartment(Department department);
    List<Department> getDepartmentList();
    void deleteDepartment(Integer id);
}
@Service
public class DepartmentServiceImpl implements DepartmentService {

    @Autowired
    private DepartmentDao departmentDao;

    @Override
    public void addDepartment(Department department) {
        departmentDao.save(department);
    }

    @Override
    public List<Department> getDepartmentList() {
        return departmentDao.findAll();
    }

    @Override
    public void deleteDepartment(Integer id) {
        departmentDao.delete(id);
    }
}

以上就是关于“springmvc 中dao层和service层的区别说明”的完整攻略,希望能对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springmvc 中dao层和service层的区别说明 - Python技术站

(0)
上一篇 2023年6月16日
下一篇 2023年6月16日

相关文章

  • spring boot starter actuator(健康监控)配置和使用教程

    Spring Boot Starter Actuator配置和使用教程 Spring Boot Starter Actuator是Spring Boot提供的一个用于监控和管理应用程序的模块。它提供了许多有用的端点,例如/health、/info、/metrics等,可以帮助我们监控应用程序的健康状况、性能指标等。在本文中,我们将详细讲解Spring Boo…

    Java 2023年5月15日
    00
  • kafka添加安全验证配置方式

    下面是详细讲解如何在Kafka中配置安全验证的完整攻略。 一、前置条件 在开始配置Kafka的安全验证之前,我们需要先满足以下的条件: 安装了Java环境 下载并安装了Kafka 配置了Kafka的基本参数 二、配置SSL/TLS SSL/TLS是Kafka中实现安全验证的一种常见方式,下面是配置SSL/TLS的步骤: 1. 自动生成SSL证书 Kafka提…

    Java 2023年5月20日
    00
  • SpringBoot整合Mybatis与druid实现流程详解

    SpringBoot整合Mybatis与druid实现流程详解 1. 项目搭建 首先,我们需要在项目中引入以下依赖: <!– SpringBoot Web Starter –> <dependency> <groupId>org.springframework.boot</groupId> <arti…

    Java 2023年5月20日
    00
  • 一篇超详细的Spring Boot整合Mybatis文章

    Spring Boot整合MyBatis完整攻略 Spring Boot是一个快速开发框架,可以帮助开发人员快速构建Web应用程序。在Spring Boot中,整合MyBatis可以帮助我们更方便地操作数据库。本文将介绍如何在Spring Boot中整合MyBatis,并提供两个示例。 整合MyBatis 在Spring Boot中整合MyBatis需要以下…

    Java 2023年5月15日
    00
  • Java 程序设计总复习题(java基础代码)

    《Java 程序设计总复习题(java基础代码)》是一本适用于Java初学者及想要学习Java程序设计的人士的书籍,其中包含了大量的Java基础代码练习题。下面为你详细讲解这本书的攻略,以便更好地帮助你掌握Java编程知识。 第一步 获取学习资料 首先,你需要获得学习资料,即《Java 程序设计总复习题(java基础代码)》这本书。这本书可以在各大网上书店购…

    Java 2023年5月23日
    00
  • Java毕业设计实战之生活旅行分享平台的实现

    Java毕业设计实战:生活旅行分享平台实现攻略 一、需求分析 我们要实现的是一个生活旅行分享平台,用户可以在上面发布分享自己的生活和旅游经历,也可以查看他人的分享,进行点赞、评论等互动操作。 我们需要实现以下功能:- 用户注册和登录- 发布分享、编辑分享、删除分享- 查看分享的列表,包括按照热度、发布时间等排序方式- 点赞分享、取消赞,评论分享、回复评论- …

    Java 2023年5月19日
    00
  • Java多线程编程基石ThreadPoolExecutor示例详解

    Java多线程编程基石ThreadPoolExecutor示例详解 简介 Java的多线程编程需要使用线程池Thread Pool。线程池是一组线程集合,可以被执行多次,且必须共享一份线程队列和一个线程池。ThreadPoolExecutor是Java中一个高级线程池,提供了许多用于线程池管理的功能。本文将详细介绍ThreadPoolExecutor的相关内…

    Java 2023年5月19日
    00
  • SpringSecurity 测试实战

    下面是针对SpringSecurity测试实战的完整攻略。 SpringSecurity测试实战 准备工作 在进行测试实战之前,我们需要对环境进行配置和项目依赖的添加。 配置文件 在 application.properties 文件中添加如下配置: # 数据库配置 spring.datasource.url=jdbc:mysql://localhost:3…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部