创建一个springboot项目,mybatis连接嵌入式数据库H2,实现增删改查功能

news/2025/10/9 20:18:30/文章来源:https://www.cnblogs.com/qinfenfeifei/p/19131898

@

目录
  • 目标
  • 创建一个spirngboot项目
    • 创建流程
    • 第一次运行项目,界面如下
  • mybatis连接数据库H2
    • 依赖:mybatis + h2
    • 配置文件
    • schema.sql
  • 实现对用户的增删改查
    • 创建entity
    • 创建mapper
    • 创建service
    • 创建controller
  • 搭配前端程序,修改controller
  • 总结

目标

  • 创建一个spirngboot项目。
  • 连接嵌入式数据库H2
  • 实现对用户的增删改查。

创建一个spirngboot项目

创建流程

  • 打开idea,选择File -> New -> Project,界面如下。

在这里插入图片描述

  • 选择Spring Boot 2.7.6,添加Spring Web,创建项目,界面如下。

在这里插入图片描述

第一次运行项目,界面如下

在这里插入图片描述

mybatis连接数据库H2

为了省去安装数据库的烦恼,这里采用使用嵌入式的数据库,进行数据保存,选择Spring支持的h2。下面是使用步骤。

依赖:mybatis + h2

<dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>2.1.214</version>
</dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.1</version>
</dependency>

配置文件

在resources目录下创建配置文件,文件名如下,并删除原有的配置文件。

application.yml

# 端口
server:port: 8090spring:datasource:url: jdbc:h2:file:D:/aaa/testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MySQLusername: sapassword:driver-class-name: org.h2.Driversql:init:mode: alwaysschema-locations: classpath:schema.sql# H2 控制台配置(开发环境启用)h2:console:enabled: truepath: /h2-consolemybatis:mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.xbdx.demo111.entity

schema.sql

在resources目录下创建schema.sql文件,项目启动时会自动检查运行。

schema.sql

CREATE TABLE IF NOT EXISTS users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),age INT
);

实现对用户的增删改查

创建entity

创建一个和数据库对应起来的User实体类。

entity.User

public class User {private String name;private Integer age;private Integer id;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}
}

创建mapper

创建mapper层的接口与xml,实现增删改查的功能。

mapper.UserMapper

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;@Mapper
public interface UserMapper {public void userCreate(User  user);@Select("select * from users")public List<User> userRead();public void userUpdate(User user);@Delete("delete from users where id = #{id}")public void userDelete(Integer id);}

mapper.UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xbdx.demo111.mapper.UserMapper"><!-- 新增用户 --><insert id="userCreate" useGeneratedKeys="true" keyProperty="id">insert into users(name,age) values(#{name},#{age})</insert><update id="userUpdate">update users<set><if test="name != null">name = #{name},</if><if test="age != null">age = #{age}</if></set>where id = #{id}</update>
</mapper>

创建service

创建service层的接口与实现类,实现增删改查的功能。

service.UserService

import java.util.List;public interface UserService {void userCreate(User user);List<User> userRead();void userUpdate(User user);void userDelete(Integer id);
}

impl.UserServiceImpl

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic void userCreate(User user) {userMapper.userCreate(user);}@Overridepublic List<User> userRead() {return userMapper.userRead();}@Overridepublic void userUpdate(User user) {userMapper.userUpdate(user);}@Overridepublic void userDelete(Integer id) {userMapper.userDelete(id);}
}

创建controller

创建controller层的类,实现增删改查的功能。

controller.UserController

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/create")public void userCreate() {User user = new User();user.setName("zhangsan");user.setAge(19);userService.userCreate(user);System.out.println("用户创建成功");}@GetMapping("/read")public void userRead() {List<User> users = userService.userRead();System.out.println("用户查询成功");for (User user : users) {System.out.println(user.getName() + " " + user.getAge());}}@GetMapping("/update")public void userUpdate() {User user = new User();user.setId(1);user.setName("lisi");user.setAge(18);userService.userUpdate(user);System.out.println("用户更新成功");}@GetMapping("/delete")public void userDelete() {userService.userDelete(1);System.out.println("用户删除成功");}
}

到这里,程序已经写完,访问使用网页改变路由地址即可。下面为了方便,搭配前端程序,是一个vue3的项目,放在资源里面。

搭配前端程序,修改controller

UserController

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@PostMapping("/create")public void userCreate(@RequestBody User user) {userService.userCreate(user);System.out.println("用户创建成功");}@GetMapping("/read")public List<User> userRead() {List<User> users = userService.userRead();System.out.println("用户查询成功");return users;}@PutMapping("/update")public void userUpdate(@RequestBody User user) {userService.userUpdate(user);System.out.println("用户更新成功");}@DeleteMapping("/delete")public void userDelete(@RequestParam Integer id) {userService.userDelete(id);System.out.println("用户删除成功");}@GetMapping("/getOne")public User getOne(@RequestParam Integer id) {User user = userService.getById(id);System.out.println("单个用户查询成功");return user;}
}

前后端程序,放在资源里面,自行下载,可以及时的看到效果,增删改查与查看单个,前端截图如下。

在这里插入图片描述

前端程序,会在另一篇博文中具体说明,届时会将页面样式添加上,做成一个用户管理的界面。以及完善后端程序,采用mybatisPlus。

总结

本文使用idea创建了一个springboot项目。数据库是嵌入式数据库h2,使用mybatis连接数据库。文中详细给出了安装依赖、配置文件、schema.sql,以及controller、service、mapper的所有示例代码。已亲测可以调试。并且将前后端程序一起放在资源里,只需要安装jdk就可以运行项目,进行前后端联调。

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

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

相关文章

基于众包的产品质量比较与推荐算法研究

本研究通过众包方式探索影响顾客购买决策的因素,发现顾客评论和问答内容比商家描述更能预测产品质量感知,这些发现可用于改进产品发现算法,提高推荐相关性。探索顾客购买决策背后的原因 研究背景 为了提升产品发现算…

10/9

进一步学习了链表插入的相关知识,规划了自己的实验选题系统。

2025.10.9

今日:学习英语 明日:学习英语 敲代码

深入解析:一款相机是只有桶形畸变 和 枕形畸变的一种,还是两个都有?

深入解析:一款相机是只有桶形畸变 和 枕形畸变的一种,还是两个都有?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &…

记忆化

记忆化记忆化搜索(减少重复计算,对搜索的优化)DFS指数级 记忆化保证了每个值只计算一次限制在了NM时间范围内=等价于DP动态规划好处:不需要考虑循环顺序,且只考虑有解的状态,相较递推效率可能更高 弊端:需要考虑边…

重组抗体技术:从原理到应用,解锁高效可控的新一代抗体研发

在抗体技术迭代中,重组抗体凭借 “基因工程改造 + 可控化生产” 的核心优势,逐渐取代传统杂交瘤抗体,成为科研、诊断与治疗领域的主流工具。它不仅解决了动物源抗体的免疫排斥问题,还能灵活设计为全长抗体、小分子…

关于jinja2的ssti模版注入的学习+过滤

查找想要的模块 cnt = 0 for item in [].__class__.__base__.__subclasses__():try:if os in item.__init__.__globals__:print(cnt, item)cnt += 1except:cnt += 1continue{% for i in range(300) %}{{ i }} - {{ .__…

WPF Epplus export 10M+ items in excel with multiple sheets batch by batch

Install-Package Epplus; private async Task ExportAsExcelCommandExecuted(object? obj) {try{await PopulateStatusMsg($"Start exporting");exportedIdx = 0;var dg = obj as DataGrid;var items = dg.…

[EGOI 2023] Guessing Game

精彩。 这篇题解有思路讲解,只想看做法的可以看其它题解。 做题第一步一定是先把题目要干什么弄清楚。不妨令这题第一个人是 A(除了最后一个访问的元素的信息填写者),第二个人是 B(接收信息者),第三个人是 C(最…

CF2152G Query Jungle

很精巧的题。 很明显求的是虚树的叶子结点数量。 然而这个玩意还带修,看起来有点恶心。不过带修的问题一般都不会很复杂,再加上子树修改我们考虑用搜索序把树拍到序列上,为了更好的刻画叶子,我们可以考虑使用性质更…

[ROI 2018] Addition without carry

还是记录一下,有点怪但是有点帅。 首先条件等价于和不进位,也就是说每一位只有一个 \(b\) 是 \(1\)。 对于 \(b_i\ge a_i\) 的限制我们可以当成 \(a_i\) 加若干非负数,考虑 check 一个答案是否合法,记得确定一个漂…

[THUPC 2025 决赛] Im Here

题目给了一刻编号为搜索序的树,我们形式化限制,考察方案序列:若 \(u\) 是 \(v\) 的祖先,则 \(u\) 在 \(v\) 后面。 第 \(i\) 个点只能出现在 \([1,n-i+1]\) 这些位置中。显然限制一是一个树上拓扑序计数的东西,我…

下好多雨

下好多雨继续hbase 和其他作业

解码Linux基础命令

Linux 基础命令 核心概念:终端、Shell 与内核的关系 Linux 中用户通过终端(Terminal)与系统交互,终端是运行Shell(命令解释器)的窗口,而 Shell 是连接用户与内核(Kernel)的桥梁:内核:系统核心,管理 CPU、内…

戴尔电脑开机出现supportassist怎么办_戴尔电脑开机出现supportassist多种解决优秀的方法

戴尔电脑开机出现supportassist怎么办_戴尔电脑开机出现supportassist多种解决优秀的方法2025-10-09 19:36 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important…

基于 C++ 的高雷诺数湍流直接数值模拟求解器设计与性能优化 - 实践

基于 C++ 的高雷诺数湍流直接数值模拟求解器设计与性能优化 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

项目经理常见面试题7:作为项目经理,你如何协调项目中不同角色(构建、测试、产品)的矛盾?

项目经理常见面试题7:作为项目经理,你如何协调项目中不同角色(构建、测试、产品)的矛盾?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !impo…

由等概率(a,b)生成等概率(c,d)

问题描述:有一个函数,可以等概率的生成x∈(a,b),如何编写函数生成x∈(c,d) 举例f函数可以生成[1,5],生成[1,7]1 public static int f() { 2 return (int) (Math.random() * 5) + 1; 3 } 解题思路:通过f()改造成等…

是时候使用NanoID取代UUID了

是时候使用NanoID取代UUID了是时候使用NanoID取代UUID了付国强兴趣是一个人成功的基石​关注他5 人赞同了该文章 UUID是软件开发中最常用的通用标识符之一。然而,在过去的几年里,其他替代品挑战了它的存在。其中,N…

经营分析会 - 智慧园区

很多公司的经营分析会,最终都变成了“数据的狂欢,行动的荒漠”。报表一页页翻,指标一个个念,大家口干舌燥,却还是不知道问题到底出在哪、该怎么办。问题的根源其实很简单: 财务指标只能告诉你“发生了什么”,却…