为了账号安全,请及时绑定邮箱和手机立即绑定

SSM入门详解:简单教程带你快速上手

标签:
SSM
概述

SSM框架是Spring、Spring MVC和MyBatis的组合,广泛应用于Java Web开发中。本文将详细介绍SSM入门所需的基础知识,包括环境搭建、Spring IOC与DI、MyBatis基础操作以及Spring MVC架构等内容。通过具体示例代码和配置,帮助读者快速掌握SSM框架的使用方法。

SSM框架简介
什么是SSM框架

SSM框架是Spring、Spring MVC和MyBatis的简称,是Java Web开发中常用的轻量级框架组合。Spring是控制反转(IoC)和面向切面编程(AOP)的开源框架,Spring MVC用于构建基于Spring的Web应用,MyBatis则是一个优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。

SSM框架的优点
  1. 轻量级框架:SSM框架是轻量级的,不依赖于EJB等重量级服务,易于集成和维护,非常适合中小型项目。
  2. 控制反转(IoC):通过Spring的IoC容器,可以将对象的创建和管理交给Spring来处理,从而减少代码的耦合度。
  3. 面向切面编程(AOP):可以将横切关注点(如事务管理、日志记录等)从业务逻辑中分离出来,提高代码的可维护性和可读性。
  4. 灵活的依赖注入:可以通过构造器注入、设值注入等方式将对象的依赖关系注入到需要的地方,使得代码更加松耦合。
  5. 强大的持久层支持:MyBatis提供了灵活的SQL映射功能,能够很好地与数据库交互。
  6. 高效的MVC架构:Spring MVC提供了清晰的MVC分离,使得每个模块职责明确,易于测试和维护。
SSM框架的组成部分
  1. Spring:负责提供IoC容器和AOP支持。
  2. Spring MVC:负责构建Web应用的MVC架构。
  3. MyBatis:负责持久层的数据库操作。
环境搭建
开发环境准备
  • 操作系统: Windows/Linux/Mac
  • 开发工具: Eclipse/IntelliJ IDEA
  • 语言版本: Java 8+
  • 数据库: MySQL 5.7+
  • 其他工具: Maven、JDK
Maven依赖配置

使用Maven管理项目依赖,可以在pom.xml文件中配置Spring、Spring MVC和MyBatis的相关依赖,具体配置如下:

<dependencies>
    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.10</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.10</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.3.10</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>5.3.10</version>
    </dependency>

    <!-- MyBatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.22</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.14.0</version>
    </dependency>

    <!-- Servlet API -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>

    <!-- JSP API -->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.3</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
``

## 工具安装与配置
安装JDK并配置环境变量,确保Java环境变量已正确配置。安装Maven,确保Maven能正确解析pom.xml文件,并自动下载所需的依赖。

# Spring框架入门

## Spring IOC与DI
### 控制反转(IoC)
IoC(Inversion of Control)是一种编程思想,它将对象的创建和依赖关系管理交给框架来处理。Spring通过IoC容器管理对象的生命周期,例如,通过配置文件来定义对象之间的依赖关系。

#### 示例代码
```java
public class UserService {
    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void addUser(User user) {
        userDao.addUser(user);
    }
}
<bean id="userDao" class="com.example.demo.UserDao"/>
<bean id="userService" class="com.example.demo.UserService">
    <property name="userDao" ref="userDao"/>
</bean>

依赖注入(DI)

DI(Dependency Injection)是IoC的一种实现方式,通过配置文件将对象的依赖关系传递给需要的对象。Spring提供了多种依赖注入的方式,包括构造器注入、设值注入和接口注入等。

示例代码

public class UserService {
    private UserDao userDao;

    public UserService(UserDao userDao) {
        this.userDao = userDao;
    }

    public void addUser(User user) {
        userDao.addUser(user);
    }
}
<bean id="userDao" class="com.example.demo.UserDao"/>
<bean id="userService" class="com.example.demo.UserService">
    <constructor-arg ref="userDao"/>
</bean>
Spring AOP

AOP(Aspect Oriented Programming)是一种编程思想,它将横切关注点(如事务管理、日志记录等)从业务逻辑中分离出来,使得代码更加简洁和清晰。Spring AOP提供了对AOP的支持,可以方便地实现事务管理、日志记录等功能。

示例代码

@Aspect
public class LoggingAspect {
    @Before("execution(* com.example.demo.service.*.*(..))")
    public void beforeAdvice(JoinPoint joinPoint) {
        System.out.println("Before method: " + joinPoint.getSignature());
    }
}
<aop:config>
    <aop:aspect ref="loggingAspect">
        <aop:before method="beforeAdvice" pointcut="execution(* com.example.demo.service.*.*(..))"/>
    </aop:aspect>
</aop:config>
Spring与数据库集成

Spring提供了对数据库操作的支持,通过JdbcTemplate或Hibernate等持久层框架实现。Spring通过事务管理器管理数据库事务,确保数据的一致性。

示例代码

public class UserService {
    private JdbcTemplate jdbcTemplate;

    public UserService(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public void addUser(User user) {
        jdbcTemplate.update("INSERT INTO users (name, email) VALUES (?, ?)", user.getName(), user.getEmail());
    }
}
<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/mydb"/>
    <property name="username" value="user"/>
    <property name="password" value="password"/>
</bean>

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
</bean>

<bean id="userService" class="com.example.demo.UserService">
    <constructor-arg ref="jdbcTemplate"/>
</bean>
MyBatis框架入门
MyBatis基础操作

MyBatis是一个优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis通过XML配置文件或注解来实现数据库的持久化操作。

示例代码

public class User {
    private int id;
    private String name;
    private String email;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
<insert id="addUser" parameterType="com.example.demo.User">
    INSERT INTO users (name, email) VALUES (#{name}, #{email})
</insert>
public class UserService {
    private SqlSessionFactory sqlSessionFactory;

    public UserService(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    public void addUser(User user) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            session.insert("addUser", user);
            session.commit();
        }
    }
}
MyBatis与数据库交互

MyBatis通过SqlSessionFactory和SqlSession对象与数据库进行交互,SqlSessionFactory负责创建SqlSession对象,SqlSession对象提供了执行SQL语句的方法。

示例代码

public class User {
    private int id;
    private String name;
    private String email;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
<resultMap id="UserResultMap" type="com.example.demo.User">
    <id column="id" property="id"/>
    <result column="name" property="name"/>
    <result column="email" property="email"/>
</resultMap>

<select id="getUserById" resultMap="UserResultMap" parameterType="int">
    SELECT id, name, email FROM users WHERE id = #{id}
</select>
public class UserService {
    private SqlSessionFactory sqlSessionFactory;

    public UserService(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    public User getUserById(int id) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            return session.selectOne("getUserById", id);
        }
    }
}
MyBatis注解与XML配置

MyBatis支持通过注解来实现数据库操作,同时也可以使用XML配置文件来配置SQL语句。注解使用起来更加方便,而XML配置则提供了更多的灵活性。

示例代码

public class User {
    private int id;
    private String name;
    private String email;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public void addUser(User user) {
        userMapper.addUser(user);
    }

    public User getUserById(int id) {
        return userMapper.getUserById(id);
    }
}
@Mapper
public interface UserMapper {
    @Insert("INSERT INTO users (name, email) VALUES (#{name}, #{email})")
    void addUser(User user);

    @Select("SELECT id, name, email FROM users WHERE id = #{id}")
    User getUserById(int id);
}
Spring MVC框架入门
Spring MVC架构

Spring MVC是基于MVC设计模式的Web框架,它将Web应用分为Model、View和Controller三个部分。Controller负责处理HTTP请求,Model负责处理业务逻辑,View负责展示数据。

示例代码

@Controller
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/addUser")
    public String addUser(@ModelAttribute("user") User user) {
        userService.addUser(user);
        return "redirect:/users";
    }

    @RequestMapping("/users")
    public String getUsers(Model model) {
        List<User> users = userService.getUsers();
        model.addAttribute("users", users);
        return "users";
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>User List</title>
</head>
<body>
<h1>User List</h1>
<table>
    <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Email</th>
    </tr>
    <c:forEach var="user" items="${users}">
        <tr>
            <td>${user.id}</td>
            <td>${user.name}</td>
            <td>${user.email}</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>
Controller、View、Model的使用

Controller负责处理HTTP请求,View负责展示数据,Model负责处理业务逻辑。Spring MVC通过@Controller注解标记Controller类,通过@RequestMapping注解映射HTTP请求。

示例代码

@Controller
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/addUser")
    public String addUser(@ModelAttribute("user") User user, Model model) {
        userService.addUser(user);
        model.addAttribute("message", "User added successfully");
        return "success";
    }

    @RequestMapping("/users")
    public String getUsers(Model model) {
        List<User> users = userService.getUsers();
        model.addAttribute("users", users);
        return "users";
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Success</title>
</head>
<body>
<h1>Success</h1>
<p>${message}</p>
</body>
</html>
数据绑定与表单验证

Spring MVC提供了数据绑定和表单验证的功能,可以方便地将HTTP请求参数绑定到Java对象上,并进行校验。

示例代码

public class User {
    private int id;
    private String name;
    private String email;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}
@Controller
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/addUser")
    public String addUser(@ModelAttribute("user") @Valid User user, BindingResult result, Model model) {
        if (result.hasErrors()) {
            return "error";
        }
        userService.addUser(user);
        model.addAttribute("message", "User added successfully");
        return "success";
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Error</title>
</head>
<body>
<h1>Error</h1>
<c:if test="${not empty bindingResult.allErrors}">
    <c:forEach var="error" items="${bindingResult.allErrors}">
        <p>${error.defaultMessage}</p>
    </c:forEach>
</c:if>
</body>
</html>
SSM整合实战
SSM整合步骤详解
  1. 引入依赖:在pom.xml文件中引入Spring、Spring MVC和MyBatis的相关依赖。
  2. 配置Spring Bean:在Spring配置文件中配置各个Bean,包括数据源、SqlSessionFactory、事务管理器等。
  3. 配置MyBatis映射文件:编写MyBatis的映射文件,定义SQL语句和结果映射。
  4. 编写Controller和Service:编写Controller处理HTTP请求,Service处理业务逻辑。
  5. 配置Spring MVC:在Spring配置文件中配置DispatcherServlet,映射请求到Controller。
  6. 配置视图解析器:配置视图解析器,将逻辑视图名称转换为实际视图资源路径。
  7. 配置数据库连接:配置数据库连接信息,确保应用程序能够访问数据库。

示例代码

<!-- Spring配置 -->
<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/mydb"/>
    <property name="username" value="user"/>
    <property name="password" value="password"/>
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.example.demo.mapper"/>
</bean>
// Controller
@Controller
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/addUser")
    public String addUser(@ModelAttribute("user") User user, Model model) {
        userService.addUser(user);
        model.addAttribute("message", "User added successfully");
        return "success";
    }

    @RequestMapping("/users")
    public String getUsers(Model model) {
        List<User> users = userService.getUsers();
        model.addAttribute("users", users);
        return "users";
    }
}
<!-- View -->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Success</title>
</head>
<body>
<h1>Success</h1>
<p>${message}</p>
</body>
</html>
实战案例分析

本节通过一个简单的用户管理系统来展示如何使用SSM框架实现Web应用。用户可以添加用户信息,查看所有用户信息,并进行数据绑定和表单验证。

示例代码

// User实体类
public class User {
    private int id;
    private String name;
    private String email;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
<!-- MyBatis映射文件 -->
<insert id="addUser" parameterType="com.example.demo.User">
    INSERT INTO users (name, email) VALUES (#{name}, #{email})
</insert>

<select id="getUsers" resultType="com.example.demo.User">
    SELECT id, name, email FROM users
</select>
// UserMapper接口
@Mapper
public interface UserMapper {
    void addUser(User user);

    List<User> getUsers();
}
// UserService类
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public void addUser(User user) {
        userMapper.addUser(user);
    }

    public List<User> getUsers() {
        return userMapper.getUsers();
    }
}
// Controller类
@Controller
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/addUser")
    public String addUser(@ModelAttribute("user") User user, Model model) {
        userService.addUser(user);
        model.addAttribute("message", "User added successfully");
        return "success";
    }

    @RequestMapping("/users")
    public String getUsers(Model model) {
        List<User> users = userService.getUsers();
        model.addAttribute("users", users);
        return "users";
    }
}
<!-- View -->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>User List</title>
</head>
<body>
<h1>User List</h1>
<table>
    <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Email</th>
    </tr>
    <c:forEach var="user" items="${users}">
        <tr>
            <td>${user.id}</td>
            <td>${user.name}</td>
            <td>${user.email}</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>
常见问题与解决方案

问题1: Spring配置文件未找到

解决方案

确保Spring配置文件路径正确,并且文件名和配置正确。

问题2: 数据库连接失败

解决方案

检查数据库连接信息,确保数据库已启动并且连接信息正确。

问题3: MyBatis映射文件未找到

解决方案

确保MyBatis映射文件路径正确,并且文件名和配置正确。

问题4: Controller未被识别

解决方案

确保Controller类使用了@Controller注解,并且Spring配置文件中配置了DispatcherServlet。

问题5: 视图解析失败

解决方案

确保视图解析器配置正确,并且视图资源路径正确。

通过以上步骤和示例代码,可以更好地理解SSM框架的使用方法和应用场景。希望本文能帮助你快速上手SSM框架,开发出高质量的Web应用。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消