一看就懂 —— Spring boot + Spring MVC + MyBatis 基础框架demo

news2025/1/11 8:13:19

目录

前言

一、项目依赖

二、配置文件

三、创建数据库和实体类

3.1、创建数据库

3.2、创建实体类

四、构建 Mapper 层代码实现(接口 + XML)

4.1、创建接口

4.2、创建 XML

4.3、XML 文件与接口的对应关系

五、实现服务层

六、实现控制器

小结


前言


通过这篇文章,带大家通透ssm基础框架的搭建,实现一个简单的id查询用户数据的程序。

 

一、项目依赖


	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.3.0</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>com.mysql</groupId>
			<artifactId>mysql-connector-j</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>

二、配置文件


在创建完 SSM 项目后,添加了 Mybatis + MySQL 后,启动项目,一定会报错,这是正常现象,因为我们还需要在配置文件中添加一些必要信息。

在 application.properties 配置文件中(或者是 yml 格式的配置文件)需要完成以下两个信息:

  • 配置数据库连接信息。
  • 配置 Mybatis 中 xml 保存路径(规则:通过 XML 实现表操作方法的接口)。

代码如下:

# 配置数据库连接
spring.datasource.url=jdbc:mysql://localhost:3306/mycnblog?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=1111
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# mybatis xml 保存
mybatis.mapper-locations=classpath:mybatis/*Mapper.xml

三、创建数据库和实体类


3.1、创建数据库

创建一个user_message的一个数据库和一个user表,用来存放用户信息,如下代码:

drop database if exists user_message;
create database user_message;
use user_message;

-- 创建用户表
create table user(
    id int primary key auto_increment,
    name varchar(20),
    age int
);

-- 栗子
insert into user values(null, "zhangsan", 18);
insert into user values(null, "lisi", 19);
insert into user values(null, "wangwu", 20);

3.2、创建实体类

一个表对应一个实体类,想要使其建立映射关系,需要要满足以下两点:

  • 具有 getter 和 setter 方法;
  • 属性名必须与sql字段名一致;

如下代码:

import lombok.Data;

@Data
public class user {

    private int id;
    private String name;
    private int age;

}

四、构建 Mapper 层代码实现(接口 + XML)


MyBatis 是⼀款优秀的持久层框架,它⽀持⾃定义 SQL、存储过程以及⾼级映射,除了⼏ 乎所有的 JDBC 代码以及设置参数和获取结果集的⼯作,如此厉害的框架我们该如何建立后端与数据库的联系呢?往下看~

MyBatis 需要通过如下两个部分建立后端和数据库的联系:

  • 接口(给程序其他类调用的,实现了表的所有操作方法)。
  • XML 实现接口(用来写具体的 SQL 语句)。

接下来就看看具体的代码是如何实现的吧~

4.1、创建接口

创建一个 UserMapper 的接口,接口下的每一个方法就对应一个对表的操作,这里实现的是根据 id 查询用户信息,如下代码:

import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

// @Mapper 注解和五大类注解一样,都会随着 Spring 的启动而注入到容器中
@Mapper
public interface UserMapper {

    //根据 id 来获取用户信息
    User getUserById(@Param("user_id") Integer id);

}

4.2、创建 XML

这里就需要对应接口,在resource目录下创建一个xml文件,编写sql语句。

注意:这里的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.demo.mapper.UserMapper">

    <select id="getUserById" resultType="com.example.demo.entity.User">
        select * from user where id = ${user_id}
    </select>

</mapper>

4.3、XML 文件与接口的对应关系

五、实现服务层


在服务层如何通过 id 获取到最终的实体类呢?Spring 还有个非常强大的地方就在于它可以注入接口,通过接口中的方法找到最后对应的实体类对象。

代码实现如下:

import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

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

}

六、实现控制器


这里直接于用户进行交互,通过用户传入 id 参数,响应对应的用户信息;

代码如下:

import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/getuserbyid")
    public User getUserById(Integer id) {
        if(id == null) return null;
        return userService.getUserById(id);
    }

}

最后执行结果如下:

 

小结


值得注意的是:

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

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

相关文章

原生JS实现拖拽排序

拖拽&#xff08;这两个字看了几遍已经不认识了&#xff09; 说到拖拽&#xff0c;应用场景不可谓不多。无论是打开电脑还是手机&#xff0c;第一眼望去的界面都是可拖拽的&#xff0c;靠拖拽实现APP或者应用的重新布局&#xff0c;或者拖拽文件进行操作文件。 先看效果图&am…

动态IP与静态ip的区别是什么

1、DHCP IP即动态ip&#xff0c;可以自动获取IP地址。静态ip上网又被称为固定IP地址上网&#xff0c;需要手动设置IP地址。2、在网速上&#xff0c;动态ip和静态ip没有区别。3、动态ip不是一个真实的IP地址&#xff0c;静态IP是可以直接上网的IP地址。静态ip和动态ip设置方法&a…

datahub部署

硬件要求DataHub官方要求的最低配置为&#xff1a;2 个 CPU、8GB RAM、2GB 交换区和 10GB 磁盘空间。本文的示例环境为阿里云centos8云服务器安装dockeryum -y install docker sudo systemctl start docker安装docker-composecurl -SL https://get.daocloud.io/docker/compose…

Python3-列表

Python3 列表 序列是 Python 中最基本的数据结构。 序列中的每个值都有对应的位置值&#xff0c;称之为索引&#xff0c;第一个索引是 0&#xff0c;第二个索引是 1&#xff0c;依此类推。 Python 有 6 个序列的内置类型&#xff0c;但最常见的是列表和元组。 列表都可以进…

VUE前端常问面试题

文章目录一、VUE前端常问面试题二、文档下载地址一、VUE前端常问面试题 1、MVC和MVVM 区别 MVC&#xff1a;MVC全名是 Model View Controller&#xff0c;即模型-视图-控制器的缩写&#xff0c;一种软件设计典范。 Model(模型)&#xff1a;是用于处理应用程序数据逻辑部分。通…

力扣-第二高的薪水

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道中等的力扣sql练习题。 文章目录前言一、题目&#xff1a;176. 第二高的薪水二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总结…

[chapter 11][NR Physical Layer][Layer Mapping]

前言&#xff1a;这里参考Curious Being系列 &#xff0c;简单介绍一下NR 5G 物理层核心技术层映射.我们主要讲了一下what is layer Mapping, why need layer Mapping, how layer Mapping 参考文档&#xff1a;3GPP 38.211- 6.3.1.3 Layer mapping《5G NR Physical Layer | Cha…

仓储调度|库存管理系统

技术&#xff1a;Java、JSP等摘要&#xff1a;随着电子商务技术和网络技术的快速发展&#xff0c;现代物流技术也在不断进步。物流技术是指与物流要素活动有关的所有专业技术的总称&#xff0c;包括各种操作方法、管理技能等&#xff0c;物流业采用某些现代信息技术方面的成功经…

智能客服vs人工客服,两者真水火不容?

随着互联网、智能技术的不断发展&#xff0c;Chatgpt的到来引发各界热议&#xff0c;不少人认为Chatgpt将给各个领域带来翻天覆地的变化。而在客服行业&#xff0c;AI产物——智能客服早已落地并且被广泛运用&#xff0c;在Chatgpt爆火的这段时间&#xff0c;有望率先融合应用C…

虚拟局域网VLAN的实现机制

虚拟局域网VLAN的实现机制1.IEEE 802.1Q帧2.交换的端口类型AccessTrunkHybrid&#xff08;华为特有&#xff09;1.IEEE 802.1Q帧 IEEE802.1Q帧&#xff08;也称Dot One Q帧&#xff09;对以太网的MAC帧格式进行了扩展&#xff0c;插入了4字节的VLAN标记。 2.交换的端口类型 A…

实验进行时

torch与cuda版本配对&#xff1a;Previous PyTorch Versions | PyTorch 删除虚拟环境&#xff1a;conda remove -n mygcn --all 时序KG 删掉1.7.1torch装1.8.0&#xff0c;解决报错RuntimeError: CUDA error: no kernel image is available for execution on the 已经成功运…

数组模拟常见数据结构

我们来学习一下用数组模拟常见的数据结构&#xff1a;单链表&#xff0c;双链表&#xff0c;栈&#xff0c;队列。用数组模拟这些常见的数据结构&#xff0c;需要我们对这些数据结构有一定的了解哈。单链表请参考&#xff1a;http://t.csdn.cn/SUv8F 用数组模拟实现比STL要快&a…

PCB板漏孔、漏槽怎么办?看工程师避坑“SOP”

本文为大家介绍PCB画板时常见的钻孔问题&#xff0c;避免后续踩同样的坑。钻孔分为三类&#xff0c;通孔、盲孔、埋孔。不管是哪种孔&#xff0c;孔缺失的问题带来的后果是直接导致整批产品不能使用。因此钻孔设计的正确性尤为重要。 案例讲解 问题1&#xff1a;Altium设计的文…

Linux 进程:进程状态

目录一、进程状态1.简单分类2.详细分类&#xff08;1&#xff09;运行态&#xff08;2&#xff09;休眠态[1]可中断休眠态[2]不可中断休眠态&#xff08;3&#xff09;停止状态&#xff08;4&#xff09;死亡状态&#xff08;5&#xff09;僵死状态二、特殊进程1.僵尸进程2.孤儿…

Java-枚举类的使用(详解)

枚举类的使用前言一、何为枚举类&#xff1f;二、自定义枚举类&#xff08;JDK1.5之前&#xff09;1、实现1.1 属性1.2 构造器2、代码演示三、用关键字enum定义枚举类&#xff08;JDK 1.5&#xff09;1、实现1.1 属性1.2 构造器2、代码演示四、Enum类的方法五、实现接口的枚举类…

GeoServer 存在 sql 注入漏洞

漏洞描述 GeoServer 是一个允许用户共享和编辑地理空间数据的开源软件服务器&#xff0c;支持 OGC Filter expression 和 OGC Common Query Language 语言&#xff0c;使用 PostGIS Datastore 作为数据库。PostGIS是PostgreSQL数据库的扩展程序&#xff0c;增加了数据库对地理…

HTMLCollection 和 NodeList 区别

Node 和 Element DOM 是一棵树&#xff0c;所有节点都是 NodeNode 是 Element 的基类Element 是其他 HTML 元素的基类&#xff0c;如 HTMLDivElement HTMLCollection 和 NodeList HTMLCollection 是 Element 的集合NodeList 是 Node 的集合 <body><p id"p1&qu…

什么是IP地址?

IP协议中还有一个非常重要的内容&#xff0c;那就是给因特网上的每台计算机和其它设备都规定了一种地址&#xff0c;叫做“IP 地址”。由于有这种地址&#xff0c;才保证了用户在连网的计算机上操作时&#xff0c;能够高效而且方便地从千千万万台计算机中选出自己所需的对象来。…

堆叠和集群(详细的理论和实验)

随着企业的发展&#xff0c;企业网络的规模越来越大&#xff0c;这对企业网络提出了更高的要求&#xff1a;更高的可靠性、更低的故障恢复时间、设备更加易于管理等。传统的园区网高可靠性技术出现故障时切换时间很难做到毫秒级别、实现可靠性的方案通常为一主一备&#xff0c;…

前端一面react面试题指南

React 事件机制 <div onClick{this.handleClick.bind(this)}>点我</div>React并不是将click事件绑定到了div的真实DOM上&#xff0c;而是在document处监听了所有的事件&#xff0c;当事件发生并且冒泡到document处的时候&#xff0c;React将事件内容封装并交由真正…