七、SSM 框架整合

news2024/10/5 19:20:27

       目前已经学习了 MyBatis 框架,Spring 框架,以及Spring MVC 框架。现阶段学习将这三个框架整合到一起,实现简单的前后端交互的曾删改差功能页面。

       Mybatis 框架主要负责数据库的操作问题,以及数据回显。该框架将 SQL 与 Java 代码拆分开,降低耦合度的同时使代码可视程度更高,方便后期的 SQL 维护。

       Spring 框架主要负责解决在企业级开发时业务逻辑层与其他层之间有大量耦合现象。将 Java 对象的创建和管理交给 Spring IOC 容器处理,减少了很多的对象重复创建,主要理念就是:谁用这个对象就由谁来创建!而不是事前创建完成再去调用!

       Spring MVC 框架负责V-C交互的问题,即V(View:视图)和C(Controller:控制器)之间的交互问题,具体表现在:用户可以通过视图将请求数据提交给服务器端的控制器,而控制器可以接收到相关数据后进行处理,最终,给予客户端某个视图,使得客户端得到响应结果。

注:其实这些框架的出现就是为了实现一件事,代码解耦,优化程序!将原本写在一起的代码查分开来,各司其职,各自优化,使程序的开发过程更加简单,后续优化或者改动更加便捷,程序更加高效。


文章目录

  • 一、环境准备
  • 二、编辑 Dao 层(以及 MyBatis 相关配置)代码
  • 三、编辑 Service 层接口和实现类逻辑代码
  • 四、编辑 Spring 相关配置


一、环境准备


  • IDEA、MySql、Tomcat、Maven



  • 数据库准备

    • 创建数据库

      CREATE DATABASE `ssmbuild`;
      
    • 在 ssmbuild 库中创建相关的表并导入数据

      -- 指定ssmbuild 库
      USE `ssmbuild`;
      
      DROP TABLE IF EXISTS `books`;
      
      CREATE TABLE `books` (
      `bookID` INT(10) NOT NULL AUTO_INCREMENT COMMENT '书id',
      `bookName` VARCHAR(100) NOT NULL COMMENT '书名',
      `bookCounts` INT(11) NOT NULL COMMENT '数量',
      `detail` VARCHAR(200) NOT NULL COMMENT '描述',
      KEY `bookID` (`bookID`)
      ) ENGINE=INNODB DEFAULT CHARSET=utf8
      
      INSERT  INTO `books`(`bookID`,`bookName`,`bookCounts`,`detail`)VALUES
      (1,'Java',1,'从入门到放弃'),
      (2,'MySQL',10,'从删库到跑路'),
      (3,'Linux',5,'从进门到进牢');
      

  • 项目准备

    • 创建基本的 maven 项目,并在 pom.xml 中导入相关依赖和姿态资源配置

      • 依赖准备

            <dependencies>
                <!--Junit-->
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>4.12</version>
                </dependency>
                <!--数据库驱动-->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.47</version>
                </dependency>
                <!-- 数据库连接池:c3p0 -->
                <dependency>
                    <groupId>com.mchange</groupId>
                    <artifactId>c3p0</artifactId>
                    <version>0.9.5.2</version>
                </dependency>
        
                <!--Servlet - JSP -->
                <dependency>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                    <version>2.5</version>
                </dependency>
                <dependency>
                    <groupId>javax.servlet.jsp</groupId>
                    <artifactId>jsp-api</artifactId>
                    <version>2.2</version>
                </dependency>
                <dependency>
                    <groupId>javax.servlet</groupId>
                    <artifactId>jstl</artifactId>
                    <version>1.2</version>
                </dependency>
        
                <!--Mybatis-->
                <dependency>
                    <groupId>org.mybatis</groupId>
                    <artifactId>mybatis</artifactId>
                    <version>3.5.2</version>
                </dependency>
                
                <!-- Mybatis整合Spring-->
                <dependency>
                    <groupId>org.mybatis</groupId>
                    <artifactId>mybatis-spring</artifactId>
                    <version>2.0.2</version>
                </dependency>
        
                <!--Spring-->
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-webmvc</artifactId>
                    <version>5.1.9.RELEASE</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-jdbc</artifactId>
                    <version>5.1.9.RELEASE</version>
                </dependency>
        
                <!-- Lombok工具 -->
                <dependency>
                    <groupId>org.projectlombok</groupId>
                    <artifactId>lombok</artifactId>
                    <version>1.18.12</version>
                    <scope>provided</scope>
                </dependency>
            </dependencies>
        
      • 静态资源配置

        <!-- 配置静态资源,避免找不到相关的文件 -->
            <build>
                <resources>
                    <resource>
                        <directory>src/main/java</directory>
                        <includes>
                            <include>**/*.properties</include>
                            <include>**/*.xml</include>
                        </includes>
                        <filtering>false</filtering>
                    </resource>
                    <resource>
                        <directory>src/main/resources</directory>
                        <includes>
                            <include>**/*.properties</include>
                            <include>**/*.xml</include>
                        </includes>
                        <filtering>false</filtering>
                    </resource>
                </resources>
            </build>
        
    • 在 Java 资源目录下创建之后需要的包
      在这里插入图片描述




二、编辑 Dao 层(以及 MyBatis 相关配置)代码


  • 在 pojo 包下创建 Books 表的实体类

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class Books {
    
        private int bookID;
        private String bookName;
        private int bookCounts;
        private String detail;
    }
    
  • 创建 Mapper 接口,以及与接口对应的 xml

    public interface BooksMapper {
    
        // 查询全部书籍信息
        List<Books> queryBooksAll();
    
        // 根据书籍ID查询
        List<Books> queryBooksId(@Param("bookID") int id);
    
        // 新增书籍
        int saveBooks(Books books);
    
        // 修改书籍信息
        int updateBooks(Books books);
    
        // 删除书籍
        int deleteBooks(Books books);
    }
    
  • 接口对应的 xml-BooksMapper.xml

    <?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.sys.mapper.BooksMapper">
    
        <select id="queryBooksAll" resultType="com.sys.pojo.Books">
            select * from books
        </select>
    
        <select id="queryBooksId" resultType="com.sys.pojo.Books">
            select * from books where 1=1
            <if test="bookID != null">
                and bookID = #{bookID}
            </if>
        </select>
    
        <insert id="saveBooks" parameterType="com.sys.pojo.Books">
            insert into books (bookName, bookCounts, detail)
            values (#{bookName}, #{bookCounts}, #{detail})
        </insert>
    
        <update id="updateBooks" parameterType="com.sys.pojo.Books">
            update books set bookCounts = #{bookCounts} where 1=1
            <if test="bookID != null">
                and bookID = #{bookID}
            </if>
        </update>
    
        <delete id="deleteBooks" parameterType="com.sys.pojo.Books">
            delete from books where 1=1
            <if test="booksID != null">
                and booksID = #{booksID}
            </if>
        </delete>
    
    </mapper>
    
  • 在resources 资源目录下创建资源配置文件

    • 创建 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>
      
          <!-- 数据源不再由 MyBatis 负责,交给 Spring 来做  -->
      
          <!-- 配置实体 -->
          <typeAliases>
              <package name="com.sys.pojo"/>
          </typeAliases>
      
          <!-- 配置mapper接口 -->
          <mappers>
              <mapper class="com.sys.mapper.BooksMapper"/>
          </mappers>
      </configuration>
      
    • 创建数据源配置文件:database.properties

      jdbc.driver=com.mysql.jdbc.Driver
      jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=true&useUnicode=true&characterEncoding=utf8
      jdbc.username=root
      jdbc.password=root
      




三、编辑 Service 层接口和实现类逻辑代码


  • 在 service 包下创建接口

    public interface BooksService {
    
    
        // 查询全部书籍信息
        List<Books> queryBooksAll();
        
        // 根据ID查询
        List<Books> queryBooksId();
    
        // 新增书籍
        int saveBooks(Books books);
    
        // 修改书籍信息
        int updateBooks(Books books);
    
        // 删除书籍
        int deleteBooks(Books books);
        
    }
    
    • 创建对应的实现类

      @Service
      public class BooksServiceImpl implements BooksService {
      
          // 依赖注入,通过该 bean 调用其中的方法
          @Autowired
          BooksMapper bokksMapper;
      
          public List<Books> queryBooksAll() {
              List<Books> list = bokksMapper.queryBooksAll();
              return list;
          }
      
          public List<Books> queryBooksId() {
              List<Books> list = bokksMapper.queryBooksId(1);
              return list;
          }
      
          public int saveBooks(Books books) {
              Books book = new Books();
              book.setBookName("Java 八股文,背!");
              book.setBookCounts(5);
              book.setDetail("从Java基础到框架的知识点,面试需要背");
              return bokksMapper.saveBooks(book);
          }
      
          public int updateBooks(Books books) {
              Books book = new Books();
              book.setBookID(1);
              book.setBookCounts(4);
              return bokksMapper.updateBooks(books);
          }
      
          public int deleteBooks(Books books) {
              Books book = new Books();
              book.setBookID(3);
              return bokksMapper.deleteBooks(books);
          }
      }
      




四、编辑 Spring 相关配置


  • Spring 整合 Mybatis ,配置数据源,将数据源以 bean 的形式进行管理,创建 Spring-dao.xml


	- 创建 Spring 配置文件:applicationContext.xml

		```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">
		
		</beans>
		```

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Browserslist 信息和配置使用整理

我们可以在各种前端工程看到 Browserslist 的配置身影&#xff0c;看似简单但实际上可能会有暗坑导致线上兼容问题&#xff0c;借此文来整理下 Browserslist 的信息。 Browserslist 是由 Autoprefixer 团队维护的一个开源项目&#xff0c;用于自动处理 CSS 和 JavaScript 文件…

opencv识别一张图片的多个红框,并截取红框的内容

需求 需要获取图片的红框的内容&#xff0c;实体的图片我就不放了 获取红框 先截取获得图片的多个轮廓 import cv2 import numpy as np # 加载图像并转换为灰度图像 image cv2.imread(image6.jpg) gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 应用高斯模糊以减…

基本的 Linux 命令以及 Linux 目录结构

目录 什么是Linux&#xff1f; ls - 列出文件和目录 pwd - 显示当前工作目录 cd - 切换目录 mkdir - 创建目录 touch - 创建空文件 rm - 删除文件和目录 cp - 复制文件和目录 mv - 移动和重命名文件和目录 文件系统基础 Linux 操作系统是开源且强大的操作系统&…

流媒体之推流和拉流

推流&#xff1a;将直播内容推送至服务器的过程 拉流&#xff1a;为服务器已有直播内容&#xff0c;用指定地址进行拉取的过程 什么是推流&#xff1f; 推流&#xff0c;指的是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号传到网络的过程。“推流”…

D. Sorting By Multiplication(贪心)

Problem - D - Codeforces 给定一个长度为n的数组a&#xff0c;由正整数组成。 您可以对该数组执行以下操作任意次数&#xff08;可能为零&#xff09;&#xff1a; 选择三个整数l、r和x&#xff0c;使得1≤l≤r≤n&#xff0c;并将满足l≤i≤r的每个ai乘以x。 请注意&#…

操作系统内存(32位为例)

0、OS能使用最大的虚拟内存和物理内存 最大的虚拟内存与寻址总线有关。一般是40根&#xff0c;对应256T 最大的物理内存与PTE的位数有关。 10-10-12分页模式下是32位&#xff0c;所以最大寻址空间就4G 1、CPU分页模式 分类 还有5-level&#xff0c;一般适用于大型服务器。…

【Springcloud】Seata分布式事务

【Springcloud】Seata分布式事务 【一】基本介绍&#xff08;1&#xff09;什么是分布式事务&#xff08;2&#xff09;为什么要使用分布式事务&#xff08;3&#xff09;seata分布式事务 【二】下载方式【1】Windows平台安装包下载 【三】如何使用【1】创建相关测试数据库和表…

每日刷题-1

目录 一、选择题 二、编程题 1、组队竞赛 2、删除公共字符 一、选择题 1、 解析&#xff1a;%s遇到\0会停止&#xff0c;%m.ns中m表示字符串宽度&#xff0c;n表示左起取目标字符串n个字符&#xff0c;右对齐&#xff0c;&#xff08;如果想要左对齐&#xff0c;可以写成%-m.n…

【C++学习笔记】5、变量作用域

文章目录 【 1、局部变量 】【 2、全局变量 】【 3、局部变量和全局变量的初始化 】 作用域是程序的一个区域&#xff0c;一般来说有三个地方可以定义变量&#xff1a; 在函数或一个代码块内部声明的变量&#xff0c;称为局部变量。 在函数参数的定义中声明的变量&#xff0c;称…

【LeetCode】剑指 Offer <二刷>(2)

目录 题目&#xff1a;剑指 Offer 04. 二维数组中的查找 - 力扣&#xff08;LeetCode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目&#xff1a;剑指 Offer 05. 替换空格 - 力扣&#xff0…

【ROS 05】ROS常用组件

在ROS中内置一些比较实用的工具&#xff0c;通过这些工具可以方便快捷的实现某个功能或调试程序&#xff0c;从而提高开发效率&#xff0c;本章主要介绍ROS中内置的如下组件: TF坐标变换&#xff0c;实现不同类型的坐标系之间的转换&#xff1b;rosbag 用于录制ROS节点的执行过…

基于springboot实现了后台定时统计数据报表并将数据生成excel文件作为附件,然后通过邮件发送通知的功能

概述 本例子基于springboot实现了后台定时统计数据报表并将数据生成excel文件作为附件&#xff0c;然后通过邮件发送通知的功能。 详细 一、准备工作 1、首先注册两个邮箱&#xff0c;一个发送邮箱&#xff0c;一个接收邮箱。 2、发送邮箱开启IMAP/SMTP/POP3服务&#xff0c…

服务器间 ssh 免密登录

1、在所有服务器生产密钥文件 ssh-keygen -t rsa一直空格就可以 2、查看所有节点的公钥文件 cat /home/bigdata/.ssh/id_rsa.pub3、将所有节点的公钥文件写入到authorized_keys文件中 4、将authorized_keys文件分发给其他节点并修改权限 #注意查看authorized_keys文件的权…

131.【MySQL_基础篇】

MySQL_基础篇 (一)、MySQL 介绍1.MySQL三大阶段(1).基础篇(2).进阶篇(3).运维篇 2.MySQL 概念3.数据模型(1).关系型数据库(RDBMS) 4.数据库三大范式 (二)、SQL 编程语言1.SQL通用语法2.SQL 四大分类3.DDL (数据定义语言)(1).数据库操作 ->(增删改查)(2).表操作 -> (增删改…

整数拆分【动态规划】

整数拆分 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 class Solution {public int integerBreak(int n) {int[] dp new int[n 1];//正整数&#x…

day 48|● 583. 两个字符串的删除操作 ● 72. 编辑距离

583. 两个字符串的删除操作 dp的含义&#xff1a;指0开头&#xff0c;i- 1和j - 1为结尾的两个序列的删除最小数 递推公式方面&#xff1a; 初始化方面&#xff1a;前面0行和0列的初值要赋好 func minDistance(word1 string, word2 string) int {dp : make([][]int, len(wor…

工具教程【甜心转译】-双语字幕、中文语音生成,打破信息差

甜心转译是一款AI加持的音/视频生成双语字幕、中文语音的软件。帮助人们更容易的获取外语信息、不管是学习、还是娱乐&#xff0c;快人一步。 主要功能 字幕生成&#xff1a;只需几个简单的步骤&#xff0c;轻松生成字幕。字幕翻译&#xff1a;只需一键&#xff0c;就可以将字…

JavaScript代码中字符串如何换行?

在工作中&#xff0c;代码提交之前可能会有一些语法检查的限制&#xff0c;限制我们的单行代码长度。 对于一些逻辑代码&#xff0c;有多种换行方式。这里主要记录一下对于字符串过长情况的处理方式。 对于字符串&#xff0c;除了使用 进行字符串拼接之外&#xff0c;也可以…

算法通关村第12关【青铜】| 字符串转换问题

1.转换成小写字母 思路&#xff1a;ASCll码中&#xff0c;a-z&#xff1a;97-122 A-Z&#xff1a;65-90 小写转大写-32&#xff0c;大写转小写32 class Solution {public String toLowerCase(String s) {int len s.length();StringBuilder str new StringBuilder();for(int…

windos设置环境变量--java环境变量

1.右键此电脑---属性 2.点高级系统设置 3.点环境变量 4.点新建--自定义变量名 5.找到安装路径&#xff0c;并且找到bin目录下的启动程序 验证&#xff1a;winR 输入cmd