MyBatis深入分析数据库交互与关系映射

 更新时间:2024年05月04日 09:32:36   作者:从零开始的-CodeNinja之路  
这篇文章主要介绍了MyBatis中的数据库交互与关系映射,MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,需要的朋友可以参考下

前言

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

什么是MyBatis

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

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

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

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

Mybatis操作数据库的步骤:

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

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)

数据准备

在自己的数据库中,创建用户表,并创建对应的实体类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;
}

写持久层代码

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自动生成测试类

在需要测试的Mapper接⼝中,右键->Generate->Test

选择要测试的方法,点击OK

书写测试代码

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操作数据库的步骤:

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

以上就是MyBatis深入分析数据库交互与关系映射的详细内容,更多关于MyBatis数据库交互的资料请关注脚本之家其它相关文章!

相关文章

  • java中实现四则运算代码

    java中实现四则运算代码

    本文给大家分享了几个java中实现四则运算的代码,有个人的也有网友的,代码写的不是很好,难免会有BUG,忘发现BUG的亲们能提醒我下,好让我改进
    2015-08-08
  • InterlliJ IDEA2020新建java web项目找不到Static Web的解决

    InterlliJ IDEA2020新建java web项目找不到Static Web的解决

    这篇文章主要介绍了InterlliJ IDEA2020新建java web项目找不到Static Web的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • spring@value注入配置文件值失败的原因分析

    spring@value注入配置文件值失败的原因分析

    这篇文章主要介绍了spring@value注入配置文件值失败的原因分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • SpringCloud Gateway的基本入门和注意点详解

    SpringCloud Gateway的基本入门和注意点详解

    这篇文章主要介绍了SpringCloud Gateway的基本入门和注意点,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Dom4j解析XML_动力节点Java学院整理

    Dom4j解析XML_动力节点Java学院整理

    这篇文章主要介绍了Dom4j解析XML,dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的,有兴趣的可以了解一下
    2017-07-07
  • Java实现递归删除菜单和目录及目录下所有文件

    Java实现递归删除菜单和目录及目录下所有文件

    这篇文章主要为大家详细介绍了Java如何实现递归删除菜单和删除目录及目录下所有文件,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下
    2025-03-03
  • 深入JAVA对象深度克隆的详解

    深入JAVA对象深度克隆的详解

    本篇文章是对JAVA对象深度克隆进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 有关ServletConfig与ServletContext的访问

    有关ServletConfig与ServletContext的访问

    下面小编就为大家带来一篇有关ServletConfig与ServletContext的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • java 面试题闰年判断详解及实例

    java 面试题闰年判断详解及实例

    这篇文章主要介绍了java面试题 闰年判断的相关资料,需要的朋友可以参考下
    2017-03-03
  • java中replaceAll替换圆括号实例代码

    java中replaceAll替换圆括号实例代码

    正则表达式的保留字符主要有:圆括号、方括号、花括号、竖线、横线、点号、加号、星号、反斜杆等等,下面这篇文章主要给大家介绍了关于java中replaceAll替换圆括号的相关资料,需要的朋友可以参考下
    2022-10-10

最新评论