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

SSM入门:新手必看的Spring、Spring MVC与MyBatis整合教程

标签:
SSM
概述

本文介绍了SSM入门,这是一种轻量级的Java开发框架,包括Spring、Spring MVC和MyBatis。SSM框架适合企业级应用开发,本文详细讲解了SSM框架的环境搭建、Spring和Spring MVC的核心概念及配置,以及MyBatis的基本使用方法和CRUD操作示例。通过实际案例演示了如何整合SSM框架,实现高效的数据操作和业务逻辑处理。

SSM框架简介

SSM框架概述

SSM框架是Spring、Spring MVC和MyBatis的简称,是Java开发中常用的轻量级开发框架。Spring提供了一个全面的Java应用程序框架,用于构建企业级应用,Spring MVC则提供了基于Spring的Web MVC框架,而MyBatis则是一个优秀的持久层框架,简化了数据库操作。

SSM框架的优点

  1. 轻量级框架: SSM框架采用依赖注入(IoC)和控制反转(DI)模式,简化了开发过程,减少了代码量。
  2. 模块化设计: 三个框架各自独立,可以根据项目需求选择性使用,具有高度的灵活性。
  3. 无缝集成: Spring和MyBatis可以无缝集成,通过Spring的IoC容器管理MyBatis的SqlSessionFactory和SqlSession对象,简化数据访问层的开发。
  4. AOP支持: Spring框架提供了强大的AOP支持,可以方便地实现横切关注点(如日志记录、事务处理等)。
  5. 配置灵活: 通过配置文件可以灵活地配置应用程序的各种组件,如数据库连接、事务管理等。
  6. 社区活跃: SSM框架的社区活跃度高,有大量的开源项目和第三方插件可供选择。

SSM框架的适用场景

  1. 企业级应用开发: 所有企业级应用,如ERP系统、CRM系统、OA系统等,均可使用SSM框架进行开发。
  2. Web应用开发: Web应用开发中,使用SSM框架可以简化前后端交互,提高开发效率。
  3. 数据层操作: 对于需要频繁进行数据库操作的应用,如大数据处理、数据分析等,MyBatis提供了强大的SQL映射功能,非常适合这些场景。
  4. 小型项目: 对于小型项目,SSM框架也足够灵活,可以快速搭建出一个高效的应用系统。

环境搭建

开发工具准备

  • IDE: 推荐使用IntelliJ IDEA或Eclipse。
  • 版本控制: 使用Git进行版本控制。
  • 构建工具: Maven或Gradle,这里以Maven为例。

Java开发环境配置

  1. 安装JDK: 下载并安装JDK,推荐使用JDK 1.8或以上版本。
  2. 配置环境变量:
    • JAVA_HOME: 指定JDK安装路径,如C:\Program Files\Java\jdk-1.8.0_211
    • PATH: 添加%JAVA_HOME%\bin到环境变量中。
  3. 验证安装:
    java -version

Maven项目搭建

  1. 创建Maven项目:

    • 使用IDE新建Maven项目,选择maven-archetype-quickstart模板。
    • 生成pom.xml文件。
  2. 配置pom.xml:
    • 添加Spring、Spring MVC和MyBatis的依赖。
<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-intro</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.3.10</version>
        </dependency>
        <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-tx</artifactId>
            <version>5.3.10</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.10</version>
        </dependency>

        <!-- MyBatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>

        <!-- MySQL驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>

        <!-- Log4j2 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.14.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.14.1</version>
        </dependency>
    </dependencies>
</project>
  1. 创建目录结构:
    • src/main/java: 源代码目录。
    • src/main/resources: 资源文件目录,如配置文件等。
    • src/main/webapp: Web应用的根目录,包括WEB-INFweb.xml
    • src/test/java: 单元测试目录。
    • src/test/resources: 测试资源文件目录。

Spring、Spring MVC、MyBatis依赖配置

  1. Spring配置:

    • applicationContext.xml: Spring核心配置文件。
    • spring-mvc-config.xml: Spring MVC配置文件。
  2. MyBatis配置:
    • mybatis-config.xml: MyBatis核心配置文件。

Spring框架入门

Spring核心概念

  • IoC(控制反转): Spring容器负责创建和管理对象的生命周期和依赖关系。
  • DI(依赖注入): 通过配置文件或注解方式将对象的依赖注入到需要使用的对象中。
  • AOP(面向切面编程): 通过预编译方式和运行期代理实现程序功能的横向分解,用于实现横切关注点。

Spring配置文件详解

  1. 核心配置文件:

    • applicationContext.xml:

      <?xml version="1.0" encoding="UTF-8"?>
      <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.service.UserServiceImpl">
         <property name="userRepository" ref="userRepository"/>
      </bean>
      
      <bean id="userRepository" class="com.example.repository.UserRepositoryImpl">
         <property name="dataSource" ref="dataSource"/>
      </bean>
      
      <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>
      </beans>
  2. AOP配置:

    • aop.xml:

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/aop
                            http://www.springframework.org/schema/aop/spring-aop.xsd">
      
      <aop:config>
         <aop:pointcut id="userServicePointcut" expression="execution(* com.example.service.UserServiceImpl.*(..))"/>
         <aop:advisor pointcut-ref="userServicePointcut" advice-ref="loggingAdvice"/>
      </aop:config>
      
      <bean id="loggingAdvice" class="com.example.advice.LoggingAdvice"/>
      </beans>

Spring IOC和AOP的使用

  1. 依赖注入示例:

    package com.example.service;
    
    import com.example.repository.UserRepository;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserServiceImpl implements UserService {
    
       private UserRepository userRepository;
    
       @Autowired
       public void setUserRepository(UserRepository userRepository) {
           this.userRepository = userRepository;
       }
    
       public void addUser(User user) {
           userRepository.save(user);
       }
    }
  2. AOP示例:

    package com.example.advice;
    
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.aspectj.lang.annotation.Pointcut;
    import org.springframework.stereotype.Component;
    
    @Aspect
    @Component
    public class LoggingAdvice {
    
       @Pointcut("execution(* com.example.service.UserServiceImpl.addUser(..))")
       public void userServicePointcut() {}
    
       @Before("userServicePointcut()")
       public void logBefore(JoinPoint joinPoint) {
           System.out.println("Logging before method: " + joinPoint.getSignature().getName());
       }
    }

Spring MVC框架入门

Spring MVC工作原理

Spring MVC是一个基于Java的Web框架,由Spring框架提供支持。它通过控制器(Controller)、视图(View)和模型(Model)的分离来简化Web应用开发。工作流程如下:

  1. 请求处理: 用户发起HTTP请求到前端控制器(DispatcherServlet)。
  2. 请求分发: 前端控制器根据请求信息(URI、请求参数等)找到合适的处理器(Handler)。
  3. 处理器执行: 找到处理器后,处理器处理请求,并将结果传递给视图解析器(ViewResolver)。
  4. 视图解析: 视图解析器解析视图,并将视图名称传递给视图(View)。
  5. 视图渲染: 视图渲染请求结果,并将结果返回给前端控制器(DispatcherServlet)。
  6. 响应返回: 前端控制器将结果作为HTTP响应返回给客户端。

Hello World示例

  1. 配置文件:

    • web.xml:
      <?xml version="1.0" encoding="UTF-8"?>
      <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                              http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
          version="3.1">
      <display-name>SSM Example App</display-name>
      <welcome-file-list>
         <welcome-file>index.html</welcome-file>
      </welcome-file-list>
      <servlet>
         <servlet-name>dispatcher</servlet-name>
         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
         <init-param>
             <param-name>contextConfigLocation</param-name>
             <param-value>/WEB-INF/spring-mvc-config.xml</param-value>
         </init-param>
         <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
         <servlet-name>dispatcher</servlet-name>
         <url-pattern>/</url-pattern>
      </servlet-mapping>
      </web-app>
  2. Spring MVC配置文件:

    • spring-mvc-config.xml:

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        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/context
                            http://www.springframework.org/schema/context/spring-context.xsd
                            http://www.springframework.org/schema/mvc
                            http://www.springframework.org/schema/mvc/spring-mvc.xsd">
      
      <context:component-scan base-package="com.example"/>
      <mvc:annotation-driven/>
      
      <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
         <property name="prefix" value="/WEB-INF/views/"/>
         <property name="suffix" value=".jsp"/>
      </bean>
      </beans>
  3. Controller示例:

    package com.example.controller;
    
    import com.example.service.UserServiceImpl;
    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.RequestMapping;
    
    @Controller
    @RequestMapping("/hello")
    public class HelloWorldController {
    
       @Autowired
       private UserServiceImpl userService;
    
       @GetMapping
       public String helloWorld(Model model) {
           model.addAttribute("message", "Hello, World!");
           return "hello";
       }
    }
  4. View示例:
    • WEB-INF/views/hello.jsp:
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
      <title>Hello World</title>
      </head>
      <body>
      <h1>${message}</h1>
      </body>
      </html>

Controller、View、Model的使用

  1. Controller:

    package com.example.controller;
    
    import com.example.service.UserServiceImpl;
    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.RequestMapping;
    
    @Controller
    @RequestMapping("/users")
    public class UserController {
    
       @Autowired
       private UserServiceImpl userService;
    
       @GetMapping("/list")
       public String listUsers(Model model) {
           model.addAttribute("users", userService.getAllUsers());
           return "users/list";
       }
    }
  2. View示例:

    • WEB-INF/views/users/list.jsp:
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
      <title>User List</title>
      </head>
      <body>
      <h1>User List</h1>
      <table>
      <thead>
         <tr>
             <th>ID</th>
             <th>Name</th>
             <th>Email</th>
         </tr>
      </thead>
      <tbody>
         <c:forEach var="user" items="${users}">
             <tr>
                 <td>${user.id}</td>
                 <td>${user.name}</td>
                 <td>${user.email}</td>
             </tr>
         </c:forEach>
      </tbody>
      </table>
      </body>
      </html>
  3. Model示例:

    package com.example.service;
    
    import com.example.entity.User;
    import com.example.repository.UserRepository;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    @Service
    public class UserServiceImpl implements UserService {
    
       private UserRepository userRepository;
    
       @Autowired
       public void setUserRepository(UserRepository userRepository) {
           this.userRepository = userRepository;
       }
    
       public List<User> getAllUsers() {
           return userRepository.findAll();
       }
    }

MyBatis框架入门

MyBatis基础概念

MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射。MyBatis可以使用非常灵活的XML配置或注解进行配置,可以将接口和Java的POJO(Plain Old Java Objects)映射成数据库中的记录。

MyBatis配置文件解析

  1. MyBatis配置文件:

    • mybatis-config.xml:
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
      <configuration>
      <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="com/example/mapper/UserMapper.xml"/>
      </mappers>
      </configuration>
  2. Mapper XML配置:
    • UserMapper.xml:
      <?xml version="1.0" encoding="UTF-8"?>
      <mapper namespace="com.example.mapper.UserMapper">
      <select id="selectUserById" resultType="com.example.entity.User">
         SELECT id, name, email FROM users WHERE id = #{id}
      </select>
      <insert id="insertUser" parameterType="com.example.entity.User">
         INSERT INTO users (name, email) VALUES (#{name}, #{email})
      </insert>
      <update id="updateUser" parameterType="com.example.entity.User">
         UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}
      </update>
      <delete id="deleteUser" parameterType="java.lang.Integer">
         DELETE FROM users WHERE id = #{id}
      </delete>
      </mapper>

CRUD操作示例

  1. 实体类:

    package com.example.entity;
    
    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;
       }
    }
  2. Mapper接口:

    package com.example.mapper;
    
    import com.example.entity.User;
    import org.apache.ibatis.annotations.*;
    
    import java.util.List;
    
    public interface UserMapper {
    
       @Select("SELECT * FROM users WHERE id = #{id}")
       User selectUserById(int id);
    
       @Insert("INSERT INTO users (name, email) VALUES (#{name}, #{email})")
       void insertUser(User user);
    
       @Update("UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}")
       void updateUser(User user);
    
       @Delete("DELETE FROM users WHERE id = #{id}")
       void deleteUser(int id);
    
       @Select("SELECT * FROM users")
       List<User> getAllUsers();
    }
  3. Repository实现:

    package com.example.repository;
    
    import com.example.entity.User;
    import com.example.mapper.UserMapper;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Repository;
    
    import java.util.List;
    
    @Repository
    public class UserRepositoryImpl implements UserRepository {
    
       private SqlSessionFactory sqlSessionFactory;
    
       @Autowired
       public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
           this.sqlSessionFactory = sqlSessionFactory;
       }
    
       @Override
       public User selectUserById(int id) {
           try (SqlSession session = sqlSessionFactory.openSession()) {
               UserMapper mapper = session.getMapper(UserMapper.class);
               return mapper.selectUserById(id);
           }
       }
    
       @Override
       public void insertUser(User user) {
           try (SqlSession session = sqlSessionFactory.openSession()) {
               UserMapper mapper = session.getMapper(UserMapper.class);
               mapper.insertUser(user);
               session.commit();
           }
       }
    
       @Override
       public void updateUser(User user) {
           try (SqlSession session = sqlSessionFactory.openSession()) {
               UserMapper mapper = session.getMapper(UserMapper.class);
               mapper.updateUser(user);
               session.commit();
           }
       }
    
       @Override
       public void deleteUser(int id) {
           try (SqlSession session = sqlSessionFactory.openSession()) {
               UserMapper mapper = session.getMapper(UserMapper.class);
               mapper.deleteUser(id);
               session.commit();
           }
       }
    
       @Override
       public List<User> getAllUsers() {
           try (SqlSession session = sqlSessionFactory.openSession()) {
               UserMapper mapper = session.getMapper(UserMapper.class);
               return mapper.getAllUsers();
           }
       }
    }

整合SSM框架

整合步骤详解

  1. 创建项目:

    • 使用Maven创建项目,配置好Maven依赖。
    • 创建项目目录结构,如src/main/javasrc/main/resourcessrc/main/webapp等。
  2. Spring配置:

    • src/main/resources目录下创建applicationContext.xmlaop.xml配置文件。
    • 配置Spring的IoC容器,管理服务和数据访问对象。
  3. Spring MVC配置:

    • src/main/webapp/WEB-INF目录下创建web.xmlspring-mvc-config.xml
    • 配置前端控制器DispatcherServlet和视图解析器。
  4. MyBatis配置:

    • src/main/resources目录下创建mybatis-config.xml
    • 配置MyBatis的数据源和映射文件。
  5. 服务层实现:

    • 创建服务接口和实现类,注入依赖并实现业务逻辑。
    • 使用Spring注解进行依赖注入。
  6. 数据访问层实现:

    • 创建数据访问接口和实现类。
    • 使用MyBatis的Mapper接口和XML映射文件进行数据库操作。
  7. Web层实现:
    • 创建控制器类,处理HTTP请求并调用服务层。
    • 返回视图名称或模型数据给视图解析器。
    • 创建视图文件,如JSP,展示数据。

实际案例演示

  1. 创建数据库:

    • 创建一个数据库,并设置用户名和密码。
    • 创建一个用户表users,包含idnameemail字段。
  2. 实体类:

    package com.example.entity;
    
    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;
       }
    }
  3. Mapper接口:

    package com.example.mapper;
    
    import com.example.entity.User;
    import org.apache.ibatis.annotations.*;
    
    @Mapper
    public interface UserMapper {
    
       @Select("SELECT * FROM users WHERE id = #{id}")
       User selectUserById(int id);
    
       @Insert("INSERT INTO users (name, email) VALUES (#{name}, #{email})")
       void insertUser(User user);
    
       @Update("UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}")
       void updateUser(User user);
    
       @Delete("DELETE FROM users WHERE id = #{id}")
       void deleteUser(int id);
    
       @Select("SELECT * FROM users")
       List<User> getAllUsers();
    }
  4. Repository实现:

    package com.example.repository;
    
    import com.example.entity.User;
    import com.example.mapper.UserMapper;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Repository;
    
    import java.util.List;
    
    @Repository
    public class UserRepositoryImpl implements UserRepository {
    
       private SqlSessionFactory sqlSessionFactory;
    
       @Autowired
       public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
           this.sqlSessionFactory = sqlSessionFactory;
       }
    
       @Override
       public User selectUserById(int id) {
           try (SqlSession session = sqlSessionFactory.openSession()) {
               UserMapper mapper = session.getMapper(UserMapper.class);
               return mapper.selectUserById(id);
           }
       }
    
       @Override
       public void insertUser(User user) {
           try (SqlSession session = sqlSessionFactory.openSession()) {
               UserMapper mapper = session.getMapper(UserMapper.class);
               mapper.insertUser(user);
               session.commit();
           }
       }
    
       @Override
       public void updateUser(User user) {
           try (SqlSession session = sqlSessionFactory.openSession()) {
               UserMapper mapper = session.getMapper(UserMapper.class);
               mapper.updateUser(user);
               session.commit();
           }
       }
    
       @Override
       public void deleteUser(int id) {
           try (SqlSession session = sqlSessionFactory.openSession()) {
               UserMapper mapper = session.getMapper(UserMapper.class);
               mapper.deleteUser(id);
               session.commit();
           }
       }
    
       @Override
       public List<User> getAllUsers() {
           try (SqlSession session = sqlSessionFactory.openSession()) {
               UserMapper mapper = session.getMapper(UserMapper.class);
               return mapper.getAllUsers();
           }
       }
    }
  5. Service实现:

    package com.example.service;
    
    import com.example.entity.User;
    import com.example.repository.UserRepository;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    @Service
    public class UserServiceImpl implements UserService {
    
       private UserRepository userRepository;
    
       @Autowired
       public void setUserRepository(UserRepository userRepository) {
           this.userRepository = userRepository;
       }
    
       @Override
       public User getUserById(int id) {
           return userRepository.selectUserById(id);
       }
    
       @Override
       public void addUser(User user) {
           userRepository.insertUser(user);
       }
    
       @Override
       public void updateUser(User user) {
           userRepository.updateUser(user);
       }
    
       @Override
       public void deleteUser(int id) {
           userRepository.deleteUser(id);
       }
    
       @Override
       public List<User> getAllUsers() {
           return userRepository.getAllUsers();
       }
    }
  6. Controller实现:

    package com.example.controller;
    
    import com.example.service.UserService;
    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.RequestMapping;
    
    @Controller
    @RequestMapping("/users")
    public class UserController {
    
       @Autowired
       private UserService userService;
    
       @GetMapping
       public String listUsers(Model model) {
           model.addAttribute("users", userService.getAllUsers());
           return "users/list";
       }
    
       @GetMapping("/add")
       public String addUserForm() {
           return "users/add";
       }
    
       @PostMapping("/add")
       public String addUser(User user) {
           userService.addUser(user);
           return "redirect:/users";
       }
    }
  7. 视图文件:

    • WEB-INF/views/users/list.jsp:

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
      <title>User List</title>
      </head>
      <body>
      <h1>User List</h1>
      <table>
      <thead>
         <tr>
             <th>ID</th>
             <th>Name</th>
             <th>Email</th>
         </tr>
      </thead>
      <tbody>
         <c:forEach var="user" items="${users}">
             <tr>
                 <td>${user.id}</td>
                 <td>${user.name}</td>
                 <td>${user.email}</td>
             </tr>
         </c:forEach>
      </tbody>
      </table>
      <a href="add">Add User</a>
      </body>
      </html>
    • WEB-INF/views/users/add.jsp:
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
      <title>Add User</title>
      </head>
      <body>
      <h1>Add User</h1>
      <form action="add" method="post">
      <label for="name">Name:</label>
      <input type="text" id="name" name="name" required>
      <br>
      <label for="email">Email:</label>
      <input type="email" id="email" name="email" required>
      <br>
      <input type="submit" value="Add User">
      </form>
      </body>
      </html>

常见问题及解决方法

  1. 依赖冲突:

    • 检查pom.xml中的依赖版本是否正确,确保没有冲突。
    • 使用mvn dependency:tree命令查看依赖树,找到冲突的依赖。
  2. Spring容器无法加载:

    • 确保applicationContext.xml配置文件路径正确。
    • 检查Spring配置文件中的bean定义是否正确。
  3. MyBatis无法映射SQL:

    • 确保mybatis-config.xml中配置的Mapper文件路径正确。
    • 检查Mapper XML文件中的SQL语句是否正确。
  4. 视图解析失败:

    • 确保spring-mvc-config.xml中配置的视图解析器路径正确。
    • 检查视图文件是否存在,路径是否正确。
  5. 数据库连接失败:

    • 检查数据库URL、用户名和密码是否正确。
    • 确保数据库服务已经启动,并且可以访问。
  6. 异常日志:
    • 查看异常日志,找到具体的错误信息。
    • 根据错误信息进行排查,如SQL语句错误、配置文件错误等。

通过以上步骤,可以完成SSM框架的整合,构建一个高效、灵活的Java Web应用。希望这篇文章能帮助你更好地理解和使用SSM框架。

点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消