SSM框架(SpringBoot快速构建)

news2024/11/18 22:32:40

简介

本文意在快速构建一个可以接受前端访问,并进行数据库查找,随后返回相关信息给前端的项目。

ssm为Spring Ioc+SpringMVC+MyBatis的缩写

Spring Ioc:管理对象的一个工厂。对象之间有依赖,相互引用
Spring MVC:开发代码模式
Mybatis:操作数据库,和数据库打交道

2015年以前都用xml进行整合,2015年之后通过注解方式(即Spring Boot方式)

第一步,新建项目

删除如下这些,这是maven命令行,一般用不到

 

第二步,修改配置

 

application.yml中主要用来配置

要启动Spring项目我们先需要连接数据库,因为我们选择了mysqlDriver继承了JDBC,启动时会自动连接,因此我们需要先在application.yml中配置连接数据库

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/ssmboot_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai

这里要填入你的数据库的username和password ,注意url中的ssmboot_db为我的数据库,把他替换成自己的就可以了

这时我们即可运行该项目

第三步,新建软件包

entity:实体类

controller:控制类,用来处理前端的访问

service:服务层,介于Dao层与controller层之间

mapper: 处理数据库,是Dao层,但是用了Mybatis叫mapper比较好

config:配置

utils:工具类

第四步,新建实体类

在entity包下新建User类

@Data//lombok会自动生成get、set方法
@Accessors(chain = true)//链式设值
public class User {
    private int id;
    private String name;
    @Value("55")//设置默认值
    private String password;
}

第五步,配置Mybatis连接数据库

 前言

Spring已经集成了Mybatis,只需在创建项目时选择Mybatis即可

第一步,建立对应

 UserMapper.java代码

package com.example.ssm_demo.mapper;

import com.example.ssm_demo.entity.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface UserMapper {
    public User selectUserByName(String name);

    void insertUser(@Param("user") User user);

    void insertUsers(@Param("users") List<User> users);

    void deleteUser(@Param("id") Integer id);

    void updateUser(@Param("user") User user);

    User selectUserById(@Param("id") Integer id);

    List<User> selectAllUsers();
}

UserMapper.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.example.ssm_demo.mapper.UserMapper">

    <resultMap id="baseResultMap" type="com.example.ssm_demo.entity.User">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="password" property="password"/>
    </resultMap>

    <insert id="insertUser">
        insert into `user` (name, password) values (#{user.name}, #{user.password})
    </insert>

    <insert id="insertUsers">
        insert into `user` (name, password) values
        <foreach collection="users" item="u" close="" open="" separator=",">
            (#{u.name}, #{u.password})
        </foreach>
    </insert>

    <delete id="deleteUser">
        delete from `user` where id = #{id}
    </delete>

    <update id="updateUser">
        update `user` set name = #{user.name}, password = #{user.password} where id = #{user.id}
    </update>

    <select id="selectUserById" resultMap="baseResultMap">
        select * from `user` where id = #{id}
    </select>

    <select id="selectAllUsers" resultMap="baseResultMap">
        select * from `user`
    </select>

</mapper>

第二步,配置路径

在application.yml中配置路径

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/ssmboot_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai

mybatis:
  mapper-locations: classpath:mapper/*.xml

第三步,在SsmDemoApplication中配置

@MapperScan("com.example.ssm_demo.mapper")

确保程序能找到mapper文件

其中的 值右键复制包的路径

 第四步,在UserMapper.java中按下alt+insert生成测试类

在第一行加入@SpringBootTest

在测试类中写入userMapper,但此时其实编译器会自动根据mapperScaner进行查找

@SpringBootTest
class UserMapperTest {

    @Autowired(required = false)
    UserMapper userMapper;

    @Test
    void selectUserByName() {
    }

    @Test
    void insertUser() {
        userMapper.insertUser(new User().setName("hell0").setPassword("123"));
    }

    @Test
    void insertUsers() {
        User user1 = new User().setName("aaa").setPassword("123");
        User user2 = new User().setName("bbb").setPassword("123");
        User user3 = new User().setName("ccc").setPassword("123");

        List<User> users = List.of(user1, user2, user3);
        userMapper.insertUsers(users);
    }

    @Test
    void deleteUser() {
        userMapper.deleteUser(1);
    }

    @Test
    void updateUser() {
        User user = new User().setId(2).setName("shi").setPassword("xiao");
        userMapper.updateUser(user);
    }

    @Test
    void selectUserById() {
        User user = userMapper.selectUserById(2);
        System.out.println(user);
    }

    @Test
    void selectAllUsers() {
        List<User> users = userMapper.selectAllUsers();

        users.forEach(System.out::println);
    }
}

第六步,在service包下新建UserService和UserServiceImpl

UserService

public interface UserService {

    void addUser( User user);

    void addUsers( List<User> users);

    void removeUserById( Integer id);

    void updateUserById( User user);

    User getUserById( Integer id);

    List<User> getAllUsers();
}

UserServiceImpl 

@Service
//@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) //会生成不一样的对象,默认是一样的
public class UserServiceImpl implements UserService{
    @Autowired(required = false)//自动注入 根据类型注入
//    @Resource //先根据名称注入,后根据类型
    private UserMapper userMapper;

    @Override
    public void addUser(User user) {
        userMapper.insertUser(user);
    }

    @Override
    public void addUsers(List<User> users) {
        userMapper.insertUsers(users);
    }

    @Override
    public void removeUserById(Integer id) {
        userMapper.deleteUser(id);
    }

    @Override
    public void updateUserById(User user) {
        userMapper.updateUser(user);
    }

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

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

第七步,在Controller包下新建UserController类

//@Controller
@RestController //等于 @Controller和 @ResponseBody
@RequestMapping("/user")
public class UserController {
    //可以设置请求方式
//    @RequestMapping(value = "/addUser", method = RequestMethod.GET)
    @Autowired
    UserService userService;

    @PostMapping("/")
    public Object addUser(@RequestBody User user) {
        System.out.println("add");
        System.out.println(user);

        userService.addUser(user);

        Map<String, Object> rs = new HashMap<>();
        rs.put("success", true);
        return rs;
    }

    @DeleteMapping("/{id}")
    public Object delUser(@PathVariable("id") Integer userId) {
        System.out.println("del");
        System.out.println(userId);

        userService.removeUserById(userId);

        Map<String, Object> rs = new HashMap<>();
        rs.put("success", true);
        return rs;
    }

    @PutMapping("/")
    public Object updateUser(@RequestBody User user) {
        System.out.println("update");

        userService.updateUserById(user);

        Map<String, Object> rs = new HashMap<>();
        rs.put("success", true);
        return rs;
    }

    @GetMapping("/{id}")
    public Object getUser(@PathVariable("id") Integer userId) {
        System.out.println("getOneUser");
        System.out.println(userId);

        User user = userService.getUserById(userId);

        Map<String, Object> rs = new HashMap<>();
        rs.put("success", true);
        rs.put("data", user);
        return rs;
    }

    @GetMapping("/")
    public Object getUsers() {
        System.out.println("getAllUsers");

        List<User> allUsers = userService.getAllUsers();

        Map<String, Object> rs = new HashMap<>();
        rs.put("success", true);
        rs.put("data", allUsers);
        return rs;
    }
}

此时大功告成,启动项目即可,我们的项目结构长成这样

利用postman进行测试,结果成功

 其中用到了很多IOC注释,我们在这有必要解释一下

SpringMvc注解

读者可以发现,我们对请求类型进行了分类

 

 

 

 

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

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

相关文章

搭建网站使用轻量云服务器怎么样?

​  搭建网站实际上可以从轻量云服务器租用中受益匪浅。如果您正在为个人网站寻找更多的低成本和轻运维&#xff0c;您可以考虑将轻量云服务器作为一个可行的选择。它提供独享资源、独立的IP地址、专属防火墙以及比传统虚拟主机更好的安全性能。本文将介绍轻量云服务器对建站…

OBCP题目及解析

1.关于OCP中的新建告警项&#xff0c;告警项的所属范围包括________&#xff1f;&#xff08;正确答案个数&#xff1a;2个&#xff09; A. OB告警 B. 操作系统告警 C. 应用告警 D. 服务器硬件告警 E. OBProxy告警 【答案】AC 【解析】如下图所示&#xff1a; 2.如果Oce…

大疆无人机 MobileSDK(遥控器/手机端)开发 v4版<1>

大疆无人机飞控开发 大疆无人机SDK开发包功能概述飞行控制相机实时视频流传感器数据下载媒体文件遥控器&#xff0c;电池和无线链路连接应用程序和产品 v4版sdk 二次开发注册成为DJI开发者生成 App KeyAndroid 示例代码配置Android Studio项目集成创建一个新的应用配置Gradle 脚…

使用Gradle7.6+SpringBoot 3.0+java17创建微服务项目

系列文章目录 学习新版本&#xff0c;菜鸟一枚 会持续更新的 文章目录 系列文章目录前言一、搭建项目1.1、创建git仓库1.1.1、登录gitee&#xff0c;新建仓库1.1.2、得到如下命令&#xff08;新建仓库使用创建git仓库 即可&#xff09; 1.2、使用IDEA创建项目1.2.1、开发工具1.…

Servlet基础(创建、运行原理、API)

目录 一、创建 Servlet 项目 1、创建项目 2、引入依赖 3、创建目录 4、编写代码 5、使用 Tomact 直接运行 &#xff08;打包程序、部署程序、验证程序&#xff09; 二、Servlet 运行原理 1、接收请求 2、根据请求计算响应 3、返回响应 三、Servlet API 1、HttpServl…

惩治标题党,vue2监听父组件传过来的值,el-tree一键全选多个树形

vue2监听父组件传过来的值 父组件使用的动态组件&#xff0c;然后父传子 <component :is"checkedIt" :riskQuarterriskQuarter :riskYearriskYear></component> 子组件打印 console.log(riskQuarter :>> , this.$props.riskQuarter); 监听 pr…

BOM概述

目录 什么是BOM 浏览器对象模型&#xff08;Browser Object Model (BOM)&#xff09; Window对象 一些常用方法 JavaScript Window Screen Window Screen Window Screen 高度 Window Screen 可用宽度 Window Screen 可用高度 Window Screen 色深 Window Screen 像素深…

【AI实战】训练一个自己的ChatGPT

【AI实战】训练一个自己的ChatGPT 准备环境代码模型 数据集Belle下载 Belle 的开源中文数据集&#xff08;仅限研究使用&#xff0c;禁止商用&#xff01;&#xff09;清洗自己的数据集上述工作完成后&#xff0c;大概是这样子的 训练测试参考 本文使用 Alpaca-LoRA 来训练一个…

Linux_top命令

top命令是Linux系统下常用的性能分析工具&#xff0c;能够实时显示系统中各个进程的资源占用状况&#xff0c;类似于Windows的任务管理器。它是一个动态显示过程,执行该命令后,它展示的信息会将独占前台,直到用户终止该程序为止&#xff08;可以用Ctrl C终止&#xff09;。 t…

汇编仿真 — 比较大小

项目文件 文件 关于项目的内容知识点可以见专栏单片机原理及应用 的第三章 汇编 题目&#xff1a;编程实现如下功能:比较片内 RAM的30H和40H单元中两个无符号数的大小&#xff0c;并将大数存入50H&#xff0c;小数存入51H&#xff0c;若两数相等&#xff0c;则使位单元7FH置1…

内网:域内信息收集

一&#xff0c;判断是否有域 ipconfig /all systeminfo workgroup net config workstation net time /domain&#xff08;该命令有三种情况&#xff09; 1&#xff0c;存在域&#xff0c;当前用户不是域用户。 2&#xff0c;存在域&#xff0c;当前用户是域用户。 3&#xff0c…

使用dataFEED OPC Suite将西门子PLC数据转发至REST API

一 背景 在工业4.0或工业物联网的项目方案中&#xff0c;逐渐紧密融合的OT&IT技术给工业制造带来了新活力。与此同时&#xff0c;利用IT级别的协议和应用来对制造数据进行收集和分析也成为了指导工业生产和优化流程的重要力量&#xff0c;尤其是基于HTTP的轻量级协议REST …

Python---学生管理系统、hashlib模块

1. 学生管理系统 学生管理系统的数据结构设置: 一个学生信息对应一个字典 整个系统的所有学生&#xff1a;所有学生对应一个列表&#xff0c;列表中的元素全是字典 整个系统&#xff1a;一个字典, 字典中有一个key(all_student) 对应的值是所有学生; 这个字典需要做数据持久化…

从传统Java应用到现代微服务,SpringBoot入门的基础指南

目录 一. 创建SpringBoot项目1.1 使用Spring Initializr快速构建项目1.2 手动创建springboot项目 二. SpringBoot入门案例解析2.1 依赖管理特性2.2 starter场景启动器2.3 引导类自动配置 三. REST风格四. 配置文件4.1 配置文件类型4.2 YAML文件的简介与使用4.3 Value与Configur…

VSCode 开发flutter 实现安卓设备远程调试

1&#xff0c;首先安装 ADB Commanads for VSCode扩展 并且必须确保ADB已经添加到系统环境变量中 如未添加请按照下面的方式添加&#xff0c;如添加请直接跳到下面。 2&#xff0c;添加环境变量&#xff08;windows可参考&#xff0c;mac忽略此项&#xff09; 我将ADB安装到这…

3分钟快速实现mysql全量增量备份

需求说明&#xff1a; mysql数据库ip地址为192.168.1.100&#xff0c;端口3306&#xff0c;root密码111111&#xff0c; 服务器cantos7中ip地址192.168.1.101 利用xtrabackup每周六进行全量备份&#xff0c;每天进行增量备份&#xff0c;保留2个礼拜的备份&#xff0c;并且保存…

睡眠经济2.0时代来了,老巨头们有护城河吗?

在第23个世界睡眠日&#xff0c;中国睡眠研究会等机构发布了《中国睡眠研究报告2023》&#xff0c;近半数人每晚平均睡眠时长不足8小时&#xff0c;“失眠”已成为了当代人的生活常态。 越是睡不好&#xff0c;越要想办法。年轻人纷纷求助于好的寝具、好的助眠产品乃至保健品&…

【C语言进阶C++】 C++基础--让你丝滑的从C语言进阶到C++

目录 前言 正文 1. 面向过程、面向对象 面向过程思维 面向对象思维 面向过程语言优缺点 面向对象语言优缺点 C面向对象特点 2. 输入、输出 C中的输入输出 总结C和C输入输出 3. 命名空间 作用域 命名空间 4. 动态申请空间 C动态申请空间&#xff08;new、delete&…

Leetcode刷题之回文链表和交换链表中的结点

竭力履行你的义务&#xff0c;你应该就会知道&#xff0c;你到底有多大的价值。 --列夫.托尔斯泰 目录 &#x1fab4;一.回文链表 &#x1f33b;1.快慢指针 &#x1f341;2.把值存入数组中&#xff0c;然后使用双指针 &#x1f33c;二.交换链表中的结点 &#x1…

经典论文解读 — 端到端的VL预训练网络SOHO

来源&#xff1a;投稿 作者&#xff1a;摩卡 编辑&#xff1a;学姐 论文标题&#xff1a; Seeing Out of tHe bOx :End-to-End Pre-training for Visual-Language Representation Learning》 Motivation 本文针对目前大量Visual-Language(VL) tasks使用由Faster-RCNN提取出的…