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

[WEB开发] Mybatis

一. Mybatis是什么?

回顾一下三层架构:
在这里插入图片描述
Mybatis是位于Dao层(数据访问层)的框架, 用于简化JDBC开发.

注解:

  • @Mapper: 为被注解的接口创建一个实现类对象, 并将该对象交给IOC容器管理.
  • @SpringBootTest: 被注解的类中方法运行时, 启动SpringBoot项目.

二. 数据库连接池

数据库连接池是一个容器, 用来管理数据库连接.
在这里插入图片描述
数据库连接池的优势:

  • 资源复用
  • 避免连接遗漏
    • 连接遗漏指的是数据库连接被使用完了, 别的用户想要访问数据库无法再获取连接.
    • 避免连接遗漏: 某个用户连接时间过长且无操作, 就会自动断开连接.
  • 提高响应速度

数据库连接池种类:

  • hikari (追光者): 是springboot默认的数据库连接池
  • druid (德鲁伊): alibaba提供的数据库连接池

在这里插入图片描述

设置使用哪个数据库连接池:

  • 依旧是在配置文件中设置.
    在这里插入图片描述

三. 增删查改

    // 根据id查询部门
    @Select("select * from dept where id = #{id}")
    Dept selectById(Integer id);
    // 根据id删除部门
    @Delete("delete from dept where id = #{id}")
    void deleteById(Integer id);
    // 增加部门
    @Insert("insert into dept (name, create_time, update_time) values (#{name}, #{createTime}, #{updateTime})")
    void insert2(Dept dept);
    // 修改部门
    @Update("update dept set name = #{name}, update_time = #{updateTime} where id = #{id}")
    void modify(Dept dept);

3.1 @Param参数的使用

    // @Param
    @Select("select * from dept where id = #{id} and id = #{id2}")
    void selectById2(Integer id, Integer id2);
    @Select({"select * from dept where id = #{id} and id = #{id2}"})
    void selectById2(Integer var1, Integer var2);

可以看到, 字节码文件中根本不知道两个形参谁是谁, 传递参数也会出错.
此时, 加上@Param注解

    @Select({"select * from dept where id = #{id} and id = #{id2}"})
    void selectById2(@Param("id") Integer var1, @Param("id2") Integer var2);

字节码文件中就能够区分并正确传递两个参数.
注意:

  • 基于springboot官方骨架创建的springboot项目, 编译后在字节码文件中会保留形参名, 不需要加@Param注解
  • 不基于springboot官方骨架(alibaba脚手架)创建的springboot项目, 编译后在字节码文件中不会保留形参名, 视情况加@Param注解.

3.2 XML映射文件配置

Mybatis中可以通过XML配置文件来配置sql语句.
遵守的规则:

  • 同包同名
  • namespace (区分不同的Mapper接口)
  • id (区分Mapper接口中的不同方法)
  • resultType (方法返回值)
<?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.itcast.mapper.DeptMapper">
    <update id="modify">
        update dept set name = #{name}, update_time = #{updateTime} where id = #{id}
    </update>

    <select id="findById" resultType="org.itcast.pojo.Dept">
        select * from dept where id = #{id}
    </select>
</mapper>

辅助配置:

  • 没有遵守同包同名
    • 在配置文件中配置接口映射文件的位置.
    • 在这里插入图片描述
    • mapper-locations: classpath:mapper/*.xml (接口映射文件被编译后一致存放在类路径下的mapper文件中)
  • MybatisX插件
    • 在这里插入图片描述

四. SpringBoot项目配置文件

SpringBoot项目配置文件的种类:

  • properties

    • 在这里插入图片描述
  • yaml/yml(仅仅是后缀名不同)

    • 在这里插入图片描述
      可以发现yml/yaml格式的配置文件层次更清晰, 因此项目中更推荐使用yml/yaml项目配置文件

相关文章:

  • CSP历年题解
  • Android 启动流程详解:从上电到桌面的全流程解析
  • Netty源码—7.ByteBuf原理四
  • K8s证书--运维之最佳选择(K8s Certificate - the best Choice for Operation and Maintenance)
  • 主键id设计
  • 华为OD机试A卷 - 积木最远距离(C++ Java JavaScript Python )
  • 文件描述符,它在哪里存的,exec()后还存在吗
  • 【STM32】对stm32F103VET6指南者原理图详解(超详细)
  • 支付页面安全与E-Skimming防护----浅谈PCI DSS v4.0.1要求6.4.3与11.6.1的实施
  • ✨分享我在飞书多维表格中使用DeepSeek的经历✨
  • STM32F103_LL库+寄存器学习笔记05 - GPIO输入模式,捕获上升沿进入中断回调
  • 飞速(FS)InfiniBand解决方案助力领先科技公司网络升级
  • kettle插件-mysql8数据库插件
  • MySQL进阶
  • 【linux复习】——进程间通信
  • 【HarmonyOS NEXT】EventHub和Emitter的使用场景与区别
  • 基于javaweb的SpringBoot雪具商城系统设计与实现(源码+文档+部署讲解)
  • UART(通用异步收发传输器)
  • 删除排序链表中的重复元素
  • CF254B Jury Size
  • 人民日报民生观:转人工客服,怎么这么难?
  • 观察|本轮印巴冲突或促使印度空军寻求更先进战机
  • “80后”德州市接待事务中心副主任刘巍“拟进一步使用”
  • 2025年上海科技节5月17日启动,56家重点实验室和大科学设施将向公众开放
  • 牧原股份子公司与养殖户种猪买卖纠纷案一审胜诉
  • 韩国总统大选候选人登记结束,共7人参选