SSM框架(SpringBoot快速构建)

简介

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

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注解

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

 

 

 

 

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

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

相关文章

7万字省级智慧农业大数据平台项目规划建设方案

1.1 系统总体结构和逻辑结构 XX市智慧农业项目数据中心是全省数据处理加工和数据分析应用的中心&#xff0c;总体上需实现上连省农业厅、下连各级农业、外连市级部门&#xff1b;构建资源整合、互联互通、资源共享的全省统一的数据中心资源库&#xff1b;构建完善的底层支撑平…

放弃40k月薪的程序员工作,选择公务员,我来分享一下看法

我有一个朋友&#xff0c;拒绝了我为他提供的4万薪水的工作&#xff0c;去了一个体制内的银行&#xff0c;做程序员&#xff0c;即使薪水减半。他之前在北京一家大公司做程序员&#xff0c;一个月30k。当我开始创业时&#xff0c;我拉他来和我一起干&#xff0c;但那时我们太小…

windeployqt工具打包C++ QT项目

目录 前言方法TIP 前言 使用VS编写好QT项目后&#xff0c;有时需要发送给他人进行测试。在此情况下&#xff0c;发送所有项目文件显然不可取&#xff0c;因为exe文件不能独立运行&#xff0c;故在测试前需要先配置项目环境&#xff0c;以确保运行所需的库文件能够完全。 因此&…

Java枚举:为什么它是单例模式的最佳选择?

前言 单例模式&#xff0c;是工作中比较常见的一种设计模式&#xff0c;通常有两种实现方式&#xff0c;懒汉式和饿汉式。但是这两种实现方式存在一些问题。懒汉式需要在多线程环境下使用同步锁机制来保证只有一个实例被创建&#xff0c;这会影响程序的性能。而饿汉式在类加载时…

使用kubeadm搭建生产环境的多master节点k8s高可用集群

环境centos 7.9 目录 1.对安装 k8s 的节点进行初始化配置 2 通过 keepalivednginx 实现 k8s apiserver 节点高可用 3、kubeadm 初始化 k8s 集群 4.扩容 k8s 控制节点&#xff0c;把 xuegod62 加入到 k8s 集群 5、扩容 k8s 控制节点&#xff0c;把 xuegod64 加入到 k8s 集群…

使用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.…

代码随想录算法训练营day34 | 1005.K次取反后最大化的数组和 ,134. 加油站,135. 分发糖果

代码随想录算法训练营day34 | 1005.K次取反后最大化的数组和 &#xff0c;134. 加油站&#xff0c;135. 分发糖果 1005.K次取反后最大化的数组和解法一&#xff1a;两次正常排序解法二&#xff1a;一次排序 134. 加油站135. 分发糖果 1005.K次取反后最大化的数组和 教程视频&a…

JavaScript原型链污染学习记录

1.JS原型和继承机制 0> 原型及其搜索机制 NodeJS原型机制&#xff0c;比较官方的定义&#xff1a; 我们创建的每个函数都有一个 prototype&#xff08;原型&#xff09;属性&#xff0c;这个属性是一个指针&#xff0c;指向一个对象&#xff0c; 而这个对象的用途是包含可…

基于STL的演讲比赛管理系统

目录 一、比赛规则描述 二、比赛程序的功能 三、比赛的运行结果 四、程序的实现 1、程序实现的大致思路 2、程序的模块化 <1>选手信息的类 <2>管理比赛所有进度的接口头文件 <3>比赛进行的实现 <4>用户的交互界面<演讲比赛管理系统.cpp>…

DPDK抓包工具dpdk-dumpcap的使用

在进行网络开发中&#xff0c;我们经常会通过抓包来定位分析问题&#xff0c;在不使用DPDK的情况下&#xff0c;Linux系统通常用tcpdump&#xff0c;windows用wireshark&#xff0c;但是如果我们使用了DPDK来收包&#xff0c;就无法用这两个工具来抓包了。 这个时候我们需要用D…

Linux + 香橙派 + V4L2 + http 实现远程监控摄像头在网页端显示

项目场景&#xff1a; 项目需求&#xff0c;需要做一个基于边缘端的人脸识别远程监控摄像头并在网页前端展示 &#xff0c;这里采用国产香橙派作为边缘计算终端&#xff0c;安装ubuntu系统&#xff0c;系统中采用v4l2接口对摄像头进行获取&#xff0c;当客户端通过网页进行请求…

RSA--维纳攻击--代码和题目分析

文章目录 维纳攻击原理&#xff1a;维纳攻击脚本[羊城杯 2020]RRRRRRRSA 1题目描述&#xff1a;题目分析&#xff1a; 收获与体会&#xff1a; 维纳攻击原理&#xff1a; 两位大佬讲得非常清楚&#xff08;搬运工就是我&#xff09;&#xff1a;https://zhuanlan.zhihu.com/p/…

MyBatisPlus学习笔记(SpringBoot版)

MyBatisPlus学习笔记&#xff08;SpringBoot版&#xff09; 一、MyBatis-Plus简介1、简介2、特性3、支持数据库4、框架结构5、代码及文档地址 二、入门案例1、开发环境2、创建数据库及表2.1 创建表2.2 添加数据 3、创建Spring Boot工程3.1 初始化工程3.2 引入依赖3.3 idea中安装…

史上最烂 spring web 原理分析

盗引下篇spring web spring web、spring web 与 tomcat、映射器与适配器、参数解析器与类型转换器、返回值处理器与消息转换器、异常处理器、ControllerAdvice、spring web 工作流程。 版本 jdk&#xff1a;8spring&#xff1a;5.3.20spring boot&#xff1a;2.7.0 1 spring…

python调用海康sdk报错问题

sdk参考&#xff1a; (68条消息) Python调用海康威视网络相机_调用海康SDK_python 海康威视_有一点点麻瓜的博客-CSDN博客https://blog.csdn.net/yinweizhehd/article/details/118722052 报错1&#xff1a; 生成解决方案的时候&#xff0c;显示LNK2001&#xff1a;无法解析的…

如果你访问了某个网站,又不想让人知道怎么办?

问大家一个问题&#xff1a;如果你访问了某个网站&#xff0c;又不想让人知道怎么办&#xff1f; 你可能会说&#xff0c;把浏览器浏览历史记录清除&#xff0c;或者直接用无痕模式。 如果你只能想到这一层&#xff0c;那只能说图young&#xff01; 这么说吧&#xff0c;理论…

基于RK3588的8K智能摄像机方案设计

设计了一款基于石墨烯散热的8 K智能摄像头&#xff0c;主控采用瑞芯微RK3588&#xff0c;传感器采用索尼IMX435&#xff0c; 通过HDMI2.1将传感器采集到的图像发送到8 K显示器&#xff0c;实现端到端的8 K呈现&#xff0c;为了确保摄像头性能稳定&#xff0c;本 设计采用石墨烯…

计算机网络安全--期末

计算机网络安全绪论 计算机网络实体是什么 计算机网络中的关键设备&#xff0c;包括各类计算机、网络和通讯设备、存储数据的媒体、传输路线…等 典型的安全威胁有哪些 ★ ⋆ \bigstar\star ★⋆ 窃听(敏感信息被窃听)重传(被获取在传过来)伪造(伪造信息发送&#xff09;篡…

《花雕学AI》30:ChatGPT的资料来源比例排名前20名是什么?

引言&#xff1a;ChatGPT是一款由OpenAI开发的人工智能聊天机器人&#xff0c;它可以回答各种问题&#xff0c;并生成创意内容&#xff0c;如诗歌、故事、代码等。 ChatGPT的核心技术是基于GPT-3.5和GPT-4的大型语言模型&#xff0c;它可以利用从网路上收集的大量文本资料来进行…

MySQL执行顺序

MySQL执行顺序 MySQL语句的执行顺序也是在面试过程中经常问到的问题&#xff0c;并且熟悉执行顺序也有助于SQL语句的编写。 SELECT FROM JOIN ON WHERE GROUP BY HAVING ORDER BY LIMIT执行顺序如下&#xff1a; FROM ON JOIN WHERE GROUP BY # (开始使用别名) SUM # SUM等…