目录
[1. 项目结构概述](#1. 项目结构概述)
[2. 配置和整合](#2. 配置和整合)
[3. 开发业务逻辑](#3. 开发业务逻辑)
[4. 处理Web请求](#4. 处理Web请求)
[5. 异常处理](#5. 异常处理)
1. 项目结构概述
在SSM架构中,通常将应用程序分为三个主要层次:
- 模型层(Model):使用MyBatis处理数据相关的逻辑。
- 视图层(View):由SpringMVC处理,负责展示用户界面。
- 控制层(Controller):也是由SpringMVC处理,负责路由请求到相应的服务处理逻辑。
2. 配置和整合
Spring配置
Spring的主要任务是进行依赖注入和控制反转。通过Java配置类可以实现这些功能,如下所示:
@Configuration
@ComponentScan("com.example.project")
@PropertySource("classpath:application.properties")
@Import({DataSourceConfig.class, MyBatisConfig.class})
public class SpringConfig {
// 这里可以添加其他的Bean定义
}
数据源配置(DataSourceConfig)
配置数据源是任何数据库应用的基础,特别是在使用Spring与数据库交互时:
@Configuration
public class DataSourceConfig {
@Value("${jdbc.url}")
private String jdbcUrl;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(jdbcUrl);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
MyBatis配置
MyBatis负责持久层的实现,它将SQL语句映射到Java方法中:
@Configuration
public class MyBatisConfig {
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
return sessionFactory.getObject();
}
}
3. 开发业务逻辑
实体类(Domain)
例如,定义一个Book
类:
public class Book {
private Integer id;
private String title;
private String author;
// 省略getter和setter方法
}
数据访问对象(DAO)
MyBatis使用Mapper接口与XML文件或注解来定义SQL语句:
@Mapper
public interface BookMapper {
void insert(Book book);
Book findById(Integer id);
}
服务层(Service)
服务层封装业务逻辑,它使用DAO层提供的方法:
@Service
public class BookService {
@Autowired
private BookMapper bookMapper;
public void addBook(Book book) {
bookMapper.insert(book);
}
public Book getBookById(Integer id) {
return bookMapper.findById(id);
}
}
4. 处理Web请求
控制器(Controller)
SpringMVC控制器处理用户的HTTP请求,并调用后端服务:
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private BookService bookService;
@PostMapping
public ResponseEntity<String> addBook(@RequestBody Book book) {
bookService.addBook(book);
return ResponseEntity.ok("Book added successfully");
}
@GetMapping("/{id}")
public ResponseEntity<Book> getBook(@PathVariable Integer id) {
Book book = bookService.getBookById(id);
return ResponseEntity.ok(book);
}
}
5. 异常处理
在整个应用中统一处理异常非常关键,可以使用@ControllerAdvice
或@RestControllerAdvice
来实现:
@RestControllerAdvice
public class ExceptionHandlerAdvice {
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("An error occurred: " + e.getMessage());
}
}
总结
通过上述详细步骤,我们展示了如何在Spring框架下进行SSM整合,从配置数据源到处理Web请求,再到异常处理,每个步骤都至关重要。这种结构不仅有助于维护清晰的代码分层,还提高了代码的可复用性和可测试性。希望这篇博客能帮助你构建自己的SSM应用。