idea2023 springboot+mybatis+jsp 初学单表增删改查

news2024/11/19 14:49:56
  1. 创建项目
    在这里插入图片描述
    在这里插入图片描述
    因为2.7.14使用量较少,特更改spring-boot为2.7.5版本
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    配置端口号
    在这里插入图片描述

打开Sm01Application类,右键运行启动项目,或者按照如下箭头启动
在这里插入图片描述
启动后,控制台提示如下信息表示成功
在这里插入图片描述
此刻在浏览器中输入:http://localhost:8081/hello 就可以看到如下得效果,就表示你成功了。
在这里插入图片描述

  1. 加入mybatis
    2.1在pom中加入,如下依赖
       <!--lombok不仅方便编写,同时也让我们的代码更简洁。比如常见的Getter&Setter、toString()、构造函数等等。-->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.20</version>
		</dependency>
       <!--C标签库得使用-->
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
		<!--mysql驱动-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.33</version>
		</dependency>
		<!--mybatis启动器-->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.2.2</version>
		</dependency>

2.2在application.properties中增加如下配置

spring.datasource.url=jdbc:mysql://localhost:3306/jdbc08
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
mybatis.mapper-locations=classpath:mapper/*.xml

2.3 在resources 下创建一个文件夹叫mapper
2.4在src下创建bean层,

@Data
public class DeptBean {

    private int did;
    private String dname;

}

2.5在src下创建mapper层,并写接口

@Mapper
public interface DeptMapper {
    public void addDept(String name);
    public void delDept(int id);
    public void updateDept(DeptBean deptBean);

    public DeptBean byidDept(int id);
    public List<DeptBean> allDept();
}

2.6 在resource下得mapper文件夹中新建一个文件DeptMapper.xml,如下得com.example.sm_01是项目中的包名
如下请注意:namespace的路径为2.5步中类的全路径

<?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.sm_01.mapper.DeptMapper">

    <insert id="addDept" >
        insert into tb_dept (dname) values (#{values})
    </insert>

    <delete id="delDept">
        delete  from tb_dept where did=${id}
    </delete>

    <update id="updateDept" parameterType="com.example.sm_01.bean.DeptBean">
        update tb_dept set dname=#{dname} where did=#{did}
    </update>

    <select id="byidDept" resultType="com.example.sm_01.bean.DeptBean">
        select * from tb_dept where did=#{id}
    </select>

    <select id="allDept" resultType="com.example.sm_01.bean.DeptBean">
        select * from tb_dept
    </select>
</mapper>

2.7在src下创建service层,创建如下类

@Service
public class DeptService {

    @Autowired
    private DeptMapper deptMapper;

    public void addDeptService(String name){
        deptMapper.addDept(name);
    }

    public void delDeptService(int id){
        deptMapper.delDept(id);
    }

    public void updateDeptService(DeptBean deptBean){
        deptMapper.updateDept(deptBean);
    }

    public DeptBean byidDeptService(int id){
        return deptMapper.byidDept(id);
    }

    public List<DeptBean> allDeptService(){
        return deptMapper.allDept();
    }

}

2.8在src下创建controller层,并创建如下类:

@Controller
public class DeptController {
    @Autowired
    private DeptService deptService;

    @RequestMapping("addDept")
    public String addDept(String dname){
        deptService.addDeptService(dname);
        return "allDept";
    }

    @RequestMapping("allDept")
    public String allDept(Model model){
        model.addAttribute("alldept",deptService.allDeptService());
        return "deptAll.jsp";
    }

    @RequestMapping("byidDept")
    public String byidDept(int id ,Model model){
        model.addAttribute("byidDept",deptService.byidDeptService(id));
        return "deptUpdate.jsp";
    }

    @RequestMapping("delDept")
    public String delDept(int id){
        deptService.delDeptService(id);
        return "allDept";
    }

    @RequestMapping("updateDept")
    public String updateDept(DeptBean deptBean){
        deptService.updateDeptService(deptBean);
        return "allDept";
    }
}

如上操作后:代码目录如下:
在这里插入图片描述
接下来我们创建jsp目录:

2.9 点击File -->project stru…
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后就看到webapps目录一个小篮圈,然后请在这个目录下新建jsp
在这里插入图片描述
deptAdd.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
  <form action="addDept"  method="post">
      部门名称:<input type="text" name="dname" />
      <input type="submit" value="添加">
  </form>
</body>
</html>

deptAll.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java"  isELIgnored="false" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <c:forEach items="${alldept}" var="dd">
      ${dd.dname}
        <a href="delDept?id=${dd.did}">del</a>
        <a href="byidDept?id=${dd.did}">update</a>
        <br/>
    </c:forEach>
</body>
</html>

deptUpdate.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="updateDept"  method="post">
    <input type="hidden" name="did" value="${byidDept.did}">
    部门名称:<input type="text" name="dname" value="${byidDept.dname}"/>
    <input type="submit" value="修改">
</form>
</body>
</html>

如上已完成,若想下载完整代码,请去资源寻找

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

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

相关文章

盘点市面上的ipad协议对比

友情链接 geweapi.com 点击即可访问! Web网页端&#xff1a;2017年后不再支持新号登录&#xff0c;仅支持老号&#xff0c;并且掉线严重&#xff0c;功能缺失严重。 Xposed技术&#xff1a;在2019年6月份&#xff0c;微信官方在行业重点打击Xposed&#xff0c;自此行业内一片…

企望制造ERP系统 RCE漏洞[2023-HW]

企望制造ERP系统 RCE漏洞 一、 产品简介二、 漏洞概述三、 复现环境四、 漏洞复现小龙POC检测 五、 修复建议 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;…

IO day 4

1、使用两个进程完成两个文件的拷贝&#xff0c;父进程拷贝前一半内容&#xff0c;子进程拷贝后一半内容&#xff0c;并且父进程要阻塞回收子进程资源 #include <myhead.h>int main(int argc, const char *argv[]) {char a[1] {0};pid_t pid;pid fork();//创建一个子进…

马哈鱼数据血缘工具背后的项目: gsp_demo_java 项目简单介绍与使用

0.背景 马哈鱼数据血缘工具(https://www.sqlflow.cn/)是SQLflow工具的中文译名,实际就是sqlflow. 对于SQL flow来说,底层调用的是General SQL Parser(GSP https://sqlparser.com) 的库. 这个gsp有开源的java demo项目:https://github.com/sqlparser/gsp_demo_java 1.快速使用…

Focus-DETR利用双重注意力机制重建编码器,打造最强目标检测模型

前期的文章我们介绍了DETR模型,我们知道DETR模型首先使用CNN卷积神经网络搜集图片的核心特征点,然后把这些特征点整合起来,通过embedding方法,把特征图片转换到特征向量空间。然后根据标准Transformer模型的编码器与解码器进行注意力机制的计算,最后把计算后的数据进行图片…

vue3+ts+vite使用el-breadcrumb实现面包屑组件,实现面包屑过渡动画

简介 使用 element-plus 的 el-breadcrumb 组件&#xff0c;实现根据页面路由动态生成面包屑导航&#xff0c;并实现面包屑导航的切换过渡动画 一、先看效果加粗样式 1.1 静态效果 1.2 动态效果 二、全量代码 <script lang"ts" setup> import { ref, watch…

5个高清视频素材网站

推荐5个高清视频素材网站&#xff0c;免费、付费、商用的都有&#xff0c;可根据自己需求去选择&#xff0c;赶紧收藏吧&#xff01; 菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky ​ 菜鸟图库网素材非常丰富&#xff0c;网站主要还是以设计类素材为主&#xff…

RCE远程命令执行

逻辑运算符:: &&&#xff1a;代表首先执行命令a&#xff0c;若成功再执行命令b&#xff0c;又被称为短路运算符。 &&#xff1a;代表首先执行命令a再执行命令b&#xff0c;不管a是否成功&#xff0c;都会执行命令b。在执行效率上来说“&&”更加高效。 ||&a…

合宙Air724UG LuatOS-Air LVGL API--简介

为何是 LVGL LVGL 是一个开源的图形库&#xff0c;它提供了创建嵌入式 GUI 所需的一切&#xff0c;具有易于使用的图形元素、漂亮的视觉效果和低内存占用的特点。 LVGL特点&#xff1a; 强大的 控件 &#xff1a;按钮、图表、列表、滑动条、图像等 高级图形引擎&#xff1a;动…

AIGC之文本内容生成概述(下)—— BERT

关于AIGC系列的文章内容&#xff0c;我们在上一期介绍了基础模型Transformer&#xff0c;本期将会继续介绍基于Transformer模型改进的BERT&#xff08;双向编码器表示Transformer&#xff09;模型。如果想要查之前的介绍内容&#xff0c;可以关注本号&#xff0c;翻看之前的文章…

九耶丨阁瑞钛伦特-在项目中找到的经典BUG是什么?

在项目中找到的经典BUG有很多种&#xff0c;以下是其中一些常见的例子&#xff1a; 空指针异常&#xff08;NullPointerException&#xff09;&#xff1a;当程序试图访问一个空对象或未初始化的变量时&#xff0c;会抛出空指针异常。这通常是由于缺少对变量的正确初始化或检查…

知识继承概述

文章目录 知识继承第一章 知识继承概述1.背景介绍第一页 背景第二页 大模型训练成本示例第三页 知识继承的动机 2.知识继承的主要方法 第二章 基于知识蒸馏的知识继承预页 方法概览 1.知识蒸馏概述第一页 知识蒸馏概述第二页 知识蒸馏第三页 什么是知识第四页 知识蒸馏的核心目…

java练习6. 求完数

题目: 请编程求出1000 以内的所有完数。 完数:一个数如果恰好等于它的所有真因子&#xff08;即除了自身外的所有因数&#xff09;之和&#xff0c;这个数就称为"完数"。 public static void main(String[] args) {for (int i 2; i < 1000; i) {int sum0;for (in…

最大公约数题--夏令营

题目&#xff1a; 知识点&#xff1a; 1。数论-欧几里得算法-gcd最大公因数性质 证明性质2&#xff0c;为什么两组的公约数相等&#xff0c;同样&#xff0c;最大公约数也相等 算法表示 int gcd(int a, int b) {return b 0 ? a : gcd(b, a % b); } 2.分析题目&#xff1a;…

java forEach中不能使用break和continue的原因

1.首先了解break和continue的使用范围和作用 1.1使用范围 break适用范围&#xff1a;只能用于switch或者是循环语句中。当然可以用于增强for循环。 continue适用范围: 用于循环语句中。 1.2作用 break: 1. break用于switch语句的作用是结束一个switch语句。 2. break用于循…

STM32单片机WIFI手机APP智能窗户窗帘控制系统手动自动定时

实践制作DIY- GC0163--WIFI手机APP智能窗户窗帘控制系统 基于STM32单片机设计---WIFI手机APP智能窗户窗帘控制系统 二、功能介绍&#xff1a; STM32F103C系列最小系统板5VUSB电源ULN2003控制的步进电机5个按键DS1302时钟芯片LCD1602显示器光敏电阻结合内部ADC采集光强DHT11温度…

FPGA_学习_17_IP核_ROM(无延迟-立即输出)

由于项目中关于厂商提供的温度-偏压曲线数据已经被同事放在ROM表了&#xff0c;我这边可用直接调用。 今天在仿真的时候&#xff0c;发现他的ROM表用的IP核是及时输出的&#xff0c;就是你地址给进去&#xff0c;对应地址的ROM数据就立马输出&#xff0c;没有延迟。 我打开他的…

聊聊@Accessors和@Builder

目录 Accessors和BuilderAccessors(chaintrue)BuilderAccessors和Builder的区别Accessors和Builder使用的坑 详细看看Accessors注解Accessors的源码Accessors属性说明fluent属性chain属性makeFinal属性prefix属性 Accessors和Builder Accessors(chaintrue) 就是new一个对象后…

2024秋招简历注意事项

互联网是一年比一年难&#xff0c;刚刚帮学弟修改了一下简历&#xff0c;学弟很强有项目有论文有比赛&#xff0c;但是我修改的时候感觉有点啰嗦&#xff0c;抓不住重点&#xff0c;所以在编写简历时&#xff0c;我觉得有几个要点一定要注意&#xff1a; 1. 简明扼要&#xff1…

C++之string类的使用

C之string类的使用 1.为什么要学string类2.标准库中的string类3.string类的接口的使用3.1默认成员函数3.2容量操作3.3访问操作3.4遍历操作3.5修改操作3.6字符串操作3.7非成员函数 1.为什么要学string类 我们所学的字符串是以’\0’结尾的一些字符的集合&#xff0c;为了操作方…