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

news2025/3/3 18:08:09

文章目录

  • 一. 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=false
    username: root
    password: '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 {
    @Autowired
    private 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 {
    @Autowired
    private 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.coloradmin.cn/o/895131.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新k8s集群搭建教程

本次安装在vmware虚拟机下开启3台2核2g的Ubuntu20.04系统 master&#xff1a;192.168.192.137 node1&#xff1a;192.168.192.136 node2&#xff1a;192.168.192.138 关闭防火墙 先查看防火墙状态&#xff0c;如果是关闭就不用管 ufw status关闭selinux&#xff0c;如果没有安…

【sgDragSize】自定义拖拽修改DIV尺寸组件,适用于窗体大小调整

核心原理就是在四条边、四个顶点加上透明的div&#xff0c;给不同方向提供按下移动鼠标监听 &#xff0c;对应计算宽度高度、坐标变化 特性&#xff1a; 支持设置拖拽的最小宽度、最小高度、最大宽度、最大高度可以双击某一条边&#xff0c;最大化对应方向的尺寸&#xff1b;再…

Atlas 元数据管理

Atlas 元数据管理 1.Atlas入门 1.1概述 元数据原理和治理功能&#xff0c;用以构建数据资产的目录。对这个资产进行分类和管理&#xff0c;形成数据字典。 提供围绕数据资产的协作功能。 表和表之间的血缘依赖 字段和字段之间的血缘依赖 1.2架构图 导入和导出&#xff1…

前端如何安全的渲染HTML字符串?

在现代的Web 应用中&#xff0c;动态生成和渲染 HTML 字符串是很常见的需求。然而&#xff0c;不正确地渲染HTML字符串可能会导致安全漏洞&#xff0c;例如跨站脚本攻击&#xff08;XSS&#xff09;。为了确保应用的安全性&#xff0c;我们需要采取一些措施来在安全的环境下渲染…

速看!数据同步如何提升数据分析的准确性与效率?

在当今信息化时代&#xff0c;数据已经成为企业的核心资产。然而&#xff0c;随着数据的不断积累和业务的扩展&#xff0c;如何高效地进行数据分析成为了一个亟待解决的问题。本文将介绍一种重要的数据管理技术——数据同步&#xff0c;以及如何利用数据同步提升数据分析的准确…

【python游戏】这年头塔除了拆还能干什么?这款好玩上瘾的塔防游戏,了解一下嘛

目录标题 前言制作准备敲代码1&#xff09;游戏运行主程序2&#xff09;游戏开始界面3&#xff09;游戏进行中界面4&#xff09;游戏暂停界面5&#xff09;炮塔类 效果展示尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 炮塔防御&#xff08;Tower Defence&#xff…

小技巧:一键套用模板制作家具电子图册

​制作家具电子图册没有设计灵感怎么办&#xff1f; 可以看看小编分享的小技巧&#xff1a;一键套用模板的网站--------FLBOOK,轻轻松松制作一本别具一格的家具电子图册,操作方法非常简单 1.我们点击模板&#xff0c;在搜索框中搜索家具图册&#xff0c;选择自己喜欢的家具图册…

Vue3 setup新特性简单应用

去官网学习→组合式 API&#xff1a;setup() | Vue.js 运行示例&#xff1a; 代码&#xff1a;App.vue <template><div class"home"><img alt"Vue logo" src"../assets/logo.png"><!-- msg 组件传递数据 --><Hell…

团团代码生成器V2.0:一键生成完整的CRUD功能(重磅来袭!)

前言&#xff1a;考虑到在之前的V1.0版本只支持MySQL数据库&#xff0c;有点局限&#xff0c;因为在实际的项目开发中还会用到一个主流的Oracle数据库&#xff0c;所以我在V1.0的版本上进行了增强&#xff0c;新增了对Oracle数据库CRUD功能的生成&#xff0c;使用过程还是和V1.…

【Rust】Rust学习 第十五章智能指针

指针 &#xff08;pointer&#xff09;是一个包含内存地址的变量的通用概念。这个地址引用&#xff0c;或 “指向”&#xff08;points at&#xff09;一些其他数据。Rust 中最常见的指针是第四章介绍的 引用&#xff08;reference&#xff09;。引用以 & 符号为标志并借用…

外网远程连接Linux服务器

文章目录 视频教程1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程 转发内网穿透文章. 本次教程我们来实现如何在外公网环境下&#xff0c;SSH远程连接家里/公司的Linux CentOS服务器&#xff0c;无需公网IP&…

【推荐】深入浅出benan的生命周期

目录 1.spring 管理JavaBean的过程&#xff08;生命周期&#xff09; 2.spring的JavaBean管理中单例模式及原型&#xff08;多例&#xff09;模式 2.1 . 默认为单例&#xff0c;但是可以配置多例 2.2.举例论证 2.2.1 默认单例 2.2.2 设置多例 2.2.3单例与多例的初始化的时…

【数学】CF1242 A

Problem - 1242A - Codeforces 题意&#xff1a; 思路&#xff1a; Code&#xff1a; #include <bits/stdc.h>#define int long longusing i64 long long;constexpr int N 2e3 10; constexpr int M 2e3 10; constexpr int mod 998244353; constexpr int Inf 1e1…

Java中级部分

以下内容来源自Java 面试指南 | JavaGuide(Java面试 学习指南)和自己的学习笔记整理&#xff0c;这里我整理了自己比较感兴趣的点&#xff0c;也有助于我自己理解~ 异常 Exception 和 Error 有什么区别&#xff1f; 在 Java 中&#xff0c;所有的异常都有一个共同的祖先 jav…

【学习笔记之vue】 Cannot find module ‘node-sass‘

Cannot find module node-sass方案一&#xff08;不通&#xff09; 下载node-sass组件 >> npm install -g cnpm>>cnpm install node-sass下载时报错 方案二 使用npm下载node-sass组件 >>npm install node-sassok

Oracle字段长度不足位数补零

Oracle字段长度不足位数补零 有时候从数据库中取出的月份值是1&#xff0c;而不是01&#xff0c;该怎么办呢 SELECTLPAD( CODE_MONTH, 2, 0 ) FROMtb_cube_TY001 WHERECODE_BM_MEATYPE TY20 AND code_measure MYLX01 AND code_month <> ~ AND CODE_ENTITY 01A AND…

Linux 进程间通信——信号量

一、信号量描述 信号量是一个特殊的变量&#xff0c;一般取正数值。它的值代表允许访问的资源数目。 获取资源时&#xff0c;需要对信号量的值进行原子减一&#xff0c;该操作被称为P操作&#xff0c;当信号量值为0时&#xff0c;代表没有资源可用&#xff0c;P操作会阻塞。释…

2023一建案例100题

一、某施工单位承接了两栋住宅楼&#xff0c;总建筑面积 65000m&#xff0c;均为筱板基础(上翻梁结构)&#xff0c;地下 2层&#xff0c;地上30 层&#xff0c;地下结构连通&#xff0c;上部为两个独立单体一字设置&#xff0c;设计形式一致&#xff0c;地下室外墙南北向距离 4…

008永磁电机FOC控制:磁场定向控制不就两个变换就搞定啦

在现代工业中&#xff0c;电机广泛应用于各类设备和机械系统中。为了提高电机性能并降低能量损耗&#xff0c;电机控制技术得到了不断的发展和创新。其中&#xff0c;磁场定向控制&#xff08;Field-Oriented Control&#xff0c;简称FOC&#xff09;作为一种先进的电机控制策略…

在 IDEA 中使用 Git开发 图文教程

在 IDEA 中使用 Git开发 图文教程 一、连接远程仓库二、IDEA利用Git进行开发操作三、分支操作3.1 新建分支3.2 切换分支3.3 删除分支3.4 比较分支3.5 合并分支 四、常用快捷键 一、连接远程仓库 一、打开IDEA&#xff0c;进入目录&#xff1a;File ->New ->Project from…