【MyBatis】初步解析MyBatis:实现数据库交互与关系映射的全面指南

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【MyBatis】初步解析MyBatis:实现数据库交互与关系映射的全面指南

前言

在应用分层学习时,我们了解到web应用程序⼀般分为三层,即:Controller、Service、Dao.之前的案例中,请求流程如下:浏览器发起请求,先请求Controller,Controller接收到请求之后,调用Service进行业务逻辑处理,Service再调用Dao,真实的数据从数据库中是读取.


什么是MyBatis?

MyBatis是⼀款优秀的持久层框架,用于简化JDBC的开发。

在上面我们提到⼀个词:持久层

持久层:指的就是持久化操作的层,通常指数据访问层(dao),是用来操作数据库的.

简单来说:MyBatis是更简单完成程序和数据库交互的框架,也就是更简单的操作和读取数据库工具

Mybatis操作数据库的步骤

  1. 准备工作(创建springboot工程、数据库表准备、实体类
  2. 引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)
  3. 编写SQL语句(注解/XML)
  4. 测试


一. MyBatis准备工作(创建工程、数据库表准备、实体类)

创建springboot工程,并导入mybatis的起步依赖、mysql的驱动包

Mybatis是⼀个持久层框架,具体的数据存储和数据操作还是在MySQL中操作的,所以需要添加MySQL驱动

项目工程创建完成后,项目管理器会自动在pom.xml⽂件中,导入Mybatis依赖和MySQL驱动依赖


二. 配置数据库

Mybatis中要连接数据库,需要数据库相关参数配置

  • MySQL驱动类
  • 登录名
  • 密码
  • 数据库连接字符串

如果是application.yml⽂件,配置内容如下:(一定要注意空格和对齐,没对齐就报错,直接进行Copy即可,手写极其容易出错)

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncoding=utf8&useSSL=false
    username: root
    password: 232122
    driver-class-name: com.mysql.cj.jdbc.Driver
  mvc:
    favicon:
      enable: false
  profiles:  
    active: dev
mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
logging:
  file:
    name: logs/springboot.log
  logback:
    rollingpolicy:
      max-file-size: 1KB
      file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
  level:
    com:
      example:
        demo: debug

如果是application.properties⽂件,配置内容如下:

#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=root


三. 编写SQL语句(注解/XML)

3.1 数据准备

在自己的数据库中,创建用户表,并创建对应的实体类User

代码如下:(直接进行Copy即可,手写太过麻烦)

-- 创建数据库
DROP DATABASE IF EXISTS mybatis_test;
CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4;
-- 使用数据数据
USE mybatis_test;
-- 创建表[用户表]
DROP TABLE IF EXISTS userinfo;
CREATE TABLE `userinfo` (
`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
`username` VARCHAR ( 127 ) NOT NULL,
`password` VARCHAR ( 127 ) NOT NULL,
`age` TINYINT ( 4 ) NOT NULL,
`gender` TINYINT ( 4 ) DEFAULT '0' COMMENT '1-男 2-⼥ 0-默认',
`phone` VARCHAR ( 15 ) DEFAULT NULL,
`delete_flag` TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-删除',
`create_time` DATETIME DEFAULT now(),
`update_time` DATETIME DEFAULT now(),
PRIMARY KEY ( `id` )
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;
-- 添加用户信息
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'admin', 'admin', 18, 1, '18612340001' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'zhangsan', 'zhangsan', 18, 1, '18612340002' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'lisi', 'lisi', 18, 1, '18612340003' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'wangwu', 'wangwu', 18, 1, '18612340004' );

创建对应的实体类UserInfo,实体类的属性名与表中的字段名⼀⼀对应

例如:数据库的字段名是user_name,在idea中我们就要创建userName的变量来接收,前面我们已经导入了驼峰自动转换,所以不必担心在数据库交互时的连接问题

import lombok.Data;
import java.util.Date;
@Data
public class UserInfo {
  private Integer id;
  private String username;
  private String password;
  private Integer age;
  private Integer gender;
  private String phone;
  private Integer deleteFlag;
  private Date createTime;
  private Date updateTime;
}
3.2 写持久层代码

Mybatis的持久层接⼝规范⼀般都叫XxxMapper

@Mapper注解:表示是MyBatis中的Mapper接⼝

  • 程序运行时,框架会自动生成接⼝的实现类对象(代理对象),并给交Spring的IOC容器管理
  • @Select注解:代表的就是select查询,也就是注解对应方法的具体实现内容.

在上面的测试中,我们需要创建持久层接⼝UserInfoMapper

import com.example.demo.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface UserInfoMapper {
  //查询所有用户
  @Select("select username, `password`, age, gender, phone from userinfo")
  public List<UserInfo> queryAllUser();
}

上述代码中我是使用了一个xml的方式(就是加注解)来操作数据库的


四. 测试

使用Idea自动生成测试类

  1. 在需要测试的Mapper接⼝中,右键->Generate->Test
  2. 选择要测试的方法,点击OK
  3. 书写测试代码
import com.example.demo.model.UserInfo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest//注意,此处的SpringBootTest必须填上,它是为了引入前面所写代码引入的注解
class UserInfoMapperTest {
  @Autowired
  private UserInfoMapper userInfoMapper;
  
  @Test
  void queryAllUser() {
    List<UserInfo> userInfoList = userInfoMapper.queryAllUser();
    System.out.println(userInfoList);
  }
}


总结

Mybatis操作数据库的步骤:

  1. 准备工作(创建springboot工程、数据库表准备、实体类)
  2. 引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)
  3. 编写SQL语句(注解/XML)
  4. 测试
相关文章
|
22天前
|
存储 缓存 自然语言处理
评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡
评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡
48 8
评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡
|
15天前
|
存储 关系型数据库 数据库
高性能云盘:一文解析RDS数据库存储架构升级
性能、成本、弹性,是客户实际使用数据库过程中关注的三个重要方面。RDS业界率先推出的高性能云盘(原通用云盘),是PaaS层和IaaS层的深度融合的技术最佳实践,通过使用不同的存储介质,为客户提供同时满足低成本、低延迟、高持久性的体验。
|
2月前
|
SQL 存储 Java
Mybatis源码解析:详述初始化过程
以上就是MyBatis的初始化过程,这个过程主要包括SqlSessionFactory的创建、配置文件的解析和加载、映射文件的加载、SqlSession的创建、SQL的执行和SqlSession的关闭。这个过程涉及到了MyBatis的核心类和接口,包括SqlSessionFactory、SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、Configuration、SqlSession和Executor等。通过这个过程,我们可以看出MyBatis的灵活性和强大性,它可以很好地支持定制化SQL、存储过程以及高级映射,同时也避免了几
69 20
|
3月前
|
Java 关系型数据库 数据库连接
Javaweb之Mybatis入门程序的详细解析
本文详细介绍了一个MyBatis入门程序的创建过程,从环境准备、Maven项目创建、MyBatis配置、实体类和Mapper接口的定义,到工具类和测试类的编写。通过这个示例,读者可以了解MyBatis的基本使用方法,并在实际项目中应用这些知识。
111 11
|
3月前
|
Oracle 关系型数据库 Java
|
5月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
212 2
|
6月前
|
存储 关系型数据库 MySQL
double ,FLOAT还是double(m,n)--深入解析MySQL数据库中双精度浮点数的使用
本文探讨了在MySQL中使用`float`和`double`时指定精度和刻度的影响。对于`float`,指定精度会影响存储大小:0-23位使用4字节单精度存储,24-53位使用8字节双精度存储。而对于`double`,指定精度和刻度对存储空间没有影响,但可以限制数值的输入范围,提高数据的规范性和业务意义。从性能角度看,`float`和`double`的区别不大,但在存储空间和数据输入方面,指定精度和刻度有助于优化和约束。
1063 5
|
7月前
|
SQL 存储 Oracle
南大通用GBase 8s数据库游标变量解析:提升数据库操作效率
南大通用GBase 8s 数据库游标变量解析:提升数据库操作效率
|
3月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
77 0
|
8月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
317 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。

推荐镜像

更多
  • DNS