【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. 测试
相关推荐
夜泉_ly1 小时前
MySQL -安装与初识
数据库·mysql
qq_529835352 小时前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
月光水岸New4 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6754 小时前
数据库基础1
数据库
我爱松子鱼4 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo5 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser6 小时前
【SQL】多表查询案例
数据库·sql
Galeoto6 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)6 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231116 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql