[WEB开发] Mybatis

一. Mybatis是什么?

回顾一下三层架构:

Mybatis是位于Dao层(数据访问层)的框架, 用于简化JDBC开发.

注解:

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

二. 数据库连接池

数据库连接池是一个容器, 用来管理数据库连接.

数据库连接池的优势:

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

数据库连接池种类:

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

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

  • 依旧是在配置文件中设置.

三. 增删查改

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

3.1 @Param参数的使用

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

可以看到, 字节码文件中根本不知道两个形参谁是谁, 传递参数也会出错.

此时, 加上@Param注解

java 复制代码
    @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 (方法返回值)
java 复制代码
<?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项目配置文件
相关推荐
lichenyang453几秒前
从 Express 老项目到 NestJS + Docker:一次车辆管理系统的渐进式重构
前端
SimonKing1 小时前
艹,维护AI写的代码,我心态崩了......
java·后端·程序员
Momo__1 小时前
VueUse createReusableTemplate —— 单文件组件内的模板复用神器
前端·vue.js
用户298698530141 小时前
Java Word 文档样式进阶:段落与文本背景色设置完全指南
java·后端
程序员小富1 小时前
我开源了一个开发者专属的智能 JSON 工具,得到了媳妇高度认可
前端·vue.js·后端
小小小小宇1 小时前
程序员如何给 LLM 装工具以及看懂推理过程
前端
写代码的皮筏艇1 小时前
React中的forwardRef
前端·react.js·面试
槑有老呆1 小时前
花三个月工资请了个 AI 程序员,结果它连青岛啤酒股价都查不了
前端
风骏时光牛马2 小时前
Verilog开发常见问题汇总解析
前端
子兮曰2 小时前
AI Coding Method Map:一张图看懂 AI 编程的完整链路
前端·人工智能·后端