Kiến trúc ứng dụng web backend thường được chia thành 3 lớp chính:
- Lớp hiển thị (Presentation Layer): Sử dụng SpringMVC để xử lý các yêu cầu từ trình duyệt.
- Lớp nghiệp vụ (Business Layer): Sử dụng Spring Framework để quản lý logic và các bean.
- Lớp dữ liệu (Persistence Layer): Sử dụng MyBatis để thao tác với cơ sở dữ liệu.
1. Chuẩn bị cơ sở dữ liệu
Sử dụng SQL script sau để khởi tạo bảng dữ liệu:
CREATE DATABASE ssm_db;
USE ssm_db;
CREATE TABLE account (
id INT PRIMARY KEY AUTO_INCREMENT,
acc_name VARCHAR(50),
balance DOUBLE
);
2. Cấu hình Maven (pom.xml)
Cần khai báo các thư viện cần thiết trong file pom.xml, bao gồm Spring Context, Spring WebMVC, MyBatis, MyBatis-Spring, và MySQL Connector.
3. Xây dựng cấu trúc dự án
Tổ chức dự án theo các gói (package) chuẩn:
com.project.controller: Các bộ điều khiển.com.project.service: Các interface nghiệp vụ và lớp triển khai.com.project.dao: Các interface truy cập dữ liệu (Mapper).com.project.domain: Các đối tượng thực thể (POJO).
4. Cấu hình Spring (ApplicationContext.xml)
Tích hợp DataSource và quét các thành phần trong dự án:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssm_db"/>
<property name="username" value="root"/>
<property name="password" value="your_password"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.project.dao"/>
</bean>
5. Cấu hình SpringMVC (spring-mvc.xml)
Khai báo DispatcherServlet và View Resolver để điều hướng các trang JSP:
<context:component-scan base-package="com.project.controller" />
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
6. Triển khai Logic
Tại lớp DAO, sử dụng annotation của MyBatis để định nghĩa SQL:
@Repository
public interface AccountMapper {
@Select("SELECT * FROM account")
List<Account> selectAll();
@Insert("INSERT INTO account(acc_name, balance) VALUES(#{accName}, #{balance})")
void insertAccount(Account account);
}
Tiếp theo, inject AccountMapper vào lớp AccountService bằng @Autowired để thực hiện các thao tác logic nghiệp vụ trước khi gọi đến Controller.