Springboot+Mybatis入门案例

2023-12-19

一、项目结构

1.导入依赖

<?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>

    <groupId>org.example</groupId>
    <artifactId>testcsdn</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.10.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--web网页,如果只在test测试类中测试,则可去掉-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--简化代码的工具包,针对实体类-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--mybatis‐plus的springboot支持-->
<!--        <dependency>-->
<!--            <groupId>com.baomidou</groupId>-->
<!--            <artifactId>mybatis-plus-boot-starter</artifactId>-->
<!--            <version>3.1.0</version>-->
<!--        </dependency>-->
        <!--mybatis的springboot支持-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>

    </dependencies>

</project>

2.Controller层

package org.example.controller;

import org.example.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController //@RestController = @Controller + @ResponseBody 此处目的是返回json数据
@RequestMapping("/test")
public class StudentController {

    @Autowired
    private StudentService studentService;

    @RequestMapping("/show")
    public String test01(){
        return studentService.findStudent();
    }

}

3.mapper层

package org.example.mapper;

import org.example.pojo.Student;

public interface StudentMapper {
    Student findStudent();
}

4.pojo实体类

springboot+mybatis实体类不需要加@Table等注解,只要有@Data注解即可(包含getter/setter方法)

package org.example.pojo;

import lombok.Data;

@Data
public class Student {
    private Integer id;
    private String name;
    private Integer age;

}

5.service层

接口

package org.example.service;

public interface StudentService {
    String findStudent();
}

实现类

package org.example.service;

import org.example.mapper.StudentMapper;
import org.example.pojo.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class StudentServiceImp implements StudentService{

    @Autowired
    private StudentMapper studentMapper;
    @Override
    public String findStudent() {
        Student student = studentMapper.findStudent();
        return student.toString();
    }
}

6.启动类

package org.example;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("org.example.mapper")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

7.StudentMapper.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="org.example.mapper.StudentMapper">
    <select id="findStudent" resultType="org.example.pojo.Student">
        select * from student where  id = 1
    </select>
</mapper>

8.application.yml

server:
  port: 8080 #服务端口号,可修改
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver #mysql5版本把.cj去掉,此处为mysql8.0
    url: jdbc:mysql://localhost:3306/test #test改成自己的数据库名
    username: root
    password: "123456"

mybatis:
  mapper-locations: classpath:mybatis/*.xml
  #目的是为了省略resultType里的代码量,可不加
#  type-aliases-package: com.example.pojo
#  configuration:
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

9.测试类

package org.example.test;

import org.example.service.StudentService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@SpringBootTest
@RunWith(SpringRunner.class)
public class StudentTest {
    @Autowired
    private StudentService studentService;

    @Test
    public void test(){
        String student = studentService.findStudent();
        System.out.println(student);
    }

}

二、Sql

/*
 Navicat Premium Data Transfer

 Source Server         : localhost
 Source Server Type    : MySQL
 Source Server Version : 80033 (8.0.33)
 Source Host           : localhost:3306
 Source Schema         : test

 Target Server Type    : MySQL
 Target Server Version : 80033 (8.0.33)
 File Encoding         : 65001

 Date: 19/12/2023 10:14:04
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `age` int NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '李华', 19);
INSERT INTO `student` VALUES (2, '张飞', 20);
INSERT INTO `student` VALUES (3, '丑陋', 22);
INSERT INTO `student` VALUES (4, '孙尚香', 18);
INSERT INTO `student` VALUES (5, '狄仁杰', 12);

SET FOREIGN_KEY_CHECKS = 1;

测试

右键启动类启动服务

在网页打开网址

http://localhost:8080/test/show

显示下图,即运行成功!

到这里你的springboot+mybatis项目就算是入门了,如果伙伴们有什么问题的话,评论留言,大家一起学习,一起进步!

环境:IDEA开发工具、数据库Mysql8.0、Springboot+Mybatis项目

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Springboot+Mybatis入门案例 的相关文章

  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • 如何通过 javaconfig 使用 SchedulerFactoryBean.schedulerContextAsMap

    我使用 Spring 4 0 并将项目从 xml 移至 java config 除了访问 Service scheduleService 带注释的类来自QuartzJobBean executeInternal 我必须让它工作的 xml 位
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 在 Bash 中监控 tomcat,直到它完成部署 war 或应用程序

    怎么可能Tomcat在 bash 脚本中进行监控以检测它是否完成了战争或应用程序的部署 应用场景 Tomcat 开始于systemd Tomcat 开始于catalina sh 使用 Tomcat 管理器 Tomcat从Eclipse启动
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • Spring Boot 无法更新 azure cosmos db(MongoDb) 上的分片集合

    我的数据库中存在一个集合 documentDev 其分片键为 dNumber 样本文件 id 12831221wadaee23 dNumber 115 processed false 如果我尝试使用以下命令通过任何查询工具更新此文档 db

随机推荐

  • MySQL查询语句基础解析

    一般查询 直接查询 语法 select 字段 from 表名 举例 select name age from student 解析 从 student 表中查询 name 与 age 条件查询 语法 select 字段 from 表名 wh
  • JavaOOP篇----第四篇

    系列文章目录 文章目录 系列文章目录 前言 一 Char类型能不能转成int类型 能不能转化成string类型 能不能转成double类型 二 什么是拆装箱 三 Java中的包装类都是那些 前言 前些天发现了一个巨牛的人工智能学习网站 通俗
  • 网络安全面试题

    在当今社会网络安全行业越来越发达 也有越来越多的人去学习 为了更好地进行工作 除了学好知识外还要应对企业的面试 所以在这里我归总了一些网络安全方面的常见面试题 希望对大家有所帮助 windows常见 1 描述tcp udp的区别及优劣 及其
  • 100套风景+人物动物AI绘画关键词

    1 10美元计划 Midjourney的10美元计划是最基础的计划 每月可以生成200张图 然而没有fast模式 也无法免排队生成图 相对于30美元和60美元计划 这个计划更适合个人用户或小型团队使用 仅用于少量图像的生成 如果你只是偶尔需
  • 中国1KM分辨率年均降水量数据集(1901-2022)

    数据名称 中国1KM分辨率年均降水量数据集 1901 2022 数据时间 1901年至今 数据空间位置 全国 数据格式 tiff 数据空间分辨率 1kM 数据坐标系 WGS1984 数据简介 该数据集为全国逐年平均降水量数据 空间分辨率为0
  • 如何实现MQTT网关连接各类工业物联设备,实现数据传输与控制

    MQTT是一种轻量级的发布 订阅消息传输协议 专门为低带宽 高延迟或不稳定的网络环境设计 它支持离线消息存储 使客户端在未连接到服务器时也能接收到消息 MQTT网关是一种采用MQTT协议的网关设备 可以连接不同类型的工业物联设备 实现设备之
  • 基于Spring Boot、Mybatis、Redis和Layui的企业电子招投标系统源码实现与立项流程

    招投标管理系统是一款适用于招标代理 政府采购 企业采购和工程交易等领域的企业级应用平台 该平台以项目为主线 从项目立项到项目归档 实现了全流程的高效沟通和协作 通过该平台 用户可以实时共享项目数据信息 实现规范化管理和有效监控 协同工作网络
  • 使用AI大模型生成动漫人像

    在线体验 点击 图像处理 即可使用 public static final String SELFIE ANIME https aip baidubce com rest 2 0 image process v1 selfie anime
  • 高薪程序员也躲不过35岁这一关..当能力与年龄脱节,我们该如何自救

    在测试行业 甚至是整个互联网行业 存在这样一个神奇又隐秘的传说 过了 35 岁 你就找不到好工作了 没有哪一个企业出来声明 没有企业敢 也没有哪个超过 35 岁的员工出来反驳 似乎这已经是这个行业的通识 35岁已经成为一条冷酷的分界线 也是
  • Kubernetes 简介

    1 Kubernetes简介 一个容器管理应用 提高容器化服务的部署和管理效率 2 容器部署 2 1 传统部署形式 应用共用服务器环境 对于底层资源 文件目录 JDK 网络带宽等 存在弹性争夺 冲突等问题 容易导致应用性能不稳定 服务器环境
  • 中国90米分辨率可蚀性因子K数据

    数据时间 2023年 数据空间位置 全国 数据空间分辨率 90m 数据坐标系 WGS1984 数据格式 tiff 数据来源 地球资源数据云平台 www gis5g com 如需要请自行联系 数据简介 土壤可蚀性因子 K 数据 基于多种土壤属
  • 【网络安全】-Linux操作系统—CentOS安装、配置

    CentOS是一个基于Red Hat Enterprise Linux构建的免费操作系统 它提供了企业级的稳定性和安全性 非常适合用于服务器环境 以下是CentOS安装和基本配置的详细指南 准备工作 在安装CentOS之前 需要准备安装介质
  • 二蛋赠书十二期:《一本书讲透Java线程:原理与实践》

    摘要 互联网的每一个角落 无论是大型电商平台的秒杀活动 社交平台的实时消息推送 还是在线视频平台的流量洪峰 背后都离不开多线程技术的支持 在数字化转型的过程中 高并发 高性能是衡量系统性能的核心指标 越来越多的公司对从业人员的多线程编程能力
  • PHP中1688平台商品详情数据API接口采集到数据后如何处理

    PHP的定义和特点 PHP Hypertext Preprocessor 是一种开源的服务器端脚本语言 用于快速构建动态网页和Web应用程序 PHP采用嵌入HTML的方式 可以直接嵌入到HTML代码中 与数据库连接 数据处理 文件上传等操作
  • Vue的网络请求、插槽、Vuex

    axios npm i axios 跨域问题 协议名 ip 端口号 实际上 浏览器是收到数据的 但是没有交付给开发者 解决跨域问题 创建代理服务器 代理服务器和前端端口是一样的 所以不存在跨域问题 代理服务器与后端服务器都是服务器 和浏览器
  • Android的基础开发

    基础开发 listView ListView就是列表条目 可以向下滚动 也可以点击 首先设置两个视图布局 activity main2 xml 充当容器 ListView
  • 「Verilog学习笔记」游戏机计费程序

    专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点 刷题网站用的是牛客网 timescale 1ns 1ns module game count input rst n 异位复位信号 低电平有效 input clk 时
  • 讲解darknet: ./src/cuda.c:36: check_error: Assertion `0‘ failed.

    目录 讲解darknet src cuda c 36 check error Assertion 0 failed 错误原因 解决方案 1 检查CUDA安装 2 检查GPU驱动程序 3 检查CUDA环境变量 4 编译darknet 5 调试
  • 应用在多媒体触摸屏设备中的触摸感应芯片

    多媒体触摸屏设备是触摸液晶显示器结合现代PC机组成的具有触摸显示和计算机操作功能为一体的产品 它包括两个部分 一个是触摸液晶显示器 它具有触控的特性和显示输出的功能 另一个是PC机 也就是所说的计算机 通过两个部分整合到一起 实现了具有触摸
  • Springboot+Mybatis入门案例

    一 项目结构 1 导入依赖