进阶SpringBoot之 Mybatis 框架

news2024/11/25 2:52:47

Maven 仓库

导入 mybatis-spring-boot-starter 的 jar 包

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

新建 Web 项目:

Mysql 驱动:

pom.xml 导入依赖:

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

application.properties:

spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

Maven 默认导入 8 以上版本的 mysql

先测试下能不能连接成功

package com.demo.springbootmybatis;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.sql.DataSource;
import java.sql.SQLException;

@SpringBootTest
class SpringbootMybatisApplicationTests {

    @Autowired
    DataSource dataSource; //数据源

    @Test
    void contextLoads() throws SQLException {

        System.out.println(dataSource.getClass());
        System.out.println(dataSource.getConnection());
    }

}

运行,数据源默认 Hikari,jdbc 连接成功

连接 Mysql 数据库

点击 Schemas 选择自己要连的数据库

右侧展示连接的内容

为了方便使用,pom.xml 导入 Lombok 依赖

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

pojo 包下创建 User 类,与 user 表字段保持一致

package com.demo.springbootmybatis.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int id;
    private String name;
    private String pwd;
}

Structure 结构:

加注解后包含有参构造、无参构造、get/set 方法、toString() 方法

mapper 包下创建 UserMapper 接口:

package com.demo.springbootmybatis.mapper;

import com.demo.springbootmybatis.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper //@Mapper注解表示这是一个mybatis的mapper类:Dao
@Repository
public interface UserMapper {
    
    //查询
    List<User> queryUserList();
    
    //根据ID查询
    User queryUserById(int id);
    
    //添加
    int addUser(User user);
    
    //修改
    int updateUser(User user);
    
    //删除
    int deleteUser(int id);
}

@Mapper 注解表示这是一个 mybatis 的 mapper 类:Dao

也可以通过扫描包的形式,在主程序上方添加注解

@MapperScan("com.demo.springbootmybatis.mapper")

application.properties 整合 mybatis:

spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

#整合mybatis
mybatis.type-aliases-package=com.demo.springbootmybatis.pojo
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml

MybatisProperties.class 源码,下述有的都能配置

    public static final String MYBATIS_PREFIX = "mybatis";
    private static final ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
    private String configLocation;
    private String[] mapperLocations;
    private String typeAliasesPackage;
    private Class<?> typeAliasesSuperType;
    private String typeHandlersPackage;
    private boolean checkConfigLocation = false;
    private ExecutorType executorType;
    private Class<? extends LanguageDriver> defaultScriptingLanguageDriver;
    private Properties configurationProperties;
    private CoreConfiguration configuration;

resources 目录下创建 mybatis 包,包下创建 mapper 包,再创建 UserMapper.xml 文件

Mybatis 入门

UserMapper.xml:

mapper namespace 改成自己的 mapper 接口

以标签的形式写 sql 语句,id 与接口名一致

<?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.demo.springbootmybatis.mapper.UserMapper">

    <select id="queryUserList" resultType="User">
        select * from user
    </select>

    <select id="queryUserById" resultType="User">
        select * from user where id = #{id}
    </select>

    <insert id="addUser" parameterType="User">
        insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
    </insert>

    <update id="updateUser" parameterType="User">
        update user set name=#{name},pwd=#{pwd} where id = #{id}
    </update>

    <delete id="deleteUser" parameterType="User">
        delete from user where id = #{id}
    </delete>

</mapper>

controller 包下创建 UserController 类:

自动装配 UserMapper,实现 CRUD

package com.demo.springbootmybatis.controller;

import com.demo.springbootmybatis.mapper.UserMapper;
import com.demo.springbootmybatis.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class UserController {

    @Autowired
    private UserMapper userMapper;

    //查询用户
    @GetMapping("/queryUserList")
    public List<User> queryUserList(){
        List<User> userList = userMapper.queryUserList();
        for(User user : userList){
            System.out.println(user);
        }
        return userList;
    }

    //添加用户
    @GetMapping("/addUser")
    public String addUser(){
        userMapper.addUser(new User(5,"张三5","123"));
        return "ok";
    }

    //修改用户
    @GetMapping("/updateUser")
    public String updateUser(){
        userMapper.updateUser(new User(5,"李四","456"));
        return "ok";
    }

    //根据ID删除用户
    @GetMapping("/deleteUser")
    public String deleteUser(){
        userMapper.deleteUser(5);
        return "ok";
    }

}

测试运行即可!(记得地址加后缀)

总结:

1. 导入包(整合包:mybatis-spring-boot-starter)

2. 配置文件

3. mybatis 配置

4. 编写 sql

5. service 层调用 dao 层

6. controller 层调用 service 层

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

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

相关文章

跨平台快递追踪系统共享

物流追踪一站式平台推荐&#xff1a;固乔快递查询助手 在快速发展的电商时代&#xff0c;物流追踪已成为商家和消费者日常不可或缺的一部分。无论是商家需要监控订单状态&#xff0c;还是消费者期待及时了解包裹动向&#xff0c;一个高效、便捷的物流追踪平台都显得尤为重要。…

多模态大模型视觉特征嵌入语言模型特征流程-(以MMLM的forward源码解读)

文章目录 前言一、多模态大模型的forward方法(llava)1、位置2、源码3、模型输入3、图像编码与文本格式输入4、大语言模型5、计算loss6、重点内容提示二、prepare_inputs_labels_for_multimodal关键函数解读1、视觉编码2、input_ids循环遍历处理3、寻找图像位置token-batch循环4…

公开课观后感:密歇根大学python for everyone

从2024年1月17日到2024年8月20日&#xff0c;终于将密歇根大学的python for everyone的python公开课跟完。站在一月份规划的时刻来看&#xff0c;比我想象中花费的时间更多&#xff0c;我当时肯定没有想到要花上整整七个月的时间才能将这个公开课的内容看完&#xff0c;毕竟这个…

【C/C++】菱形继承问题

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

编译 onigmo 库

onigmo github: https://github.com/k-takata/Onigmo 测试环境&#xff1a;Windows 我编译库时习惯于在 vs code 下 git clone 文件后&#xff0c;再执行相应的编译操作 而 vs code 提供的终端一般是 git bash 和 powershell 在编译 windows 下运行的库》.lib 和 .dll 不能直接…

Linux设置内网时间同步

背景&#xff1a;公司有三台服务器检测到同步外网的时间&#xff0c;现需要将其修改为同步公司内网自己搭建的ntp服务器 1、登录服务器检查 同步外网无疑 2、修改配置文件&#xff0c;同步内网ntp服务器时间 配置文件源内容如下&#xff1a; 修改后如下&#xff1a; [rootl…

Redis—持久化机制

Redis持久化机制 1. RDB1.1 实现方式1.2 实现原理 2. AOF2.1 实现方式2.2 AOF文件载入2.3 AOF重写2.4 重写触发 3. RDB vs AOF3.1 RDB3.2 AOF3.3 如何选择&#xff1f; 4. Redis 4.0 混合持久化 Redis的持久化机制有两种持久化机制&#xff0c;分别是 RDB 和 AOF 1. RDB Redi…

Python和MATLAB谐波生成导图

&#x1f3af;要点 绘制三次谐波生成透射功率谱、对数对数图表示半导体曲面二次谐波生成&#xff0c;分析判断材料特性谐波均值估计计算边际似然&#xff08;贝叶斯统计&#xff09;二次谐波散射分析胶体染料分子结构交流电谐波波形傅立叶分析分析旋转各向异性谐波高次谐波非线…

TMGM:7月日本贸易收支可能受到显著走强的日元影响

经济学家和市场参与者预计今年将再次加息美联储可能助推美元/日元的看跌延续 7月日本贸易平衡可能受到显著走强的日元影响7月日本的贸易平衡比预期更差&#xff0c;但赤字大约是5月的一半&#xff0c;约为1月的三分之一。7月进口量增长超出预期&#xff0c;而较强的日元可能影…

模型 闭环原理

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。反馈驱动&#xff0c;持续循环&#xff0c;缺陷亦被放大。 1 闭环原理的应用 1.1 闭环原理解读 AI自我训练&#xff0c;从人工智能变成人工智障 这里主要使用闭环原理来解释 AI 自我训练导致的问题。…

基于STM32F103的FreeRTOS系列(十一)·信号量·二值信号量与计数信号量详细使用以及移植教程

目录 1. 信号量简介 1.1 同步和互斥 1.1.1 同步 1.1.2 互斥 1.1.3 总结 1.2 分类 1.2.1 二值信号量 1.2.2 计数信号量 1.2.3 互斥信号量 1.2.4 递归信号量 2. 信号量控制块 3. 常用信号量API函数 3.1 创建信号量函数 3.1.1 创建二值信号量 xSemap…

实验七:独立按键实验

硬件电路图和题目; LED1-LD8是 P2口8个管脚 mian.c #include<reg52.h>sbit But1=P3^1 ; sbit But2=P3^0 ; sbit But3=P3^2 ; sbit But4=P3^3 ;sbit LED1 =P2^0 ; sbit LED2 =P2^1 ; sbit LED3 =P2^2 ; sbit LED4 =P2^3 ;#define PRESS_1 1 #define PRESS_…

数据库多表设计:深入理解一对多、一对一、多对多关系 【后端 12】

数据库多表设计&#xff1a;深入理解一对多、一对一、多对多关系 在数据库设计中&#xff0c;表之间的关系决定了如何组织和存储数据。常见的表关系包括一对多、一对一和多对多。在不同的业务场景下&#xff0c;我们会选择不同的关系模式进行数据库设计。本文将通过具体案例介绍…

linux Qt QkeyEvent及驱动键盘按键捕获

基于正点原子 QT中有专门的类处理键盘事件的类QKeyEvent 1.include “QKeyEvent” 查看它的说明中的描述 也就是说接受按键事件在keyPressEvent和keyReleaseEvent这两个函数&#xff0c;继续查看 重构这个函数 查看输入的QKeyEvent类&#xff0c;发现有一个方法key返回哪一个按…

MinerU pdf文档解析markdown格式、内容提取

参考&#xff1a; https://github.com/opendatalab/MinerU/blob/master/README_zh-CN.md demo在线网址&#xff1a; https://opendatalab.com/OpenSourceTools/Extractor/PDF/detail

Robot Operating System——创建动态链接文件项目的步骤

大纲 初始化环境创建Package代码添加依赖&#xff08;package.xml&#xff09;修改编译描述find_package寻找依赖库指定代码路径和编译类型&#xff08;动态库&#xff09;设置头文件路径链接依赖的库 编译测试参考资料 在 《Robot Operating System——创建可执行文件项目的步…

大数据-93 Spark 集群 Spark SQL 概述 基本概念 SparkSQL对比 架构 抽象

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

VMware虚拟机nat无法联通主机

VMware在nat模式下主机无法ping通虚拟机 原因&#xff1a; 虚拟机和对应的网卡不在一个网段 虚拟机开启了防火墙 解决方法: 首先判断虚拟机的网络ip是否和网卡在一个网段上 判断虚拟机使用的网卡 nat模式在VMware虚拟机中一般只有一个对应的网卡 如图笔者的nat网卡为VM…

基于机器学习的二手房房价数据分析与价格预测模型

有需要本项目的可以私信博主&#xff0c;提供远程部署讲解 本研究聚焦重庆二手房市场&#xff0c;通过创新的数据采集和分析方法&#xff0c;深入探讨影响房价的关键因素&#xff0c;并开发了预测模型。 我们首先利用Python编写的爬虫程序&#xff0c;巧妙规避了链家网站的反…

ClickHouse实时探索与实践 京东云

1 前言 京喜达技术部在社区团购场景下采用JDQFlinkElasticsearch架构来打造实时数据报表。随着业务的发展 Elasticsearch开始暴露出一些弊端&#xff0c;不适合大批量的数据查询&#xff0c;高频次深度分页导出导致ES宕机、不能精确去重统计&#xff0c;多个字段聚合计算时性能…