SSM框架介绍与示例应用
1. SSM框架概述
SSM框架,即Spring + Spring MVC + MyBatis,是一种广泛应用于Java Web开发的技术组合。每个组件都有独特的职责,协同工作以提供强大、灵活和可维护的开发平台。
1.1 Spring
Spring是一个全功能的Java企业应用开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能。作为SSM框架的核心,Spring处理应用的配置、事务管理,以及整个应用的生命周期。
1.2 Spring MVC
Spring MVC是Spring框架的一部分,采用模型-视图-控制器(MVC)架构用于开发Web应用。Spring MVC简化了应用的开发和维护,通过控制器接收请求、模型处理业务逻辑、视图展示结果的方式组织代码。
1.3 MyBatis
MyBatis是一种持久层框架,通过配置文件或注解实现Java对象和数据库表的映射关系。它简化了数据库访问,支持动态SQL、缓存机制等特性。
2. SSM框架示例应用
以下是一个简单的SSM框架示例,以一个博客系统为例,展示了如何进行数据持久化、业务逻辑处理、事务管理和前端展示。
2.1 数据库表设计
CREATE TABLE IF NOT EXISTS Blog (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
content TEXT,
author VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2.2 MyBatis映射文件
<!-- BlogMapper.xml -->
<mapper namespace="com.example.mapper.BlogMapper">
<resultMap id="BlogResultMap" type="com.example.model.Blog">
<id property="id" column="id"/>
<result property="title" column="title"/>
<result property="content" column="content"/>
<result property="author" column="author"/>
<result property="createdAt" column="created_at"/>
</resultMap>
<select id="getBlogById" resultMap="BlogResultMap">
SELECT * FROM Blog WHERE id = #{id}
</select>
<insert id="insertBlog" parameterType="com.example.model.Blog">
INSERT INTO Blog (title, content, author) VALUES (#{title}, #{content}, #{author})
</insert>
</mapper>
2.3 Java模型类
// Blog.java
package com.example.model;
import java.util.Date;
public class Blog {
private int id;
private String title;
private String content;
private String author;
private Date createdAt;
// 省略构造方法、getter和setter
}
2.4 MyBatis Mapper接口
// BlogMapper.java
package com.example.mapper;
import com.example.model.Blog;
public interface BlogMapper {
Blog getBlogById(int id);
void insertBlog(Blog blog);
}
2.5 Service层
// BlogService.java
package com.example.service;
import com.example.model.Blog;
public interface BlogService {
Blog getBlogById(int id);
void createBlog(Blog blog);
}
// BlogServiceImpl.java
package com.example.service.impl;
import com.example.mapper.BlogMapper;
import com.example.model.Blog;
import com.example.service.BlogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BlogServiceImpl implements BlogService {
@Autowired
private BlogMapper blogMapper;
@Override
public Blog getBlogById(int id) {
return blogMapper.getBlogById(id);
}
@Override
public void createBlog(Blog blog) {
blogMapper.insertBlog(blog);
}
}
2.6 控制器(Controller)
// BlogController.java
package com.example.controller;
import com.example.model.Blog;
import com.example.service.BlogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/blog")
public class BlogController {
@Autowired
private BlogService blogService;
@GetMapping("/show")
public String showBlog(int id, Model model) {
Blog blog = blogService.getBlogById(id);
model.addAttribute("blog", blog);
return "blog/show";
}
@GetMapping("/create")
public String createBlogForm() {
return "blog/create";
}
@PostMapping("/create")
public String createBlog(Blog blog) {
blogService.createBlog(blog);
return "redirect:/blog/show?id=" + blog.getId();
}
}
2.7 视图
- show.html
<!-- blog/show.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Blog Details</title> </head> <body> <h1>${blog.title}</h1> <p>${blog.content}</p> <p>Author: ${blog.author}</p> <p>Created At: ${blog.createdAt}</p> </body> </html>
- create.html
<!-- blog/create.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Create Blog</title>
</head>
<body>
<h1>Create a New Blog</h1>
<form action="/blog/create" method="post">
<label for="title">Title:</label>
<input type="text" id="title" name="title" required><br>
<label for="content">Content:</label>
<textarea id="content" name="content" required></textarea><br>
<label for="author">Author:</label>
<input type="text" id="author" name="author" required><br>
<button type="submit">Create</button>
</form>
</body>
</html>
3. 示例应用说明
以上示例演示了一个简单的博客系统,包括数据库表设计、MyBatis映射文件、Java模型类、MyBatis Mapper接口、Service层、Controller和视图。通过这个示例,你可以了解SSM框架在实际应用中的基本结构和使用方法。