当前位置: 首页 > news >正文

【JavaEE进阶】MyBatis的创建及使用

文章目录

  • 一. MyBatis简介
  • 二. MyBatis 使用
    • 1. 数据库和数据表的创建
    • 2. 创建Mybatis项目
      • 2.1 添加MyBatis框架支持
      • 2.2 设置MyBatis配置信息
    • 3. MyBatis开发流程
    • 4. MyBatis查询数据库测试
  • 三. MyBatis 流程
    • 1. MyBatis 查询数据库流程
    • 2. MyBatis 框架交互流程图

一. MyBatis简介

MyBatis是一种开源的持久层框架,它可以与Java程序一起使用,用于简化数据库操作。MyBatis提供了一个简单且灵活的方式来将Java对象映射到关系型数据库中的数据表。

MyBatis的主要目标是通过将SQL查询与Java代码的解耦来简化数据库访问,并提供了丰富的映射功能和灵活的查询选项。使用MyBatis,您可以将数据库操作定义为XML文件或注解的形式,然后根据需要执行这些操作。

总之,MyBatis是一个轻量级且功能强大的持久层框架,适用于需要灵活控制SQL和数据库访问的Java应用程序。它提供了一种简单且可定制的方式来进行数据库操作,使开发人员能够更容易地与数据库交互。
MyBatis官网

二. MyBatis 使用

MyBatis 的使用分为两部分,分别为:

  1. MyBatis开发环境的配置
  2. 使用MyBatis模式和语法操作数据库。

1. 数据库和数据表的创建

首先我们来创建一个数据库三张表(用户表,文章表,视频表):
将以下代码复制到MySQL5.7中:

-- 创建数据库
drop database if exists mycnblog;
create database mycnblog DEFAULT CHARACTER SET utf8mb4;-- 使用数据数据
use mycnblog;-- 创建表[用户表]
drop table if exists  userinfo;
create table userinfo(id int primary key auto_increment,username varchar(100) not null,password varchar(32) not null,photo varchar(500) default '',createtime timestamp default current_timestamp,updatetime timestamp default current_timestamp,`state` int default 1
) default charset 'utf8mb4';-- 创建文章表
drop table if exists  articleinfo;
create table articleinfo(id int primary key auto_increment,title varchar(100) not null,content text not null,createtime timestamp default current_timestamp,updatetime timestamp default current_timestamp,uid int not null,rcount int not null default 1,`state` int default 1
)default charset 'utf8mb4';-- 创建视频表
drop table if exists videoinfo;
create table videoinfo(vid int primary key,`title` varchar(250),`url` varchar(1000),createtime timestamp default current_timestamp,updatetime timestamp default current_timestamp,uid int
)default charset 'utf8mb4';-- 添加一个用户信息
INSERT INTO `mycnblog`.`userinfo` (`id`, `username`, `password`, `photo`, `createtime`, `updatetime`, `state`) VALUES 
(1, 'admin', 'admin', '', '2021-12-06 17:10:48', '2021-12-06 17:10:48', 1);-- 文章添加测试数据
insert into articleinfo(title,content,uid)values('Java','Java正文',1);-- 添加视频
insert into videoinfo(vid,title,url,uid) values(1,'java title','http://www.baidu.com',1);

即为创建完毕.

2. 创建Mybatis项目

添加MyBatis框架支持分为两种情况,一种情况是对自己之前的 Spring 项目进行升级,另一种情况是创建一个全新的 MyBatisSpring Boot的项目.两者的区别是创建一个全新的 MyBatis项目时直接使用依赖(下面的演示为直接使用依赖),另一个方法是使用插件来引入依赖.(此处不做介绍)

2.1 添加MyBatis框架支持

在这里插入图片描述
注意此处使用2.x.x版本的.
在这里插入图片描述
在这里插入图片描述
添加完依赖后,重新reload:
在这里插入图片描述
然后删除不使用的文件:
在这里插入图片描述

2.2 设置MyBatis配置信息

(1)设置数据库连接的相关信息在配置文件中添加以下配置:
```yml
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8&useSSL=falseusername: rootpassword: '0828'driver-class-name: com.mysql.cj.jdbc.Driver
```![在这里插入图片描述](https://img-blog.csdnimg.cn/12a6648ef79840d98301c99249965d88.png)注意说明:如果使用的`mysql-connector-java`是 `5.x` 版本之前,`driver-class-name`的参数值应设置为`com.mysql.jdbc.Driver`,如果版本大于`5.x`,`driver-class-name`的参数值应设置为`com.mysql.cj.jdbc.Driver`。(2)MyBatis xml保存路径和xml命名模式设置`MyBatis xml`保存路径,xml 文件中保存是对数据库的具体操作SQL,配置如下:
```yml#设置MyBatis保存路径mybatis:mapper-locations: classpath:mybatis/*Mapper.xml
```
(3)启动MyBatis项目:
在设置好MyBatis配置信息后,运行启动MyBatis项目,观察能否成功运行,如果项目成功运行,说明配置成功。
![在这里插入图片描述](https://img-blog.csdnimg.cn/4fa58691bfb444d984a6c900af92fc69.png)

3. MyBatis开发流程

(1)根据xml保存路径创建包

在这里插入图片描述
(2)添加实体类对象
在 Java 目录下创建一个实体类包用来存放各种实体类,其中就包含UserEntity实体类。
在这里插入图片描述

package com.example.demo.entity;import lombok.Data;import java.time.LocalDateTime;@Data
public class UserEntity {private Integer id;private String username;private String password;private String photo;private LocalDateTime createtime;private LocalDateTime updatetime;private Integer state;
}

(3)数据库持久层UserMapper接口定义代码

package com.example.demo.mapper;import com.example.demo.entity.UserEntity;
import org.apache.ibatis.annotations.Mapper;import java.util.List;@Mapper
public interface UserMapper {List<UserEntity> getAll();
}

注意说明:创建好UserMapper类后立即在类上添加@Mapper注解,该注解源自org.apache.ibatis.annotations.Mapper
@Mapper注解是MyBatis框架中的一个注解,用于标识一个Java接口或抽象类作为数据访问对象(DAO)接口。
当我们在Java接口或抽象类上添加@Mapper注解时,MyBatis会根据接口定义生成对应的实现类。这样,我们就可以在应用程序中通过调用这些接口方法来执行数据库操作。
需要注意的是,使用@Mapper注解时,需要确保接口与对应的XML映射文件名一致,并且
同名的XML映射文件可以被正确加载和解析。

(4)添加 mybatis 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">
<mapper namespace=""></mapper>

为了更好地理解上述内容,举个例子:UserMapper.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">
<mapper namespace="com.example.demo.mapper.UserMapper"><select id="getAll" resultType="com.example.demo.entity.UserEntity">select * from userinfo</select>
</mapper>

在这里插入图片描述

  • namespace属性用于指定映射器接口的完全限定名,它是与此映射器文件相关联的映射器接口的唯一标识,形式为全包名.类名
  • id属性指定了语句的唯一标识符,与接口中定义的方法名称⼀样的,表示对接口的具体实现方法。
  • resultType属性指定了查询结果的类型。在这个例子中,查询结果的类型是com.example.mybatis.entity.UserEntity

综上所述,这个示例的目的是定义了一个名为getAll的查询语句,它将查询数据库中的userinfo表,并将结果映射为com.example.mybatis.entity.UserEntity类型的对象。

通过这个映射文件,可以让MyBatis框架自动生成相应的SQL查询代码,方便在 Java 程序中调用和使用。

在这里插入图片描述
(5)添加 Service 服务层,示例具体实现代码如下:

package com.example.mybatis.service;
import com.example.mybatis.entity.UserEntity;
import com.example.mybatis.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public List<UserEntity> getAll(){return userMapper.getAll();}
}

(6)添加 Controller 控制层,示例具体实现代码如下:

package com.example.demo.controller;import com.example.demo.entity.UserEntity;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@RequestMapping("getall")public List<UserEntity> getAll(){return userService.getAll();}
}

实现代码说明:在Controller类(控制层)中注入Service(服务层),并在Controller类中调用Service类中的具体方法。

4. MyBatis查询数据库测试

(1)数据库记录信息
在这里插入图片描述
(2)浏览器地址栏输入
在这里插入图片描述
MyBatisX插件的安装:
在这里插入图片描述

三. MyBatis 流程

1. MyBatis 查询数据库流程

MyBatis 在进行查询数据库操作的执行流程主要为:

  1. 配置数据源:在MyBatis中,首先需要在配置文件中配置数据源,以便连接到数据库。通常是可以通过使用连接池或者直接配置数据库连接信息连接。
  2. 创建映射文件:MyBatis使用XML文件来定义数据库操作语句和映射关系。创建一个映射文件,它包含了数据库查询、插入、更新和删除等操作的语句,以及将结果映射到 Java对象的规则。
  3. 创建映射接口:为每个映射文件创建一个对应的 Java接口,接口中定义了与映射文件中相同的操作方法。
  4. 配置映射关系:在MyBatis的配置文件中,将映射文件和映射接口进行关联,指定它们的路径和命名空间。
  5. 注入Mapper接口:在需要使用查询功能的类中,通过依赖注入(比如@Autowired)方式注入Mapper接口的实例。
    Controller 类中注入Service 类对象,Service类中注入 Mapper 接口。
  6. 调用Mapper接口进行查询:通过注入的Mapper接口实例调用定义的查询方法,将参数传递给方法并执行查询操作。
    Controller 类(控制层)中调用 Service类(服务层),而Service类(服务层)中调用Mapper类接口(持久层)。
  7. 处理查询结果:根据查询的需求和Mapper接口方法的返回类型,对查询结果进行处理。可以返回单个对象、列表、映射结果等。
    查询结果从Mapper持久层中返回至Service,再从Service服务层中返回至Controller,最后再从Controller控制层返回至前端。

2. MyBatis 框架交互流程图

MyBatis 在整个框架中的定位,框架交互流程图:
在这里插入图片描述
注意说明:MyBatis 是一个ORM框架,ORM (Object Relational Mapping),即对象关系映射。在面向对象编程语言中,将关系型数据库中的数据与对象建立起映射关系,进而自动的完成数据与对象的互相转换。

对象关系映射主要完成两步操作,分别为将输入数据(传入对象)+ SQL 映射成原生SQL以及将结果集映射为返回对象(输出对象)。

http://www.lryc.cn/news/129428.html

相关文章:

  • 职业学院物联网实训室建设方案
  • 3 个 ChatGPT 插件您需要立即下载3 ChatGPT Extensions You need to Download Immediately
  • 屏蔽socket 实例化时,握手阶段报错信息WebSocket connection to ‘***‘ failed
  • 单发多框检测(SSD)【动手学深度学习】
  • “RFID与光伏板的完美融合:探索能源科技的新时代!“
  • 算法leetcode|71. 简化路径(rust重拳出击)
  • 网络技术Vlan技术STP(第一课)
  • SpringBoo t+ Vue 微人事 (十一)
  • 自动驾驶卡车量产-第一章-用户需求
  • Nginx 配置文件的完整指南 (一)
  • css3+js 画出爱心特效
  • 蔚来李斌卖手机:安卓系统,苹果售价,一年一发
  • 0008__浏览器层面缓存 Etag If-None-Match等详解
  • Idea 快捷键整理
  • 管理类联考——逻辑——真题篇——按知识分类——汇总篇——一、形式逻辑——假言——第一节 充分条件
  • LSTM模型
  • 抢红包小程序
  • UVA 10006 埃氏筛法+快速幂
  • C++--红黑树
  • Unity 找不到 Navigation 组件的解决
  • 【js】时间和时间戳转换、日期格式化
  • glog体验第一天(0)glog介绍和安装
  • Android 13像Settings一样获取SIM卡信息
  • Can‘t find end of central directory : is this a zip file ? at XMLHttpRequest
  • 基于SpringBoot+Thymeleaf仓库管理系统
  • ubuntu20.04磁盘满了 /dev/mapper/ubuntu--vg-ubuntu--lv 占用 100%
  • 【制作npm包4】api-extractor 学习
  • 神经网络基础-神经网络补充概念-52-正则化网络的激活函数
  • 代码随想录训练营day56| 583. 两个字符串的删除操作 72. 编辑距离
  • 神经网络基础-神经网络补充概念-55-为什么是ML策略