当前位置: 首页 > news >正文

SpringBoot整合MyBatis项目进行CRUD操作项目示例

文章目录

  • SpringBoot整合MyBatis项目进行CRUD操作项目示例
    • 1.1.需求分析
    • 1.2.创建工程
    • 1.3.pom.xml
    • 1.4.application.properties
    • 1.5.启动类
  • 2.添加用户
    • 2.1.数据表设计
    • 2.2.pojo
    • 2.3.mapper
    • 2.4.service
    • 2.5.junit
    • 2.6.controller
    • 2.7.thymeleaf
    • 2.8.测试
  • 3.查询用户
    • 3.1.mapper
    • 3.2.service
    • 3.4.controller
    • 3.5.thymeleaf
    • 3.6.测试
  • 4.用户登录
    • 4.1.mapper
    • 4.2.service
    • 4.4.controller
    • 4.5.thymeleaf
    • 4.6.测试
  • 5.SpringBoot整合日期转换器
    • 5.1.添加日期转换器
    • 5.2.配置日期转换器
  • 6.SpringBoot整合拦截器
    • 6.1.添加拦截器
    • 6.2.配置拦截器

SpringBoot整合MyBatis项目进行CRUD操作项目示例

1.1.需求分析

通过使用 SpringBoot+MyBatis整合实现一个对数据库中的 users 表的 CRUD

1.2.创建工程

04_springboot_mybatis

1.3.pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.2.RELEASE</version></parent><groupId>com.by</groupId><artifactId>04_springboot_mybatis</artifactId><version>1.0-SNAPSHOT</version><properties><java.version>1.8</java.version></properties><dependencies><!-- springBoot 的启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Mybatis 启动器 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.1</version></dependency><!-- mysql 数据库驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency><!-- druid 数据库连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.9</version></dependency><!-- 添加 junit 环境的 jar 包 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.0</version></dependency></dependencies>
</project>

1.4.application.properties

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot
spring.datasource.username=root
spring.datasource.password=1111
spring.datasource.type=com.alibaba.druid.pool.DruidDataSourcemybatis.type-aliases-package=com.by.pojologging.level.com.by.mapper=DEBUG

1.5.启动类

@SpringBootApplication
@MapperScan("com.by.mapper") // @MapperScan 用户扫描MyBatis的Mapper接口
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}
}

2.添加用户

2.1.数据表设计

CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`nam` varchar(255) DEFAULT NULL,`sex` int(11) DEFAULT NULL,`pwd` varchar(255) DEFAULT NULL,`birth` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

2.2.pojo

public class User {private Integer id;private String nam;private String pwd;private Integer sex;private Date birth;
}

2.3.mapper

public interface UserMapper {public void insertUser(User user);
}
<?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.by.mapper.UserMapper"><insert id="insertUser" parameterType="user">insert into user(nam,pwd,sex,birth) values(#{nam},#{pwd},#{sex},#{birth})</insert>
</mapper>

2.4.service

@Service
@Transactional
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic void addUser(User user) {this.userMapper.insertUser(user);}
}

2.5.junit

/***  main方法:*		ApplicationContext ac=new *       			ClassPathXmlApplicationContext("classpath:applicationContext.xml");*  junit与spring整合:*      @RunWith(SpringJUnit4ClassRunner.class):让junit与spring环境进行整合*   	@Contextconfiguartion("classpath:applicationContext.xml")  *  junit与SpringBoot整合: *		@RunWith(SpringJUnit4ClassRunner.class):让junit与spring环境进行整合*		@SpringBootTest(classes={App.class}):加载SpringBoot启动类。启动springBoot*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes={App.class})
public class UserServiceTest {@Autowiredprivate UserService userService;@Testpublic void testAddUser(){User user = new User();user.setId(1);user.setNam("二狗");user.setPwd("111");user.setSex(1);user.setBirth(new Date());this.userService.addUser(user);}
}

2.6.controller

@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;/*** 页面跳转*/@RequestMapping("/{page}")public String showPage(@PathVariable String page) {return page;}/*** 添加用户*/@RequestMapping("/addUser")public String addUser(User user) {this.userService.addUser(user);return "ok";}
}

2.7.thymeleaf

add.html

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>添加用户</title>
</head>
<body>
<h3>新增用户</h3>
<hr/>
<form th:action="@{/user/addUser}" method="post">姓名:<input type="text" name="nam"/><br/>密码:<input type="text" name="pwd"/><br/>性别:<input type="radio" name="sex" value="1"/><input type="radio" name="sex" value="0"/><br/>生日:<input type="text" name="birth"/><br/><input type="submit" value="确定"/><br/>
</form>
</body>
</html>

2.8.测试

在这里插入图片描述

3.查询用户

3.1.mapper

public List<User> listUser();
<select id="listUser" resultType="user">select * from user
</select>

3.2.service

	@Overridepublic List<User> listUser() {return userMapper.listUser();}

3.4.controller

	/*** 查询全部用户*/@RequestMapping("/listUser")public String listUser(Model model) {List<User> list = this.userService.listUser();model.addAttribute("list", list);return "list";}

3.5.thymeleaf

list.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>首页</title><style type="text/css">table {border-collapse: collapse; font-size: 14px; width: 80%; margin: auto}table, th, td {border: 1px solid darkslategray;padding: 10px}</style>
</head>
<body>
<div style="text-align: center"><span style="color: darkslategray; font-size: 30px">欢迎光临!</span><hr/><table class="list"><tr><th>id</th><th>姓名</th><th>密码</th><th>性别</th><th>生日</th></tr><tr th:each="user : ${list}"><td th:text="${user.id}"></td><td th:text="${user.nam}"></td><td th:text="${user.pwd}"></td><td th:text="${user.sex==1}?'男':'女'"></td><td th:text="${#dates.format(user.birth,'yyyy-MM-dd')}"></td></tr></table>
</div>
</body>
</html>

3.6.测试

在这里插入图片描述

4.用户登录

4.1.mapper

public Users login(User user);
	<select id="login" parameterType="User" resultType="User">select * from user where nam=#{nam} and pwd=#{pwd}</select>

4.2.service

	@Overridepublic Users login(User user) {return userMapper.login(user);}

4.4.controller

	@RequestMapping("/login")public String login(Model model, User user, HttpSession session) {User loginUser = usersService.login(user);if(user!=null){session.setAttribute("loginUser", loginUser);return "redirect:/user/listUser";}return "login";}

添加PageController

@Controller
public class PageController {@RequestMapping("/")public String showLogin(){return "login";}
}

4.5.thymeleaf

login.html

<html>
<head>
<meta charset="UTF-8">
<title>注册</title>
</head>
<body>
<center><h3>登录</h3><hr/><form th:action="@{/user/login}" method="post">账号:<input type="text" name="nam"/><br/>密码:<input type="text" name="pwd"/><br/><input type="submit" value="确定"/><br/></form>
</center>
</body>
</html>

4.6.测试

在这里插入图片描述

5.SpringBoot整合日期转换器

5.1.添加日期转换器

import java.text.ParseException;
import java.util.Date;import org.springframework.core.convert.converter.Converter;
import org.apache.commons.lang3.time.DateUtils;
public class DateConverter implements Converter<String, Date>{@Overridepublic Date convert(String str) {String[] patterns = new String[]{"yyyy-MM-dd","yyyy-MM-dd hh:mm:ss","yyyy/MM/dd","yyyy/MM/dd hh:mm:ss","MM-dd-yyyy","dd-MM-yyyy"};try {Date date = DateUtils.parseDate(str, patterns);return date;} catch (ParseException e) {e.printStackTrace();}return null;}}

5.2.配置日期转换器

  • 说明

    WebMvcConfigurer配置类其实是Spring内部的一种配置方式,采用JavaBean的形式来代替传统的xml配置文件形式针对框架进行个性化定制,例如:拦截器,类型转化器等等。

  • 代码示例

    import com.by.converter.DateConverter;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.format.FormatterRegistry;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Component
    public class MyConfig implements WebMvcConfigurer {@Overridepublic void addFormatters(FormatterRegistry registry) {registry.addConverter(new DateConverter());}}
    

6.SpringBoot整合拦截器

6.1.添加拦截器

package com.by.interceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.by.pojo.Users;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;public class LoginInterceptor implements HandlerInterceptor{@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler)throws Exception {Users user = (Users) request.getSession().getAttribute("user");if(user!=null){return true;}response.sendRedirect("/");return false;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {}}

6.2.配置拦截器

修改MyConfig

	//<mvc:interceptors>@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/emp/**");}

相关文章:

SpringBoot整合MyBatis项目进行CRUD操作项目示例

文章目录 SpringBoot整合MyBatis项目进行CRUD操作项目示例1.1.需求分析1.2.创建工程1.3.pom.xml1.4.application.properties1.5.启动类 2.添加用户2.1.数据表设计2.2.pojo2.3.mapper2.4.service2.5.junit2.6.controller2.7.thymeleaf2.8.测试 3.查询用户3.1.mapper3.2.service3…...

Android Studio下载gradle反复失败

我的版本&#xff1a;gradle-5.1.1 首先检查设置路径是否正确&#xff0c;参考我的修改&#xff01; 解决方案 1.手动下载Gradle.bin Gradle Distributions 下载地址 注意根据编译器提示下载&#xff0c;我这要求下载的是bin 而不是all 2.把下载好的整个压缩包放在C:\Users\…...

【HTML5】 canvas 绘制图形

文章目录 一、基本用法二、用法详见2.0、方法属性2.1、绘制线条2.2、绘制矩形2.3、绘制圆形2.4、绘制文本2.5、填充图像 一、基本用法 canvas 标签&#xff1a;可用于在网页上绘制图形&#xff08;使用 JavaScript 在网页上绘制图像&#xff09;画布是一个矩形区域&#xff0c…...

【数据结构】二叉树-堆(top-k问题,堆排序,时间复杂度)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm1001.2014.3001.5482 ​​ 目录 堆排序 第一种 ​编辑 第二种 …...

通过浏览器判断是否安装APP

场景 求在分享出来的h5页面中&#xff0c;有一个立即打开的按钮&#xff0c;如果本地安装了我们的app&#xff0c;那么点击就直接唤本地app&#xff0c;如果没有安装&#xff0c;则跳转到下载。 移动端 判断本地是否安装了app 首先我们可以确认的是&#xff0c;在浏览器中无…...

vivado Revision Control

2020.2 只需要git 管理 prj.xpr 和 prj.srcs/ https://china.xilinx.com/video/hardware/ip-revision-control.html Using Vivado Design Suite with Revision Control https://www.xilinx.com/video/hardware/vivado-design-suite-revision-control.html http://www.xi…...

【AI视野·今日Robot 机器人论文速览 第七十三期】Tue, 9 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Tue, 9 Jan 2024 Totally 40 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Digital Twin for Autonomous Surface Vessels for Safe Maritime Navigation Authors Daniel Menges, Andreas Von Brandis, A…...

java解析json复杂数据的第四种思路

文章目录 一、概述二、数据预览1. 接口json数据 三、代码实现1. 核心代码2. 字符串替换结果3. 运行结果 一、概述 接前两篇 java解析json复杂数据的两种思路 java解析json复杂数据的第三种思路 我们已经有了解析json数据的几种思路&#xff0c;下面介绍的方法是最少依赖情况下…...

【不用找素材】ECS 游戏Demo制作教程(1) 1.15

一、项目设置 版本&#xff1a;2022.2.0f1 &#xff08;版本太低的话会安装不了ECS插件&#xff09; 模板选择3D URP 进来后移除URP&#xff08;因为并不是真的需要&#xff0c;但也不是完全不需要&#xff09; Name: com.unity.entities.graphics Version: 1.0.0-exp.8 点击…...

Mysql的in与exits

Mysql的in与exits IN和EXISTS是MySQL中用于子查询的两种不同的条件操作符。它们在使用和实现上有一些区别。 IN 操作符&#xff1a; IN操作符用于判断一个值是否在一个集合内。它可以用于子查询中&#xff0c;检查主查询的某一列是否在子查询返回的结果集中。 SELECT colum…...

浅谈对Maven的理解

一、什么是Maven Maven——是Java社区事实标准的项目管理工具&#xff0c;能帮你从琐碎的手工劳动中解脱出来&#xff0c;帮你规范整个组织的构建系统。不仅如此&#xff0c;它还有依赖管理、自动生成项目站点等特性&#xff0c;已经有无数的开源项目使用它来构建项目并促进团队…...

【算法实验】实验2

实验2-1 二分搜索 【问题描述】给定一个包含 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target&#xff0c;要求实现搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。题目保证nums中的所有元素都不重复。 【…...

杂记:使用 mac 和 windows 以及编辑器的总结

Chrome 扩展 Grammarly 语法检查 DM Integration Module idm 下载扩展 JSON Formatter json 格式化查看 uBlock Origin Ad block 油猴 任意网站都可以使用的脚本管理工具 Mac 快捷键整理 截图到剪贴板 shift command control 4 (不按 shift 存储为文件) 切换输入法…...

vue2使用qiankun微前端(跟着步骤走可实现)

需求&#xff1a;做一个vue2的微前端&#xff0c;以vue2为主应用&#xff0c;其他技术栈为子应用&#xff0c;比如vue3&#xff0c;本文章只是做vue2一套的微前端应用实现&#xff0c;之后解决的一些问题。vue3子应用可以看我另一篇vue3vitets实现qiankun微前端子应用-CSDN博客…...

1.C语言基础知识

这里写目录标题 1.第一个C语言程序2.注释3.标识符4.关键字5.数据类型6.变量7.常量8.运算符9.输入输出输入输出 1.第一个C语言程序 C语言的编程框架 #include <stdio.h> int main() {/* 我的第一个 C 程序 */printf("Hello, World! \n");return 0; }2.注释 单行…...

路由黑洞和黑洞路由的区别

路由黑洞&#xff1a; 路由黑洞是一种现象&#xff0c;一般是在网络边界做汇总回程路由的时候产生的一种不太愿意出现的现象&#xff0c;就是汇总的时候有时会有一些不在内网中存在的网段&#xff0c;但是又包含在汇总后的网段中&#xff0c;如果在这个汇总的边界设备上同时还配…...

Golang 如何基于现有的 context 创建新的 context?

目录 基于现有的 context 创建新的 context 现有创建方法的问题 Go 1.21 中的 context.WithoutCancel 函数 Go 版本低于 1.21 该怎么办&#xff1f; 在 Golang 中&#xff0c;context 包提供了创建和管理上下文的功能。当需要基于现有的 context.Context 创建新的 context …...

【学习笔记】[AGC063E] Child to Parent

提供一个多项式做法。 分别设 f u , i , g u , i f_{u,i},g_{u,i} fu,i​,gu,i​表示以 u u u为根时&#xff0c; a u i a_ui au​i和 a u ≥ i a_u\ge i au​≥i的方案数&#xff0c;合并子树 v v v时&#xff0c;转移如下&#xff1a; f u , i ∑ f u , i − k r g v . k…...

sar 运行出错

手机上使用sar 使用sar工具报错 / # sar -I SUM 1 1 Cannot find the data collector (sadc) exec: No such file or directory Inconsistent input data解决方法&#xff1a;需要将 sadc sadf sar 三个bin同时推到/usr/bin/目录下 / # sar -I SUM 1 2 Linux 5.15.104-ab558…...

UE5 C++的TCP服务器与客户端

客户端.h 需要在Build.cs中加入模块:"Networking","Sockets","Json","JsonUtilities" // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...