mybits 2024/8/5

pom.xml 文件包中的一些 Maven 依赖

1.MyBatis Spring Boot Starter

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>
集成 MyBatis 和 Spring Boot。它简化了 MyBatis 在 Spring Boot 中的配置和使用。

2.Spring Boot Web Starter

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>${springbootversion}</version>
</dependency>
提供构建 Web 应用程序所需的依赖,包括 Spring MVC、嵌入式 Tomcat 服务器以及 Jackson 库用于 JSON 处理。

3.SLF4J API

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.14</version>
</dependency>
提供日志记录的 API。SLF4J 是一个简单的日志门面,允许你在运行时选择不同的日志实现。

4.MySQL Connector/J

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version>
</dependency>
MySQL 的 JDBC 驱动程序,使你的 Spring Boot 应用能够连接到 MySQL 数据库。

5.Spring Boot DevTools

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <version>2.6.6</version>
</dependency>


ORM

ORM(Object-Relational Mapping,对象关系映射)是一种用于将面向对象语言中的对象与关系数据库中的数据表相映射的技术。ORM框架通过讲将数据库表抽象成为类,将表中的数据抽象为对象,使开发者能够以面向对象的方式与数据库交互,而无需编写大量的SQL查询代码。

ORM的核心概念

实体类:每个数据库表对应一个实体类(通常被称为模型类)。表中的每一行数据对应实体类的一个实例(对象)。

属性/字段:数据库表中的列对应实体类的属性。

关系:数据库表之间的关系(如一对一,一对多,多对多)通过类与类之间的关联(如属性、集合)来表示

ORM的工作机制

ORM框架自动生成SQL语句来执行常见的数据库操作,如插入、更新、删除、和查询。开发者通过调用ORM提供的接口方法,可以方便的进行这些操作,而无需自己编写复杂的SQL语句。

ORM 的优点

  • 简化开发:减少了重复的 SQL 编写工作,使代码更简洁。
  • 面向对象编程:开发者可以使用熟悉的面向对象的方式处理数据,而不需要频繁切换到 SQL 语言的思维模式。
  • 数据库无关性:大多数 ORM 框架支持多种数据库系统,开发者可以更轻松地切换数据库类型而无需重写代码。

MyBatis

虽然 MyBatis 不是传统意义上的 ORM,但它也提供了一些对象映射功能,主要特点是灵活性高。

1.添加依赖pom.xml

2.配置数据库连接和MyBatis设置application.yml

在使用MyBatis配置数据源时,通常采用application.yml 文件来配置数据源信息。

spring:
  datasource:
    username: root
    password: 2003417
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/easydata

mybatis:
  mapper-locations: classpath:mapper/*.xml

logging:
  level:
    com.easy.dao: debug
每次换行到下一级时都要移动两个空格 ,而且冒号后面有内容的话一般要先加一个空格

1>数据源配置

spring:
  datasource:
    username: root
    password: 2003417
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/easydata

  • spring.datasource.username: 数据库的用户名,这里是 root
  • spring.datasource.password: 数据库的密码,这里是 2003417
  • spring.datasource.driver-class-name: JDBC 驱动的类名,这里是 com.mysql.cj.jdbc.Driver,适用于 MySQL 8.0 及以上版本。
  • spring.datasource.url: 数据库的连接 URL,包括数据库地址和端口(3306),以及要连接的数据库名称 easydata

2>mybatis配置

mybatis:
  mapper-locations: classpath:mapper/*.xml
mybatis.mapper-locations: 指定 MyBatis 的 mapper XML 文件的位置。这些 XML 文件包含 SQL 映射语句,通常放置在 src/main/resources/mapper 目录下。classpath:mapper/*.xml 表示扫描 resources/mapper 目录下的所有 XML 文件。

3>日志级别配置

logging:
  level:
    com.easy.dao: debug
logging.level.com.easy.dao: 设置日志级别为 debug,只会打印 com.easy.dao 包下的类的调试日志。这有助于在开发过程中追踪 MyBatis 执行的 SQL 语句和其他调试信息。

3.创建数据库表(假设已有)

4.创建实体类

bean包下创建Staff类(对应数据库中的表),里面包含私有的属性(对应数据库中的属性)和他们的get/set方法

5.创建mapper接口

创建一个接口,并在里面定义增删改的方法,使用@Mapper标注该接口类

增改方法参数列表中一般为实体类对象,删可根据主键删除,若为ID则参数列表可设为int

@Mapper 用于标记一个接口作为 MyBatis 的 Mapper 接口。Mapper 接口的方法可以映射到 SQL 语句,或使用 XML 文件定义 SQL 语句。在 Spring Boot 应用中,@Mapper 注解的接口会被自动管理,支持依赖注入。

6.创建Mapper xml 文件

定义对表的操作

  • 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"

    这一部分指定了 XML 的版本和编码,并定义了该文件遵循的 DTD(Document Type Definition),用于验证 XML 文件的结构和内容。

  • Mapper 根元素

    <mapper namespace="com.easy.dao.IDepartmentDao">

    mapper 元素是 MyBatis 的根元素,namespace 属性指定了该 Mapper 的接口全名。它帮助 MyBatis 确定这个 XML 文件与哪个接口相关联。

  • Update 操作

    <update id="editDepartment"> update department set code=#{code}, name=#{name} where id=#{id} </update>

    • id="editDepartment" 是这个 SQL 语句的标识符,接口中的方法名称应与这个 id 相匹配。
    • update department set code=#{code}, name=#{name} where id=#{id} 是实际执行的 SQL 更新语句。#{code}, #{name}, 和 #{id} 是参数占位符,会被实际传递给 SQL 语句的参数替换。
  • Insert 操作

    <insert id="addDepartment"> insert into department(code, name) value(#{code}, #{name}) </insert>

    • id="addDepartment" 是这个 SQL 语句的标识符。
    • insert into department(code, name) value(#{code}, #{name}) 是实际执行的 SQL 插入语句。#{code}#{name} 是参数占位符,用于插入新记录的字段值。
  • Delete 操作

    <delete id="delDepartment"> delete from department where id=#{id} </delete>
    
    • id="delDepartment" 是这个 SQL 语句的标识符。
    • delete from department where id=#{id} 是实际执行的 SQL 删除语句。#{id} 是参数占位符,用于指定要删除的记录的 ID。

# 和 $ 的区别

#{id} 是一个参数占位符,会被实际传递的 id 参数值替换。MyBatis 会使用 JDBC 的预处理语句来替换这些占位符。它会将参数安全地插入到 SQL 语句中,从而防止 SQL 注入攻击。

$ 用于在 MyBatis 中作为参数占位符。MyBatis 会将 $ 占位符直接替换为传入的参数值,而不会使用预处理语句。这意味着 $ 替换的部分是直接拼接到 SQL 语句中的,因此要特别小心,以防止 SQL 注入攻击。

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".
2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.

7.创建控制器

package com.easy.controller;

@RestController   //标注为一个控制器 ,可与web端交互
public class EasyControllerD {

    @Autowired  //自动注入实例
    IDepartmentDao daod;
    
    @PostMapping("department")
    public String addDepartment(Department department) {
        
        daod.addDepartment(department);
        return "cheng gong";
    }
    
    @DeleteMapping("department/{id}")
    public String delDepartment(@PathVariable int id) {
        daod.delDepartment(id);
        return "success";
    }
    @PutMapping("department")
    public String editDepartment(Department department) {
        daod.editDepartment(department);
        return "success";
    }
}


8.运行

总结:xml文件定义了数据库上的操作,接口类中定义了与数据库交互的方法,接口中的方法与xml文件中的语句通过方法名和参数匹配进行绑定,控制类处理http请求,通过注入调用接口类中的方法,这些方法没有细节,会根据xml文件中的配置来实现,因此执行响应的SQL语句。

  • HTTP 请求 → 控制类(Controller)
  • 控制类 调用 DAO 接口方法(使用注入的接口类)
  • DAO 接口方法 映射到 XML 文件中的 SQL 语句
  • MyBatis 执行 SQL 语句 → 完成 数据库操作    
  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值