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

yizhihongxing

下面是详细讲解“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日

相关文章

  • JAVA实现异步调用实例代码

    JAVA实现异步调用实例代码攻略 什么是异步调用? 在Java中,我们经常需要调用一些时间较长的方法,比如网络请求、IO操作、复杂的计算等等。这些方法如果在主线程中执行,会导致界面假死、卡死等严重问题。这时候,我们就需要使用异步调用(Async Call)来解决这个问题。 异步调用指的是将一个方法的执行过程交给另一个线程来执行,然后直接返回结果,而不必等待方…

    Java 2023年5月18日
    00
  • springboot与springmvc基础入门讲解

    让我来为您详细讲解“springboot与springmvc基础入门讲解”的完整攻略。 简介 Spring Boot是Spring Framework的一个扩展框架,它为Spring开发者提供了更快的开发体验。Spring MVC是一个经典的MVC框架,负责接收HTTP请求并将其转换为相应的处理程序,通常由Controller和Model组成。 本文将对Sp…

    Java 2023年5月15日
    00
  • SpringMVC异步处理操作(Callable和DeferredResult)

    SpringMVC异步处理操作(Callable和DeferredResult) 在Web开发中,有些请求需要花费较长时间才能返回响应,例如查询大量数据或执行复杂的计算。为了提高Web应用程序的性能和可伸缩性,我们可以使用SpringMVC的异步处理操作。本文将详细讲解SpringMVC异步处理操作,包括如何使用Callable和DeferredResult…

    Java 2023年5月18日
    00
  • JSON 格式的弊端与解决方法(真实示例)

    JSON 格式的弊端与解决方法(真实示例) 弊端 JSON 是一种轻量级的数据交换格式,常用于前后端数据传输。然而,其亦存在一些弊端。 缺少数据类型 JSON 中的数据只有字符串、数字、布尔值、数组和对象等简单数据类型,缺乏复合数据类型。在前后端通讯的过程中,如果出现了复杂数据结构,如日期类型或文件类型,JSON 无法很好地处理这些数据类型。因此,在数据传输…

    Java 2023年5月26日
    00
  • Maven默认中央仓库(settings.xml 配置详解)

    Maven是一个流行的Java构建工具,它使用中央仓库来管理项目所需的依赖库。在使用Maven时,默认使用中央仓库(Central Repository),本文将介绍如何在settings.xml文件中配置Maven默认中央仓库。 1. settings.xml文件 在Maven中,settings.xml文件用于配置Maven的全局设置(如本地仓库路径、镜…

    Java 2023年5月20日
    00
  • web项目WEB-INF下没有web.xml的解决方法

    当我们创建Web项目时,确保在Web项目的WEB-INF文件夹下存在一个名为web.xml的配置文件。但是,有些情况会导致Web项目中缺少web.xml文件,例如从其他人手中继承项目或者项目出现异常导致web.xml被删除。在这种情况下,我们需要找到一种方法来解决这个问题。 下面是解决Web项目WEB-INF文件夹下不存在web.xml文件的方法,示例说明:…

    Java 2023年6月16日
    00
  • 深入理解Java中的字符串类型

    深入理解Java中的字符串类型 Java 的字符串类型 java.lang.String 在我们日常的开发工作中使用得非常频繁,而且它的使用非常方便。但是,我们了解得真的够全面吗?在本篇文章中,我们将会通过具体的示例,剖析 Java 字符串的底层实现原理,还会深入探讨 Java 字符串的常用方法和源代码分析。 1. Java 字符串类型的底层实现原理 Jav…

    Java 2023年5月20日
    00
  • Mybatis 创建方法、全局配置教程详解

    首先我们来讲解Mybatis的创建方法和全局配置教程。 Mybatis 创建方法 第一步:引入Mybatis依赖 你需要在项目中引入Mybatis的依赖,可以通过Maven或Gradle管理工具来引入。比如Maven的配置如下: <dependency> <groupId>org.mybatis</groupId> &lt…

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