一步步教你整合SSM框架(Spring MVC+Spring+MyBatis)详细教程

一步步教你整合SSM框架(Spring MVC+Spring+MyBatis)详细教程

什么是SSM框架?

SSM框架是Spring MVC + Spring + MyBatis三个框架的组合。它们都是Java企业级应用程序开发中非常流行的框架。Spring MVC框架负责请求处理,Spring框架负责业务逻辑处理和依赖注入,MyBatis框架负责数据库操作。

整合SSM框架的好处

  • 提高代码复用率和软件维护性;
  • 提高开发效率;
  • 可以快速搭建Java Web应用;
  • 对于一些复杂的应用,使用SSM框架可以有效地降低开发难度和维护成本,提高整个应用的性能。

整合SSM框架的步骤

  1. 引入相关依赖

在pom.xml文件中添加如下依赖:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.2.1.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.1.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.2.1.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.1.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.6</version>
</dependency>

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.2</version>
</dependency>
  1. 配置Spring

在src/main/resources目录下创建一个名为applicationContext.xml的文件,添加如下内容:

<!-- 开启自动扫描注解 -->
<context:component-scan base-package="com.example.controller" />
<context:component-scan base-package="com.example.service" />
<context:component-scan base-package="com.example.dao" />

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

<!-- 数据源配置 -->
<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/test?useSSL=false&amp;characterEncoding=utf8" />
    <property name="username" value="root" />
    <property name="password" value="123456" />
</bean>

<!-- MyBatis的MapperScannerConfigurer配置 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.example.dao" />
</bean>

<!-- 开启Spring MVC注解驱动,静态资源处理 -->
<mvc:annotation-driven />
<mvc:resources mapping="/static/**" location="/static/" />

<!-- 配置ViewResolver,返回freemarker模板 -->
<bean id="freemarkerConf" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPath" value="/WEB-INF/freemarker/" />
</bean>

<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
    <property name="order" value="1" />
    <property name="prefix" value="" />
    <property name="suffix" value=".ftl" />
    <property name="contentType" value="text/html;charset=UTF-8" />
    <property name="cache" value="false" />
</bean>
  1. 配置Spring MVC

在web.xml文件中添加如下内容:

<!-- 配置DispatcherServlet -->
<servlet>
    <servlet-name>demo</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:applicationContext.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>demo</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!-- 配置字符编码过滤器 -->
<filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
  1. 配置MyBatis

在src/main/resources目录下创建一个名为mybatis.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>

<!-- 别名 -->
<typeAliases>
    <package name="com.example.model" />
</typeAliases>

<!-- 数据库连接配置 -->
<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC" />
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver" />
            <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false&amp;characterEncoding=utf8" />
            <property name="username" value="root" />
            <property name="password" value="123456" />
        </dataSource>
    </environment>
</environments>

<!-- 映射器 -->
<mappers>
    <mapper resource="com/example/dao/UserMapper.xml"/>
</mappers>

</configuration>
  1. 编写数据库操作代码
package com.example.dao;

import com.example.model.User;
import org.apache.ibatis.annotations.Param;

public interface UserDao {
    User getUserByUsername(@Param("username") String username);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.dao.UserDao">

<!-- 通过username获取用户信息 -->
<select id="getUserByUsername" parameterType="string" resultType="com.example.model.User">
    select * from user where username = #{username}
</select>

</mapper>
  1. 编写业务逻辑代码
package com.example.service;

import com.example.model.User;

public interface UserService {
    User getUserByUsername(String username);
}
package com.example.service.impl;

import com.example.dao.UserDao;
import com.example.model.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;

    @Override
    public User getUserByUsername(String username) {
        return userDao.getUserByUsername(username);
    }
}
  1. 编写控制器代码
package com.example.controller;

import com.example.model.User;
import com.example.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.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/{username}")
    public String getUserByUsername(@PathVariable String username, ModelMap map) {
        User user = userService.getUserByUsername(username);
        map.put("user", user);
        return "user";
    }
}
  1. 编写视图文件

在WEB-INF/freemarker目录下创建一个名为user.ftl的文件,添加如下内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户信息</title>
</head>
<body>
    <h1>用户信息</h1>
    <p>用户名:${user.username}</p>
    <p>密码:${user.password}</p>
</body>
</html>

示例说明

示例一:获取用户信息

  1. 在数据库中添加一条用户信息:
INSERT INTO `test`.`user`(`username`, `password`) VALUES ('admin', '123456');
  1. 启动Web服务器,访问URL:
http://localhost:8080/user/admin

就可以看到输出用户信息的页面。

示例二:修改用户密码

  1. 在UserDao中添加一个updateUserPassword方法:
package com.example.dao;

import com.example.model.User;
import org.apache.ibatis.annotations.Param;

public interface UserDao {
    User getUserByUsername(@Param("username") String username);

    void updateUserPassword(@Param("username") String username, @Param("newPassword") String newPassword);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.dao.UserDao">

<!-- 通过username获取用户信息 -->
<select id="getUserByUsername" parameterType="string" resultType="com.example.model.User">
    select * from user where username = #{username}
</select>

<!-- 修改用户密码 -->
<update id="updateUserPassword" parameterType="map">
    update user set password = #{newPassword} where username = #{username}
</update>

</mapper>
  1. 在UserService中添加一个updateUserPassword方法:
package com.example.service;

public interface UserService {
    void updateUserPassword(String username, String newPassword);
}
package com.example.service.impl;

import com.example.dao.UserDao;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;

    @Override
    @Transactional
    public void updateUserPassword(String username, String newPassword) {
        userDao.updateUserPassword(username, newPassword);
    }
}
  1. 在UserController中添加一个updateUserPassword方法:
package com.example.controller;

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

@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/{username}")
    public String getUserByUsername(@PathVariable String username, ModelMap map) {
        User user = userService.getUserByUsername(username);
        map.put("user", user);
        return "user";
    }

    @RequestMapping("/updatePassword/{username}/{newPassword}")
    public String updateUserPassword(@PathVariable String username, @PathVariable String newPassword) {
        userService.updateUserPassword(username, newPassword);
        return "success";
    }
}
  1. 在WEB-INF/freemarker目录下创建一个名为success.ftl的文件,添加如下内容:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>修改密码成功</title>
</head>
<body>
    <h1>修改密码成功</h1>
</body>
</html>
  1. 启动Web服务器,访问URL:
http://localhost:8080/user/updatePasword/admin/654321

就可以看到提示修改密码成功的页面。

以上是整合SSM框架的详细教程和两个示例的说明。如果您需要更多的框架资料和帮助,可以查看官方网站或者其他技术博客。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一步步教你整合SSM框架(Spring MVC+Spring+MyBatis)详细教程 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • 原来这就是所谓的 JSR!

    相信大家在学习 Java 的过程中,或多或少都见过 JSR 这个词。本篇文章就科普下什么是 JSR。 什么是 JSR ? JSR(Java Specification Requests),是指 Java 规范请求(或者活规范提案)。这个请求(提案)是提给 JCP 的(Java Community Process)。那什么是 JCP 呢? JCP 官网在这:h…

    Java 2023年4月22日
    00
  • Java中JFinal框架动态切换数据库的方法

    下面我将详细讲解“Java中JFinal框架动态切换数据库的方法”的完整攻略。 1. 背景 JFinal框架是一个优秀的Java Web开发框架,它集成了众多实用的插件,如ActiveRecord、JFinal-Enjoy等,使开发变得更加高效。在实际开发中,常常会遇到需要动态切换数据库的情况,这时候我们就需要使用JFinal框架提供的多数据源功能来完成这个…

    Java 2023年5月19日
    00
  • java工程师进阶之MyBatis延迟加载的使用

    Java工程师进阶之MyBatis延迟加载的使用攻略 MyBatis是Java中常用的一款ORM框架,它能够简化Java与关系型数据库的交互,提高工作效率。MyBatis在优化查询性能方面表现尤为突出,其中延迟加载技术尤为重要。本篇攻略将重点介绍MyBatis中的延迟加载技术的使用方法及技巧。 什么是MyBatis的延迟加载 MyBatis的延迟加载(Laz…

    Java 2023年5月20日
    00
  • Java的Struts框架报错“ActionForwardInvalidateException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“ActionForwardInvalidateException”错误。这个错误通常由以下原因之一起: ActionForward配置错误:如果配置文件中没有正确配置ActionForward,则可能会现此错误。在这种情况下,需要检查文件以解决此问题。 ActionForward无效:如果ActionForwa…

    Java 2023年5月5日
    00
  • java实现图书管理系统

    Java实现图书管理系统示例 1. 开发环境准备 在开始开发之前,需要准备以下开发工具和环境: Java SE Development Kit(JDK)——Java开发工具包,用于编写和运行Java程序。 Eclipse IDE——一款Java开发集成工具,可以在其中编写Java代码。 MySQL数据库——用于存储图书和用户信息。 Navicat for M…

    Java 2023年5月18日
    00
  • springboot多数据源使用@Qualifier自动注入无效的解决

    这里是 springboot多数据源使用@Qualifier自动注入无效的解决 的完整攻略,按照以下步骤进行操作即可。 问题描述 在 Spring Boot 中使用多数据源时,我们通常会在每个数据源的配置类上使用 @Qualifier 注解来标识不同的数据源,以便在注入时进行区分。但是在有些情况下,这种方式可能会导致注入失败,无法自动注入需要的数据源对象。 …

    Java 2023年5月20日
    00
  • springboot日期格式化及时差问题分析

    下面我将为你介绍有关“springboot日期格式化及时差问题分析”的完整攻略。 1. 前言 在日常开发中,很多场景需要对时区、日期格式进行处理,如果不处理好,就可能会导致一些问题,如时差问题等,本文将介绍如何使用SpringBoot来处理日期格式化及时差问题。 2. 日期格式化 在Java中,日期格式化主要是通过SimpleDateFormat类实现。在S…

    Java 2023年5月20日
    00
  • SpringMVC中的表现层结果封装

    在SpringMVC中,表现层结果封装是将控制器方法的返回值封装为一个特定的结果类型,以便于在视图中进行处理。本文将详细介绍SpringMVC中的表现层结果封装的方法,并提供两个示例来说明这些方法的使用。 方法一:使用ModelAndView 在SpringMVC中,我们可以使用ModelAndView类来封装控制器方法的返回值。以下是一个简单的示例: @G…

    Java 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部