初识Mybatis,并创建第一个Mybatis项目(详细图文教程)

目录

前言

一、Mybatis是什么?

二、Mybatis的优点

三、创建第一个Mybatis项目

配置Mybatis开发环境

创建数据库

添加框架

 配置连接字符串和Mybatis

使用Mybatis操作数据库

测试

前言

Spring 集成了 Mybatis 框架,方便我们更加便捷的使用,但是 Mybatis 也可以单独使用,它和 Spring 没有关系。

一、Mybatis是什么?

Mybatis 是一个持久层框架,它支持自定义SQL、存储过程以及高级映射。可以通过简单的xml 或者注解来配置和映射原始类型接口和Java POJO为数据库中的记录。

  • JavaPOJO : 普通老式java对象
  • 持久层框架就是把是数据保存在硬盘上

简单来说,Mybatis 是简单完成程序和数据库交互的工具,也就是一个数据库工具,让我们更简单的操作和读取数据库。

mybatis主要做了什么?

声明接口 + 实现接口。

声明接口:就是接口用来进行方法的声明。

实现接口:xml或者注释的方式,但是mybatis中的注释比较复杂一点,最开始我们先用xml实现接口的方式。

二、Mybatis的优点

  • Mybatis是最简单的持久层框架,小巧且易学。
  • 底部集成了JDBC,与传统的JDBC项目相比,大大减少了我们的代码量。
  • 提供了xml标签,支持编写动态的SQL语句。
  • 通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
  • Mybatis相当灵活,代买写在xml文件中,大大降低了耦合度,提高了代码复用。
  • 提供了映射标签,支持对象与数据库的ORM关系字段映射。

ORM(Object Relational Mapping),即对象关系映射。在⾯向对象编程语⾔中,将关系型数据库中的数据对象建⽴起映射关系,进⽽⾃动的完成数据与对象的互相转换:

1. 将输⼊数据(即传⼊对象)+SQL 映射成原⽣ SQL

2. 将结果集映射为返回对象,即输出对象

ORM把数据库映射为对象:

  • 数据库表(table)--> 类(class)
  • 记录(record,⾏数据)--> 对象(object)
  • 字段(field) --> 对象的属性(attribute)

⼀般的 ORM 框架,会将数据库模型的每张表都映射为⼀个 Java 类。

三、创建第一个Mybatis项目

Mybatis其实就是一个工具,说是创建第一个Mybatis项目其实不准确,应该是应用Mybatis.

MyBatis 应用只分为两部分:

        配置 MyBatis 开发环境;

        使⽤ MyBatis 模式和语法操作数据库。

配置Mybatis开发环境

创建数据库

我们要使⽤ MyBatis 的⽅式来读取⽤户表中的所有⽤户,那么首先我们需要创建我们的数据库。

-- 创建数据库
drop database if exists mybatis_sql;
create database  mybatis_sql DEFAULT CHARACTER SET utf8mb4;
-- 使⽤数据数据
use  mybatis_sql;
-- 创建表[⽤户表]
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 datetime default now(),
 updatetime datetime default now(),
 `state` int default 1
) default charset 'utf8mb4';


--表中插入数据
INSERT INTO ` mybatis_sql`.`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)
;

以上语句在SQL工具上进行执行,查询表中数据结果如下即插入成功,进行下一步:

添加框架

接下来就是我们的java程序的部分的操作了,要使用Mybatis,就要给我们的项目加上Mybatis框架支持,那么有san种方式。

第一种呢就是创建一个新的项目,创建的时候选中Mybatis框架:创建一个spring项目(这里如果有问题可以看这篇文章:http://t.csdn.cn/8IJTu),在项目创建的时候加上 Mybatis 框架支持:

 第二种就是升级我们的一个原有项目,也就是在我们已有的项目上添加Mybatis框架,那么简单的操作⽅式就是使⽤EditStarters插件:

 插件的使用:在我们的配置文件界面直接右击,选择生成,选择我们刚才安装的插件,进行框架的添加选择。

 

第三种就是直接引入依赖到 pom 文件中。

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.3.1</version>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter-test</artifactId>
            <version>2.3.1</version>
            <scope>test</scope>
        </dependency>

 配置连接字符串和Mybatis

 配置连接字符串:在application.yml文件中写入一下代码:

spring:
    datasource:
        url: jdbc:mysql://localhost:3306/mybatis_sql?characterEncoding=utf8&useSSL=false
        username: root
        password: root
        driver-class-name: com.mysql.cj.jdbc.Driver

url改为自己用的:端口号和数据库名

Mybatis由两部分,一个是接口一个是实现,实现由两种方法:xml或者注释,注释比xml复

杂,在这里我们采用xml的方式实现,mybatis是基于spring实现的,那么spring要应用mybatis就要进行扫描我们的实现,我们要配置路径告诉spring要扫描哪里。

配置mybatis xml的文件路径,在刚才配置数据库的文件直接配置。

#配置 mybatis xml 的文件路径,在resources/mapper下创建所有表对的 xml 文件
mybatis:
    mapper-locations: classpath:mapper/**Mapper.xml

我们扫描路径为上述,那么要在对应目录下(classpath指的是resources)建一个文件夹mapper,里边的文件明明格式都为**Mapper.xml.

那么目前为止,Mybatis开发环境配置完成,接下来我们使用Mybatis模式和语法操作数据库。

使用Mybatis操作数据库

刚才开发环境的配置中,我们配置了xml文件进行实现,实现什么呢?

     就是实现我们的java接口,那么接口是是干什么呢?接口是用来实现方法的声明。那么现在我们要创建实现的接口。(建议:接口统一放在mapper包下,和配置中的mapper对应)

  创建mapper接口:@Mapper是Mybatis的注解

import com.example.springmybatisdemo.model.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;

@Mapper
public interface UserMapper {
    List<User> userAll();
}

接口要查询我们数据库的所有用户的信息,那么首先我们要有对象,那么我们现在创建一个对象(也就是类)。

创建user类,里边的属性和数据库中表的字段相对应。

import lombok.Data;

import java.util.Date;
@Data
public class User {
    private Integer id;
    private String username;
    private String password;
    private String photo;
    private Date createtime;
    private Date updatetime;
}

 接口写完,写实现,xml的方式实现,在我们的配置文件的mapper包下新建一个xml文件。

 数据持久层的实现,xml代码:

<?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybati
s.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.springmybatisdemo.mapper.UserMapper">
        <select id="userAll" resultType="com.example.springmybatisdemo.model.User">
                select * from userinfo;
        </select>
</mapper>

现在我们就完成了,然后我们进行测试一下:

测试

我们要自测一下是否可以成功查询,也就是单元测试。来到我们要测试的接口页面,接口UserMapper界面:

 

 来到这个界面:

会自动给我们生成测试的代码,一般我们不用改,给要测试的成员打上对勾就好了。

给生成的代码加上注解@SpringBootTest,表示要加载Springboot测试的环境,因为我们是在spring环境下进行的开发。接下来,将我们要测试的方法(类)注入进测试方法。


import com.example.springmybatisdemo.model.User;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

import static org.junit.jupiter.api.Assertions.*;
@Slf4j
@SpringBootTest
class UserMapperTest {
    @Autowired
    private UserMapper userMapper;
    @Test
    void userAll() {
        List<User> users=userMapper.userAll();
        log.info(users.toString());
    }
}

 然后直接运行,进行测试,测试成功结果如图:

若是有错,最先检查一下自己的数据库密码名称,数据库名、表名是否对应。 

这下我们 Mybatis 的第一个代码就写完了,下次再见~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/47980.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于自签名证书授权后在哪儿看

目录 firefox可以看到 chrome and edge firefox可以看到 chrome and edge 只能从打开的网站左上角进入

【数据结构】--八大排序算法【完整版】

匠心制作&#xff0c;后续有问题会加以修改的 &#xff0c;全文均是自己写的&#xff0c;几张图有参考网络 ———————————————— 目录 一、直接插入排序 二、希尔排序(直接插入排序的改良版) 三、选择排序&#xff08;直接选择排序&#xff09; 四、堆排序 …

前端实现导出excel表格(单行表头)

需求&#xff1a;实现勾选行导出为表格 一、安装插件 npm install --save file-saver xlsx运行项目报如下警告的话 运行npm install xlsx0.16.0 --save 来降低版本号&#xff08;最初我安装的版本号是0.18.16的版本&#xff09;再次运行项目就不会报如下警告了 二、新建一个ex…

SQL与NoSQL数据库选型及实际业务场景探讨

在企业系统架构设计中&#xff0c;选择合适的数据库类型是一项关键决策。本文将对比SQL和NoSQL数据库的特点&#xff0c;分析它们在数据模型、可扩展性、一致性与事务、查询复杂性与频率&#xff0c;以及性能与延迟等方面的优势和劣势。同时&#xff0c;结合轻易云数据集成平台…

系统学习Linux-MySQL用户权限管理(三)

一、用户权限管理概述 数据库用户权限管理是数据库系统中非常重要的一个方面&#xff0c;它用于控制不同用户访问和操作数据库的权限范围。数据库用户权限管理可以保护敏感数据和数据库结构&#xff0c;确保只有被授权的用户才可以操作和使用数据库&#xff0c;防止数据被修改…

Unity游戏源码分享-街机捕鱼2017版本

Unity游戏源码分享-街机捕鱼2017版本 完整的单机游戏 功能玩法&#xff0c;积分系统都已经齐全的了。 项目源码地址&#xff1a;https://download.csdn.net/download/Highning0007/88105459

个人博客系统 -- 登录页面添加图片验证码

目录 1. 功能展示 2. 前段代码 3. 后端代码 1. 功能展示 在登录页面添加验证码登录 1. 检测到没有输入验证码或者输入的验证码错误时,进行弹窗提示.并且刷新当前验证码图片 2. 点击验证码进行刷新 2. 前段代码 1. 添加验证码标签,在密码的下面,在login.html进行修改 主要…

1200*A. Cheap Travel

#include<bits/stdc.h> using namespace std; typedef long long ll; int n,m,a,b,res; int main(){cin>>n>>m>>a>>b;if(a*m<b) resa*n;else{if(n%m0) resn/m*b;else{resn/m*b;resmin(n%m*a,b);}}cout<<res;return 0; }

基于JavaSE的手机库存管理系统

1、项目背景 基于JavaSE完成如下需求&#xff1a; 功能需求&#xff1a; 1、查询库存量 2、可以修改库存中不同品牌手机的个数 3、退出系统 实现步骤&#xff1a; 1、把List当做库房 2、把手机存放在库房中 3、使用封装的方法区操作仓库中的手机 2、项目知识点 面向对象 集合…

从iOS App启动速度看如何为基础性能保驾护航 | 京东物流技术团队

1 前言 启动是App给用户的第一印象&#xff0c;一款App的启动速度&#xff0c;不单单是用户体验的事情&#xff0c;往往还决定了它能否获取更多的用户。所以到了一定阶段App的启动优化是必须要做的事情。App启动基本分为以下两种 1.1 冷启动 App 点击启动前&#xff0c;它的…

vue3 - 报错 Cannot use ‘in‘ operator to search for ‘path‘ in undefined (完美解决)

问题描述 在vue3项目中,浏览器控制台报错 Cannot use ‘in’ operator to search for ‘path’ in undefined 详细解决方案。 解决方案 在创建vue3的路由时,报了这样的错:Cannot use ‘in’ operator to search for ‘path’ in undefined,

六边形架构

六边形架构 微服务系统架构微服务定义微服务系统设计 传统分层架构六边形架构参考资料 微服务系统架构 需求描述做什么的问题&#xff0c;架构描述怎么做的问题(描述组成系统的各部件及其之间的关系) 微服务定义 下面的定义来自周志明老师的 凤凰架构 微服务是一种通过多个小型…

Linux6.17 Docker 安全及日志管理

文章目录 计算机系统5G云计算第四章 LINUX Docker 安全及日志管理一、Docker 容器与虚拟机的区别1.隔离与共享2.性能与损耗 二、Docker 存在的安全问题1.Docker 自身漏洞2.Docker 源码问题 三、Docker 架构缺陷与安全机制1.容器之间的局域网攻击2.DDoS 攻击耗尽资源3.有漏洞的系…

Redis 高可用之持久化

一、Redis 高可用 1.1 什么是高可用 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&#xff0c;除了保证提…

postgresql|数据库|启动数据库时报错:FATAL: could not map anonymous shared memory的解决

前言&#xff1a; 一个很偶然的出现的问题&#xff0c;因为我需要验证备份文件是否正确&#xff0c;因此&#xff0c;我在一台已启动了一个数据库实例的服务器上&#xff0c;依据全备的数据库文件在启动一个实例&#xff0c;当然&#xff0c;在此之前&#xff0c;已经修改了备…

LeakCanary内存泄漏检测框架分析。

一、什么叫内存泄漏、内存溢出&#xff1f; 内存溢出(out of memory)&#xff1a;是指程序在申请内存时&#xff0c;没有足够的内存空间供其使用&#xff0c;出现out of memory&#xff1b;比如申请了一个integer,但给它存了long才能存下的数&#xff0c;那就是内存溢出。 内…

IO模型、javaIO

介绍 网络通讯&#xff0c;一台计算机给另一台计算机传输数据&#xff0c;中间过程就叫做通信&#xff0c;也就是通过IO接口输入输出到另一台计算机&#xff0c;这个就叫做网络IO. 文件描述符&#xff08;File descriptor&#xff09; 是计算机科学中的一个术语&#xff0c;是…

进阶高级测试专项,Pytest自动化测试框架总结(一)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、框架简介 pyt…

ad+硬件每日学习十个知识点(9)23.7.20

文章目录 1.正点原子fpga开拓者无gui检查项目2.排针连接器A2541WR-XP-2P3.肖特基二极管反接在LDO的输出端&#xff0c;是什么用&#xff1f;4.在AD中如何实现批量元器件的移动&#xff1f;5.在PCB中&#xff0c;如何让元器件以任意角度旋转&#xff1f;6.接口设计都要做静电防护…

Kotlin 内联函数语法之let、apply、also、run、with的用法与详解

一、介绍 kotlin的语法千奇百怪&#xff0c;今天我们将介绍项目中频率使用比较高的几个内联函数。 二、什么叫内联函数&#xff1f; 内联函数 的语义很简单&#xff1a;把函数体复制粘贴到函数调用处 。使用起来也毫无困难&#xff0c;用 inline关键字修饰函数即可。 语法&a…