下面是详细讲解“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;
}
}
示例二
接下来,我们举一个更复杂的例子,比如假设有一个部门管理系统。我们需要实现三个功能:
- 添加一个部门;
- 查询部门列表;
- 删除一个部门。
首先,我们需要定义一个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技术站