概述
SSM(即Spring+SpringMVC+MyBatis)项目整体可以分为前端和后端两部分,前端主要负责与用户交互,后端则处理业务逻辑和数据持久化。在后端部分,SSM框架进一步将功能划分为四个主要层次:持久层(dao层)、业务层(service层)、控制层(controller层)和视图层(view层)。
持久层
持久层,又称数据访问层(DAO层,Mapper层),持久层主要负责与数据库进行交互,封装数据访问的细节,如增删改查(CRUD),使得业务层无需直接操作数据库。通常先设计接口,然后在Spring的配置文件中定义接口的实现类。数据源的配置以及数据库连接的参数也在Spring的配置文件中进行配置。
配置eg
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
//指定了数据库驱动的全类名,这里使用的是MySQL的驱动。
spring.datasource.url=jdbc:mysql://localhost:3306/tlias
//定义了数据库的JDBC URL,包括数据库服务器地址(localhost),端口号(3306),以及数据库名称(tlias)。
spring.datasource.username=root
//数据库的用户名
spring.datasource.password=123456
//对应用户名的密码
代码eg
public interface UserDAO {
User findById(int id);
List<User> findAll();
void save(User user);
void update(User user);
void delete(int id);
}
@Mapper
是一个 MyBatis 框架中的注解,它用于标记一个接口为 MyBatis 的 Mapper 接口。Mapper 接口是 MyBatis 用来定义数据访问操作(如增删改查)的接口,它允许你通过简单的接口方法调用,而不是编写复杂的 SQL 语句或 JDBC 代码,来与数据库进行交互。
当一个接口上使用 @Mapper
注解时,MyBatis 会在启动时自动扫描这些接口,并创建它们的实现类。
对应的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="top.heimarlife.comment.dao.UserDAO">
<resultMap id="userResultMap" type="com.youkeda.comment.dataobject.UserDO">
<!-- 结果映射 -->
<id column="id" property="id"/>//主键
<result column="数据库字段" property="DAO类成员"/>
</resultMap>
<!-- 实现方法 -->
</mapper>
通用部分解析
1.XML声明和DOCTYPE,用于指定XML的版本、编码方式和DTD(文档类型定义),以确保XML文件的格式正确。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
2.Mapper命名空间,通常与对应的Mapper接口的全限定名一致。
<mapper namespace="Mapper接口类路径">
</mapper>
3.ResultMap,用于定义如何将数据库中的列映射到Java对象的属性上。
<resultMap id="userResultMap" type="映射数据库的DO对象">
<!-- 结果映射 -->
<result column="数据库字段" property="DO对象成员"/>
</resultMap>
业务层
业务层(Service层),又称服务层,主要负责处理应用程序中的业务逻辑。它接收来自控制层的请求,调用持久层来访问数据库,并根据业务规则处理数据,然后将处理结果返回给控制层。
public class UserService {
//一般要先创建接口,再实现
private UserDAO userDAO;
public UserService(UserDAO userDAO) {
this.userDAO = userDAO;
}
public User getUserById(int id) {
return userDAO.findById(id);
}
public List<User> getAllUsers() {
return userDAO.findAll();
}
public void createUser(User user) {
userDAO.save(user);
}
// 其他业务逻辑方法...
}
控制层可以直接调用持久层的方法。然而,这种直接调用的方式并不符合最佳的软件设计,所以一般要有服务层,服务层封装持久层的方法并可以进行简单处理。
控制层
控制层(Controller层)主要负责接收用户的请求,调用业务层来处理请求,并将处理结果返回给用户。它通常与前端视图层进行交互,将业务数据传递给视图层进行展示,或接收视图层传递的用户输入。
@RestController
@RequestMapping("/users")
public class UserController {
private UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
//......
// HTTP请求处理方法...
}
视图层
视图层(View层)主要负责展示应用程序的用户界面,接收用户的输入,并将业务数据呈现给用户。它通常使用HTML、CSS、JavaScript等前端技术来构建用户界面。