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


💓 博客主页:从零开始的-CodeNinja之路

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

🎉欢迎大家点赞👍评论📝收藏⭐文章

目录

  • 前言
    • 什么是MyBatis?
    • [一. MyBatis准备工作(创建工程、数据库表准备、实体类)](#一. MyBatis准备工作(创建工程、数据库表准备、实体类))
    • [二. 配置数据库](#二. 配置数据库)
    • [三. 编写SQL语句(注解/XML)](#三. 编写SQL语句(注解/XML))
        • [3.1 数据准备](#3.1 数据准备)
        • [3.2 写持久层代码](#3.2 写持久层代码)
    • [四. 测试](#四. 测试)
  • 总结

前言

在应用分层学习时,我们了解到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即可,手写极其容易出错)

cpp 复制代码
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⽂件,配置内容如下:

cpp 复制代码
#驱动类名称
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即可,手写太过麻烦)

cpp 复制代码
-- 创建数据库
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的变量来接收,前面我们已经导入了驼峰自动转换,所以不必担心在数据库交互时的连接问题

cpp 复制代码
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

cpp 复制代码
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. 书写测试代码
cpp 复制代码
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. 测试
相关推荐
广州智造4 小时前
OptiStruct实例:3D实体转子分析
数据库·人工智能·算法·机器学习·数学建模·3d·性能优化
技术宝哥7 小时前
Redis(2):Redis + Lua为什么可以实现原子性
数据库·redis·lua
学地理的小胖砸8 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
dddaidai1238 小时前
Redis解析
数据库·redis·缓存
数据库幼崽9 小时前
MySQL 8.0 OCP 1Z0-908 121-130题
数据库·mysql·ocp
dkmilk9 小时前
Tomcat发布websocket
java·websocket·tomcat
Amctwd9 小时前
【SQL】如何在 SQL 中统计结构化字符串的特征频率
数据库·sql
betazhou9 小时前
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
linux·数据库·mysql·oracle·ogg
lyrhhhhhhhh10 小时前
Spring 框架 JDBC 模板技术详解
java·数据库·spring
喝醉的小喵11 小时前
【mysql】并发 Insert 的死锁问题 第二弹
数据库·后端·mysql·死锁