整合JavaSSM框架【超详细】

在整合SSM之前我们首先要知道SSM框架指的是哪些框架?

Java的SSM指的是SpringSpring MVCMyBatis这三个框架

Spring框架

什么是Spring?

Spring是一个支持快速开发Java EE应用程序的框架。它提供了一系列底层容器和基础设施,并可以和大量常用的开源框架无缝集成,可以说是开发Java EE应用程序的必备。

Spring框架的特点

  • 依赖注入(DI):通过配置文件或注解,实现对象的依赖注入,简化了对象的创建和管理
  • 面向切面编程(AOP):支持AOP,允许将横切关注点(如日志记录、事务管理)分离出来,减少重复代码
  • 模块化设计:Spring框架是模块化的,包含多个子项目(如Spring Core、Spring Data、Spring Security等),可以根据需要选择使用

SpringMVC框架

什么是SpringMVC?

Spring MVC是Spring提供的一个实现了Web MVC设计模式的轻量级Web框架。它与Struts2框架一样,都属于MVC框架,但其使用和性能等方面比Struts2更加优异。

Spring MVC框架的特点

  • MVC架构:实现了Model-View-Controller设计模式,分离了业务逻辑、视图和控制器,组织结构清晰。
  • 注解驱动: 支持基于注解的配置,简化了开发工作。
  • 数据绑定和验证:提供了强大的数据绑定和表单验证功能,简化了用户输入处理。

MyBatis框架

什么是Mybatis?

Mybatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。

MyBatis框架的特点

  • SQL映射:通过XML或注解配置,将SQL语句与Java方法进行映射,开发人员可以直接编写原生SQL。
  • 动态SQL:支持动态生成SQL语句,灵活处理复杂的查询需求。
  • 简化的持久层开发:简化了数据库操作的代码编写,减少了样板代码。

创建Java项目

我这里使用的编译器版本:Intellij IDEA 2023.3.4
SDK版本:1.8
Tomcat版本:9.0.87
当然其他版本的项目创建可能略有差别。

新建一个Java项目

image.png

创建一个web模块

选择File->Project Structure
image.png
添加一个Web Module
image.png
提示没有任何工件,创建一个新工件
image.png
应用并完成
image.png

创建resources文件夹和lib文件夹

创建一个resources文件夹
image.png
标记为资源根目录
image.png
同样的在WEB-INF文件夹下创建一个lib文件夹
image.png

添加Tomcat

image.png
点击+号,选择Tomcat Server
image.png
这里提示没有任何工件被标记为依赖,这里修复一下,然后点击ok确认即可
image.png
在File->Project Structure中,添加Tomcat的依赖
image.png
选择Tomcat9.0.87,选择应用即可
image.png
最后可以在web文件夹下创建一个index.jsp测试一下
image.png
这样就完成了初步项目的创建工作

整合SSM框架

整合SSM框架的目的:利用各个框架的优势,将其集中在一个项目中进行使用

准备依赖文件

Spring所需的依赖文件

spring-beans-4.3.3.RELEASE.jarspring-context-4.3.3.RELEASE.jarspring-core-4.3.3.RELEASE.jarspring-expression-4.3.3.RELEASE.jaraopalliance-1.0.jaraspectjweaver-1.8.9.jarcommons-logging-1.2.jarspring-aop-4.3.3.RELEASE.jarspring-aspects-4.3.3.RELEASE.jar

Spring MVC所需的依赖文件

commons-fileupload.jarcommons-io.jarjstl.jarspring-web-4.3.3.RELEASE.jarspring-webmvc-4.3.3.RELEASE.jarstandard.jar

MyBatis所需的依赖文件

mybatis-3.4.4.jarmybatis-spring-1.3.0.jarmysql-connector-java-8.0.17.jarspring-jdbc-4.3.3.RELEASE.jarspring-orm-4.3.3.RELEASE.jarspring-tx-4.3.3.RELEASE.jardruid-1.2.8.jar

将所需的依赖文件导入项目

选择全部依赖并标记
image.png
image.png

准备数据库配置

数据库:mysql
数据库管理软件:Navicat Premium 16
数据库名:schooldb
image.png
表名:sys_users
字段
image.png
最后添加两条测试数据
image.png

整合Spring框架和MyBatis框架

编写Spring配置文件

在resources资源目录中创建一个spring配置文件
image.png
如下图所示:
image.png
创建一个mysql的属性配置文件
image.png
创建mysql.properties
image.png
写入数据库配置信息

mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/schooldb?serverTimezone=UTC
mysql.username=root
mysql.password=123456

这里的schooldb是数据库名
image.png
在src下新建包,分别为service,pojo,dao,controller
例如:
image.png
在resources目录下创建一个mappers目录用来存放映射文件
image.png
在applicationContext下写入以下内容

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       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
        http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop 
       http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!--1.引入外部资源文件-->
    <context:property-placeholder location="classpath:mysql.properties"/>

    <!--2.配置数据源-->
    <bean id="ds" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${mysql.driver}"/>
        <property name="url" value="${mysql.url}"/>
        <property name="username" value="${mysql.username}"/>
        <property name="password" value="${mysql.password}"/>
    </bean>

    <!--3.配置mybatis-->
    <!--(1)使用mybatis的配置类配置mybatis-->
    <bean id="config" class="org.apache.ibatis.session.Configuration">
        <!--开启驼峰命名-->
        <property name="mapUnderscoreToCamelCase" value="true"/>
        <!--配置日志的输出方法-->
        <property name="logImpl" value="org.apache.ibatis.logging.stdout.StdOutImpl"/>
    </bean>

    <!--(2)配置sqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
       <!--配置mybatis的配置内容-->
        <property name="configuration" ref="config"/>
        <!--配置类型别名-->
        <property name="typeAliasesPackage" value="edu.shifan.pojo"/>
        <!--配置mapper映射文件的自动扫描位置-->
        <property name="mapperLocations" value="classpath:mappers/*.xml"/>
        <!--配置数据源-->
        <property name="dataSource" ref="ds"/>
    </bean>

    <!--(3)配置mapper(接口文件的扫描位置)-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--配置Mapper映射接口的扫描位置-->
        <property name="basePackage" value="edu.shifan.dao"/>
    </bean>

    <!--4.配置事务管理器-->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="ds"/>
    </bean>

    <!--5.配置Aop-->
    <!--(1)配置消息:配置消息的处理方式-->
    <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="add" propagation="REQUIRED"/>
            <tx:method name="update" propagation="REQUIRED"/>
            <tx:method name="del*" propagation="REQUIRED"/>
            <tx:method name="find*" read-only="true"/>
        </tx:attributes>
    </tx:advice>

    <!--(2)配置切点-->
    <aop:config>
        <aop:pointcut id="txPointCut" expression="execution(* edu.shifan.service.*.*(..))"/>
        <!--把消息和切点链接到一起-->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
    </aop:config>

    <!--6.开启注解扫描-->
    <context:component-scan base-package="edu.shifan"/>

    <!--7.启用注解驱动-->
    <tx:annotation-driven transaction-manager="txManager"/>
</beans>

注意:这里报错是因为还没有在mappers目录下添加mapper映射文件
image.png

整合Spring MVC框架

编写Spring MVC配置文件

在resources目录下创建一个springmvc-config.xml的配置文件
image.png
如下图
image.png
在springmvc-config文件中写入下面的内容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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
        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">

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

    <!--2.开启注解扫描-->
    <context:component-scan base-package="edu.shifan.controller"/>

    <!--3.开启统一资源处理-->
    <mvc:default-servlet-handler/>

    <!--4.开启注解驱动-->
    <mvc:annotation-driven/>

</beans>

配置前端控制器

在web.xml文件下写入配置信息

<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_4_0.xsd" version="4.0">
    <!-- 1、配置全局参数(包含了Spring的配置文件位置)-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

    <!-- 2、配置监听器-->
    <!-- 配置ContextLoaderListener(加载Spring容器——ApplictionContext)-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- 3、配置前端控制器 -->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-config.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>


为了方便视图管理,这里在web/pages下存放视图,创建一个pages,如下图
image.png

测试

编写实体类

在pojo包下创建一个实体类User

package edu.shifan.pojo;

import java.io.Serializable;

public class User implements Serializable {
    private Integer userId;
    private String userName;
    private String account;
    private String pwd;
    private String url;
    private Integer state;

    @Override
    public String toString() {
        return "User{" +
        "userId=" + userId +
        ", userName='" + userName + '\'' +
        ", account='" + account + '\'' +
        ", pwd='" + pwd + '\'' +
        ", url='" + url + '\'' +
        ", state=" + state +
        '}';
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public Integer getState() {
        return state;
    }

    public void setState(Integer state) {
        this.state = state;
    }
}

编写Dao类

在dao包下创建一个UserDao

package edu.shifan.dao;

import edu.shifan.pojo.User;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * Dao层
 *  Mapper映射接口
 */
@Repository
public interface UserDao {
    /**
     * 查询所有用户信息列表
     * @return
     */
    //@Select("select * from sys_users")
    List<User> findAll();
}

编写mapper映射

在mappers文件夹下新建一个UserMapper.xml映射文件
image.png

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="edu.shifan.dao.UserDao">
  <!-- 查询所有用户信息列表 -->
  <select id="findAll" resultType="User">
    select * from sys_users
  </select>
</mapper>

编写service类

在service包下创建一个UserService的Java类

package edu.shifan.service;

import edu.shifan.dao.UserDao;
import edu.shifan.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {
    //以自动装配的方式实例化Dao对象
    @Autowired
    private UserDao userDao;

    /**
     * 查询所有用户信息列表
     */
    public List<User> findAll(){
        return  userDao.findAll();
    }

}

编写Controller

在controller包下新建一个UserController的Java类

package edu.shifan.controller;

import edu.shifan.pojo.User;
import edu.shifan.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

/**
 * 控制层
 */
@Controller
@RequestMapping("/user/")
public class UserController {
    //以自动装配方式实例化Service对象
    @Autowired
    private UserService userService;

    /**
     * 调用后查询所有数据
     */
    @RequestMapping("query")
    public ModelAndView query(){
        //调用Service对象的方法查询数据
        List<User> list = userService.findAll();

        //输出查询结果
        System.out.println(list);

        //ModelAndView将数据传递给前端页面
        ModelAndView mv = new ModelAndView("show");
        //将数据添加到作用域
        mv.addObject("data",list);

        return mv;
    }
}

编写视图

在pages目录下创建一个show.jsp的页面

<%--
  Created by IntelliJ IDEA.
  User: 19585
  Date: 2024/6/18
  Time: 10:47
  To change this template use File | Settings | File Templates.
  --%>
  <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>show.jsp页面</title>
      </head>
      <body>
        <h2>show</h2>
        <hr>
        ${data}
      </body>
    </html> 

访问

启动Tomcat并访问http://localhost:8080/Java_ssm_Web_exploded/user/query
image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/720611.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux-DNS域名解析服务01

BIND 域名服务基础 1、DNS&#xff08;Domain Name System&#xff09;系统的作用及类型 整个 Internet 大家庭中连接了数以亿计的服务器、个人主机&#xff0c;其中大部分的网站、邮件等服务器都使用了域名形式的地址&#xff0c;如 www.google.com、mail.163.com 等。很显然…

window下nginx命令报错 CreateFile() “xxx/logs/nginx.pid“ failed

参考文章&#xff1a; 《Windows下nginx报错解决&#xff1a;CreateFile() “xxx/logs/nginx.pid” failed 》 《Windows下Nginx的启动停止重启等命令操作过程》 解决过程 报错忘记截图了 错误详细信息&#xff1a;在nginx -s reload、nginx -s stop时出现 nginx: [error] C…

YOLOv8目标检测算法在地平线Bernoulli2架构BPU上高效部署参考(PTQ方案)30fps!

—— 以RDK X3为例&#xff0c;修改Head部分&#xff0c;8ms疾速Python后处理程序&#xff0c;30fps稳稳当当 本文在地平线对YOLOv8s的Backbone修改的基础上&#xff0c;提出一种在地平线Bernoulli2架构BPU上部署YOLOv8的后处理思路。使用640640分辨率&#xff0c;80类别基于C…

DSP——从入门到放弃系列2——PLL锁相环(持续更新)

1、概述 锁相环&#xff08;Phase Locked Loop,PLL&#xff09;是处理器的时钟源&#xff0c;控制着C6678处理器中C66x内核、各外围设备的时钟的时钟比、对准和选通功能。 2、功能描述 上图显示了PLL和PLL控制器的逻辑实现。PLL控制器提供通过软件可配置的分频器&#xff0…

关于glibc-all-in-one下载libc2.35以上报错问题

./download libc版本 下载2.35时报错&#xff1a;原因是缺少解压工具zstd sudo apt-get install zstd 下载后重新输命令就可以了 附加xclibc命令 xclibc -x ./pwn ./libc-版本 ldd pwn文件 xclibc -c libc版本

Git记录 上传至Gitee

1.GitHub拉去的代码需要上传至自己的Gitee需要清除原有remote服务器信息 查看原始远程服务器信息&#xff0c;后删除远程服务器信息 git remote -v git remote rm origin 2.Gitee新建软件仓库 法1&#xff09;不用初始化仓库&#xff0c;初始化会自动生成.git。如果本地.git…

【第18章】Vue实战篇之登录界面

文章目录 前言一、数据绑定1. 数据绑定2. 数据清空 二、表单校验1. 代码2. 展示 三、登录1.登录按钮2.user.js3. login 四、展示总结 前言 上一章完成用户注册&#xff0c;这一章主要做用户登录。 一、数据绑定 登录和注册使用相同的数据绑定 1. 数据绑定 <!-- 登录表单 -…

Postman接口测试之postman设置接口关联,实现参数化

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 postman设置接口关联 在实际的接口测试中&#xff0c;后一个接口经常需要用到前一个接口返回的结…

【C#上位机应用开发实战】—— UI界面设计与实践代码

在C#上位机应用开发中&#xff0c;UI界面设计是至关重要的一环。一个好的UI设计不仅可以提升应用的用户体验&#xff0c;还可以提高应用的易用性和效率。本文将介绍一些UI界面设计的实战经验和技巧。 在这个示例中&#xff0c;我们创建了一个名为MainForm的窗体类。该窗体包含了…

Table 布局的妙用 - 多行联动布局

1. 前言 最近产品需求遇到一个布局的问题&#xff0c; 大致是两列&#xff0c; 两行的关系&#xff0c; 左侧的文案区域的高度根据右侧内容的高度自动撑满&#xff0c; 左侧文案的宽度根据左侧单元格的最大宽度来适配&#xff0c; 大致如下&#xff1a; 我们通过一般用DIVCSS的…

短剧APP开发,探索短剧市场的新机遇

近几年&#xff0c;短剧市场得到了繁荣发展&#xff0c;随着短剧的快速发展&#xff0c;短剧APP也得到发展&#xff0c;受到了越来越多用户的喜欢。通过短剧APP&#xff0c;为大众带来多样、高质量的短剧内容。对于影视创作者来说&#xff0c;短剧APP在线观看系统的开发也将成为…

Tuple 元组

文章目录 一、什么是元组 &#xff1f;二、元组的具体操作2.1 创建元组2.1.1 tuple() 创建元组函数和 list() 创建列表函数总结 2.2 元组的元素访问操作2.3 元组的元素计数操作2.4 zip 对象 一、什么是元组 &#xff1f; 列表属于可变序列,可以任意修改列表中的元素。 元组的…

5G+北斗高精度定位终端技术,赋能千行百业应用

5G北斗高精度定位终端技术的融合&#xff0c;正以前所未有的精准度和实时性&#xff0c;为千行百业带来革命性的变革。从智慧城市的精细化管理&#xff0c;到智能交通的实时调度&#xff0c;再到精准农业的播种与收割&#xff0c;这一技术正不断拓宽其应用领域&#xff0c;为各…

【Linux】自定义shell(命令行解释器)

原理&#xff1a; shell是命令行解释器&#xff0c;当有命令需要执行时&#xff0c;shell创建子进程&#xff0c;让子进程执行命令&#xff0c;而shell只需等待子进程退出即可。 其中我们使用了下面这几个函数&#xff1a; 获取命令行&#xff08;fgets函数&#xff09;。解析…

C++ 66 之 类模版

#include <iostream> #include <string> using namespace std;// 习惯性 < >中 类模板用class 普通的函数模板就用typename // template<class NAMETYPE, class AGETYPE> template<class NAMETYPE, class AGETYPE int> // 可以设置默认的类型值…

Beyond Compare 文件对比工具下载2024最新版-Beyond Compare详细安装步骤

Beyond Compare是一款不可多得的专业级的文件夹和文件对比工具。使用它可以很方便地对比出两个文件夹或者文件的不同之处&#xff0c;相差的每一个字节用颜色加以表示&#xff0c;查看方便&#xff0c;支持多种规则对比。是程序工程师以及上班族必备的有效辅助工具 安 装 包 获…

并发编程理论基础——解决死锁【等待-通知机制优化循环等待】(五)

在破坏占用且等待条件时&#xff0c;如果使用while死循环 在并发量不大的情况下循环几十上百次也就好了如果while中执行方法时间比较长&#xff0c;或者并发量大时&#xff0c;可能要循环上万次才能获取到锁&#xff0c;非常消耗CPU 相较于使用while死循环&#xff0c;更好的方…

位图法-有效的数独

有效的数独&#xff0c;主要是判断每行每列每宫有无重复元素。 每行每列用二重循环&#xff0c;每宫比较复杂&#xff0c;需要考虑每一宫的坐标与二重循环ij对应关系 行i&#xff0c;每一宫3行&#xff0c;3列 x3*(i/3)j/3 y3*(i%3)j%3

超简洁的待办事项自托管便签todo

什么是todo todo 是一个自托管的 todo web 应用程序&#xff0c;可让您以简单且最少的方式跟踪您的 todo。 搭建 使用Docker命令行方式进行搭建 docker run -d -p 8000:8000 -v todo_db:/usr/local/go/src/todo/todo.db prologic/todo Docker-compose.yml version: 3 ​ se…

全球首个开源类Sora模型大升级,16秒720p画质电影感爆棚!代码和权重全面开源!

目录 01 视频界开源战士 02 深度解码技术 03 打破闭环&#xff0c;开源赋能 潞晨Open-Sora团队刚刚在720p高清文生视频质量和生成时长上实现了突破性进展&#xff01; 全新升级的Open-Sora不仅支持无缝生成任意风格的高质量短片&#xff0c;更令人惊喜的是&#xff0c;团队选…