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

SSM资料入门详解与实战教程

标签:
SSM
概述

SSM资料介绍了Spring、Spring MVC和MyBatis三个框架的集成,帮助开发者构建高效、灵活的Web应用。文章详细讲解了SSM框架的组成部分、优势与应用场景,并指导读者如何搭建开发环境和配置项目。此外,文章还提供了实战案例,帮助读者深入理解和应用SSM框架。

SSM框架简介

SSM框架的定义

SSM框架是Spring、Spring MVC和MyBatis三个框架的集成。Spring主要负责业务逻辑的控制,Spring MVC负责Web层的控制,MyBatis负责数据库的操作。这三个框架相互协作,形成了一个完整的MVC架构。SSM框架因其简单易用、功能强大而被广泛应用于Java Web项目中。

SSM框架的组成部分及其作用

  1. Spring:Spring是一个轻量级的企业级Java开发框架,主要负责业务逻辑的控制。Spring框架的核心是依赖注入(Dependency Injection,DI)和控制反转(Inversion of Control,IoC)。
  2. Spring MVC:Spring MVC是Spring框架的一部分,用于构建Web应用。它遵循MVC设计模式,帮助开发者更高效地构建Web应用。Spring MVC通过配置文件或注解来定义控制器(Controller)、视图解析器和处理器适配器等组件。
  3. MyBatis:MyBatis是一个持久层框架,它提供了对数据库操作的简化接口,使开发者可以通过简单的SQL映射文件实现对数据库的访问。MyBatis通过配置文件或注解定义SQL语句,并将查询结果映射到Java对象。

SSM框架的优势与应用场景

  1. 优势

    • 轻量级:相比其他重量级的框架(如EJB),SSM框架更加轻量级,易于学习和使用。
      . 松耦合:各个组件之间通过配置文件或注解进行解耦,提高了代码的复用性和可维护性。
    • 灵活:可以根据需求灵活选择组件,如Spring支持多种持久层框架,这里选择了MyBatis。
    • 强大:Spring提供了强大的依赖注入和控制反转功能,而MyBatis能够简化复杂的SQL操作。
  2. 应用场景
    • 企业级应用:SSM框架适用于企业级应用,特别是那些需要灵活、可扩展的Web应用。
    • 中小型项目:对于中小型项目,SSM框架提供了足够的功能和灵活性,同时不会增加不必要的复杂性。
    • 快速开发:SSM框架的优点之一是能够快速搭建开发环境,缩短项目开发周期。
SSM环境搭建

开发环境需求

  • JDK:推荐使用Java SE 8及以上版本。
  • IDE:常用的IDE有Eclipse、IntelliJ IDEA等。
  • 服务器:Tomcat或其他支持Servlet规范的应用服务器。
  • 数据库:MySQL或其他关系型数据库系统。

Maven配置与管理

Maven是一个强大的项目构建工具,它能够帮助我们管理依赖关系、编译代码、打包项目等。以下是Maven的基本配置和使用方法:

  1. 创建Maven项目
    在IDE中创建一个新的Maven项目,选择Web应用的模板,并配置好项目基本信息。

  2. pom.xml配置
    pom.xml文件是Maven的核心配置文件,用于管理项目依赖关系、构建插件等。
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>ssm-example</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
        <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>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.23</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

导入SSM相关Jar包

在Maven项目中,通过pom.xml文件中的dependencies标签导入所需的SSM相关依赖。Maven会自动从远程仓库下载这些依赖并添加到项目的构建路径中。

例如,导入Spring和MyBatis的相关依赖:

<dependencies>
    <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.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
    <!-- 其他依赖 -->
</dependencies>
项目结构与配置

项目文件夹结构介绍

SSM项目的目录结构一般如下:

src
└── main
    ├── java
    │   └── com.example.ssm
    │       └── controller  # 控制器
    │       └── service     # 服务层
    │       └── mapper      # 映射层
    │       └── model       # 模型层
    └── resources
        ├── applicationContext.xml  # Spring配置文件
        ├── mybatis-config.xml      # MyBatis配置文件
        └── mapper                  # SQL映射文件

Spring配置文件详解

Spring配置文件主要有两个:applicationContext.xmlspring-mvc.xml。前者配置全局的Spring Bean,后者配置Spring MVC的Bean。

applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="userService" class="com.example.ssm.service.UserService"/>
    <bean id="userMapper" class="com.example.ssm.mapper.UserMapper"/>

    <!-- 数据源 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
        <property name="username" value="root"/>
        <property name="password" value="password"/>
    </bean>

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

    <!-- MyBatis MapperScan -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.example.ssm.mapper"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
</beans>

spring-mvc.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <mvc:annotation-driven/>

    <!-- 静态资源映射 -->
    <mvc:resources mapping="/resources/**" location="/resources/"/>

    <!-- Controller扫描 -->
    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!-- 添加Controller -->
    <bean class="com.example.ssm.controller.UserController"/>
</beans>

MyBatis配置与SQL映射文件

mybatis-config.xml

MyBatis的配置文件主要配置数据源、事务管理器和SqlSessionFactory。

<configuration>
    <typeAliases>
        <typeAlias type="com.example.ssm.model.User" alias="User"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

SQL映射文件

mapper目录下创建SQL映射文件,如UserMapper.xml

<mapper namespace="com.example.ssm.mapper.UserMapper">
    <select id="getUserById" resultType="User">
        SELECT * FROM users WHERE id = #{id}
    </select>
    <select id="getAllUsers" resultType="User">
        SELECT * FROM users
    </select>
    <select id="getUserByUsernameAndPassword" resultType="User">
        SELECT * FROM users WHERE username = #{username} AND password = #{password}
    </select>
    <insert id="addUser">
        INSERT INTO users (username, email) VALUES (#{username}, #{email})
    </insert>
</mapper>

Spring MVC配置与控制器创建

控制器创建

创建控制器类,如UserController.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;

import com.example.ssm.service.UserService;

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

    @RequestMapping(value = "/users", method = RequestMethod.GET)
    public String listUsers(ModelMap model) {
        model.addAttribute("users", userService.getAllUsers());
        return "users";
    }

    @RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
    public String getUserById(@PathVariable("id") int id, ModelMap model) {
        model.addAttribute("user", userService.getUserById(id));
        return "user";
    }
}
实战案例

创建一个简单的Web应用

创建一个简单的Web应用,实现用户信息的展示功能。

创建数据库表

首先,创建一个用于存储用户信息的数据库表:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50),
    email VARCHAR(100)
);

创建实体类

创建一个User实体类:

package com.example.ssm.model;

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

    // Getters and Setters
    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

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

创建Mapper接口和映射文件

创建一个Mapper接口:

package com.example.ssm.mapper;

import com.example.ssm.model.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper {
    User getUserById(int id);
    List<User> getAllUsers();
    User getUserByUsernameAndPassword(String username, String password);
    void addUser(String username, String email);
}

创建映射文件UserMapper.xml

<mapper namespace="com.example.ssm.mapper.UserMapper">
    <select id="getUserById" resultType="com.example.ssm.model.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
    <select id="getAllUsers" resultType="com.example.ssm.model.User">
        SELECT * FROM users
    </select>
    <select id="getUserByUsernameAndPassword" resultType="com.example.ssm.model.User">
        SELECT * FROM users WHERE username = #{username} AND password = #{password}
    </select>
    <insert id="addUser">
        INSERT INTO users (username, email) VALUES (#{username}, #{email})
    </insert>
</mapper>

创建Service接口和实现类

创建一个Service接口:

package com.example.ssm.service;

import com.example.ssm.model.User;
import org.springframework.stereotype.Service;

import java.util.List;

public interface UserService {
    List<User> getAllUsers();
    User getUserById(int id);
    User getUserByUsernameAndPassword(String username, String password);
    void addUser(String username, String email);
}

创建Service实现类:

package com.example.ssm.service;

import com.example.ssm.mapper.UserMapper;
import com.example.ssm.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> getAllUsers() {
        return userMapper.getAllUsers();
    }

    @Override
    public User getUserById(int id) {
        return userMapper.getUserById(id);
    }

    @Override
    public User getUserByUsernameAndPassword(String username, String password) {
        return userMapper.getUserByUsernameAndPassword(username, password);
    }

    @Override
    public void addUser(String username, String email) {
        userMapper.addUser(username, email);
    }
}

创建控制器

创建一个控制器类:

package com.example.ssm.controller;

import com.example.ssm.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;

import java.util.List;

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

    @RequestMapping(value = "/users", method = RequestMethod.GET)
    public String listUsers(ModelMap model) {
        List<User> users = userService.getAllUsers();
        model.addAttribute("users", users);
        return "users";
    }

    @RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
    public String getUserById(@PathVariable("id") int id, ModelMap model) {
        User user = userService.getUserById(id);
        model.addAttribute("user", user);
        return "user";
    }

    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public String login(@RequestParam String username, @RequestParam String password, ModelMap model) {
        User user = userService.getUserByUsernameAndPassword(username, password);
        if (user != null) {
            return "redirect:/users";
        } else {
            return "login";
        }
    }

    @RequestMapping(value = "/addUser", method = RequestMethod.POST)
    public String addUser(@RequestParam String username, @RequestParam String email) {
        userService.addUser(username, email);
        return "redirect:/users";
    }
}

实现用户登录功能

实现用户登录功能,需要创建登录表单、处理登录请求的控制器、验证用户信息的服务和相应的SQL语句。

创建登录表单

WEB-INF/views目录下创建login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
<h2>Login</h2>
<form action="login" method="post">
    <label for="username">Username:</label>
    <input type="text" id="username" name="username"><br>
    <label for="password">Password:</label>
    <input type="password" id="password" name="password"><br>
    <input type="submit" value="Login">
</form>
</body>
</html>

创建控制器

在控制器中处理登录请求:

package com.example.ssm.controller;

import com.example.ssm.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;

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

    @RequestMapping(value = "/users", method = RequestMethod.GET)
    public String listUsers(ModelMap model) {
        List<User> users = userService.getAllUsers();
        model.addAttribute("users", users);
        return "users";
    }

    @RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
    public String getUserById(@PathVariable("id") int id, ModelMap model) {
        User user = userService.getUserById(id);
        model.addAttribute("user", user);
        return "user";
    }

    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public String login(@RequestParam String username, @RequestParam String password, ModelMap model) {
        User user = userService.getUserByUsernameAndPassword(username, password);
        if (user != null) {
            return "redirect:/users";
        } else {
            return "login";
        }
    }

    @RequestMapping(value = "/addUser", method = RequestMethod.POST)
    public String addUser(@RequestParam String username, @RequestParam String email) {
        userService.addUser(username, email);
        return "redirect:/users";
    }
}

创建服务

创建服务方法验证用户信息:

package com.example.ssm.service;

import com.example.ssm.mapper.UserMapper;
import com.example.ssm.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> getAllUsers() {
        return userMapper.getAllUsers();
    }

    @Override
    public User getUserById(int id) {
        return userMapper.getUserById(id);
    }

    @Override
    public User getUserByUsernameAndPassword(String username, String password) {
        return userMapper.getUserByUsernameAndPassword(username, password);
    }

    @Override
    public void addUser(String username, String email) {
        userMapper.addUser(username, email);
    }
}

创建SQL映射文件

UserMapper.xml中添加SQL映射:

<mapper namespace="com.example.ssm.mapper.UserMapper">
    <select id="getUserById" resultType="com.example.ssm.model.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
    <select id="getAllUsers" resultType="com.example.ssm.model.User">
        SELECT * FROM users
    </select>
    <select id="getUserByUsernameAndPassword" resultType="com.example.ssm.model.User">
        SELECT * FROM users WHERE username = #{username} AND password = #{password}
    </select>
    <insert id="addUser">
        INSERT INTO users (username, email) VALUES (#{username}, #{email})
    </insert>
</mapper>

添加用户信息到数据库

实现添加用户信息到数据库的功能,需要创建一个表单、控制器、服务和相应的SQL语句。

创建表单

WEB-INF/views目录下创建addUser.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>Add User</title>
</head>
<body>
<h2>Add User</h2>
<form action="addUser" method="post">
    <label for="username">Username:</label>
    <input type="text" id="username" name="username"><br>
    <label for="email">Email:</label>
    <input type="text" id="email" name="email"><br>
    <input type="submit" value="Add">
</form>
</body>
</html>

创建控制器

在控制器中处理添加用户请求:

package com.example.ssm.controller;

import com.example.ssm.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

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

    @RequestMapping(value = "/users", method = RequestMethod.GET)
    public String listUsers(ModelMap model) {
        List<User> users = userService.getAllUsers();
        model.addAttribute("users", users);
        return "users";
    }

    @RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
    public String getUserById(@PathVariable("id") int id, ModelMap model) {
        User user = userService.getUserById(id);
        model.addAttribute("user", user);
        return "user";
    }

    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public String login(@RequestParam String username, @RequestParam String password, ModelMap model) {
        User user = userService.getUserByUsernameAndPassword(username, password);
        if (user != null) {
            return "redirect:/users";
        } else {
            return "login";
        }
    }

    @RequestMapping(value = "/addUser", method = RequestMethod.POST)
    public String addUser(@RequestParam String username, @RequestParam String email) {
        userService.addUser(username, email);
        return "redirect:/users";
    }
}

创建服务

创建服务方法添加用户信息:

package com.example.ssm.service;

import com.example.ssm.mapper.UserMapper;
import com.example.ssm.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> getAllUsers() {
        return userMapper.getAllUsers();
    }

    @Override
    public User getUserById(int id) {
        return userMapper.getUserById(id);
    }

    @Override
    public User getUserByUsernameAndPassword(String username, String password) {
        return userMapper.getUserByUsernameAndPassword(username, password);
    }

    @Override
    public void addUser(String username, String email) {
        userMapper.addUser(username, email);
    }
}

创建SQL映射文件

UserMapper.xml中添加SQL映射:

<mapper namespace="com.example.ssm.mapper.UserMapper">
    <select id="getUserById" resultType="com.example.ssm.model.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
    <select id="getAllUsers" resultType="com.example.ssm.model.User">
        SELECT * FROM users
    </select>
    <select id="getUserByUsernameAndPassword" resultType="com.example.ssm.model.User">
        SELECT * FROM users WHERE username = #{username} AND password = #{password}
    </select>
    <insert id="addUser">
        INSERT INTO users (username, email) VALUES (#{username}, #{email})
    </insert>
</mapper>
常见问题与解决方案

SSM项目中遇到的常见错误及其解决方法

  1. 依赖缺失错误

    • 错误信息:NoClassDefFoundErrorClassNotFoundException
    • 解决方法:检查pom.xml中的依赖配置是否正确,并确保Maven已经下载并添加了这些依赖。
  2. 配置文件加载错误

    • 错误信息:BeanDefinitionParsingException
    • 解决方法:检查Spring配置文件是否有遗漏或错误的配置标签。
  3. MyBatis相关错误

    • 错误信息:ClassNotFoundExceptionNoSuchMethodError
    • 解决方法:确保MyBatis的配置文件和SQL映射文件路径正确,并且Mapper接口和映射文件的namespace匹配。
  4. 数据库连接错误
    • 错误信息:Connection refusedInvalid URL
    • 解决方法:检查applicationContext.xml中的数据源配置是否正确,确保数据库URL、用户名和密码正确无误。

运行时常见的问题排查技巧

  1. 查看日志

    • 运行项目时,查看IDE中的控制台输出或应用服务器的日志文件,可以帮助定位错误。
  2. 使用IDE调试工具

    • 利用IDE提供的调试功能,逐步执行代码,查看变量和调用栈,有助于定位问题。
  3. 配置断点

    • 在关键代码位置设置断点,运行到断点后,检查运行时的状态和变量值。
  4. 检查依赖版本
    • SSM框架的各个组件版本需要相互兼容,检查依赖版本是否匹配,确保没有使用过时或不兼容的版本。
总结与进阶方向

SSM框架特性的总结

SSM框架集成了Spring、Spring MVC和MyBatis三个强大的框架,提供了全面的功能支持,能够帮助开发者构建高效、灵活的Web应用。Spring负责业务逻辑控制,Spring MVC负责Web层控制,MyBatis负责数据库操作。通过合理配置和使用,SSM框架可以极大地提高开发效率和代码质量。

SSM框架后续学习方向与资源推荐

  1. 深入Spring框架

    • 学习Spring的IOC和AOP原理,掌握Spring的高级特性,如事务管理、消息订阅和发布等。
    • 推荐网站:慕课网 提供了丰富的Spring教程。
  2. 深入Spring MVC

    • 学习Spring MVC的更高级配置和使用,如拦截器、异常处理等。
    • 推荐网站:慕课网 提供了详细的Spring MVC教程。
  3. 深入MyBatis

    • 学习MyBatis的动态SQL、缓存机制等高级特性。
    • 推荐网站:慕课网 提供了MyBatis的详细教程。
  4. 学习其他相关技术

    • 学习JPA、Hibernate等持久层框架,比较它们与MyBatis的区别和使用场景。
    • 推荐网站:慕课网 提供了这些技术的教程和实战课程。
  5. 实际项目经验
    • 通过实际项目积累经验,逐步提升自己的开发能力。
    • 推荐网站:慕课网 提供了丰富的实战项目课程,可以帮助你更好地掌握这些技术。

通过以上总结和推荐的学习方向,开发者可以逐步提高自己在SSM框架方面的技能,并能够更好地应用于实际项目开发中。

点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消