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

news2024/11/28 22:37:54

目录

前言

一、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 的第一个代码就写完了,下次再见~

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

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

相关文章

机器学习算法基础-覃秉丰 笔记版

文章目录 笔记回归sklearn-LASSOsklearn-一元线性回归sklearn-多元线性回归sklearn-岭回归sklearn-弹性网ElasticNetsklearn-逻辑回归sklearn-非线性逻辑回归标准方程法-岭回归梯度下降法-一元线性回归梯度下降法-多元线性回归梯度下降法-逻辑回归梯度下降法-非线性逻辑回归线性…

在kaggle中用GPU训练模型

文章目录 导入文件数据对于文件目录的访问对于文件的下载对GPU的使用 导入文件数据 参考文章&#xff1a; 使用kaggle GPU跑自己的模型 创建你自己的文件数据 对于数据文件创建notebook进行处理 对于文件目录的访问 ①传入的数据文件放在&#xff1a;/kaggle/input/ 文件…

Form Generator 扩展子表单组件之表单校验(超详细)

一、form-generator是什么?✨ ⭐️ 🌟 form-generator的作者是这样介绍的:Element UI表单设计及代码生成器,可将生成的代码直接运行在基于Element的vue项目中;也可导出JSON表单,使用配套的解析器将JSON解析成真实的表单。 但目前它提供的组件并不能满足我们在项目中的…

zabbix通过JMX监控tomcat运行情况

第三阶段基础 时 间&#xff1a;2023年7月20日 参加人&#xff1a;全班人员 内 容&#xff1a; zabbix通过JMX监控tomcat 目录 zabbix通过JMX监控tomcat 一、配置java网关 二、修改zabbix服务端配置文件 三、安装tomcat 四、Zabbix-web端配置 zabbix通过JMX监控tomc…

1.react useState使用与常见问题

文章目录 0. 取消批处理合并更新, render 2次1. 合并更新,setCount(异步更新) 3次相当于1次, count值为12. 如何取消批处理合并,让值累加?,改为回调函数写法,内部会依次执行函数, 执行3次 count值为33. 异步更新,获取异步更新的值?useEffect4.利用扩展运算符的形式来解决对象…

基于sklearn计算precision、recall等分类指标

文章目录 一、分类指标函数1.1 precision_score函数1.2 recall_score函数1.3 accuracy_score函数1.4 f1_score函数1.5 precision_recall_curve函数1.6 roc_curve函数1.7 roc_auc_score函数1.8 classification_report函数 二、二分类任务三、多分类任务3.1 Macro Average&#x…

什么是SQL和NoSQL?

目录 认识NoSQL 关系型数据库 非关系型数据库 关系型数据库与非关系型数据库之间的对比 认识NoSQL SQL&#xff08;Structured Query Language&#xff09;是一种用于管理关系型数据库的语言。关系型数据库以表格的形式存储数据&#xff0c;表格由行和列组成。SQL语言提供了…

Spring MVC -- 获取参数(普通对象+JSON对象+URL地址参数+文件+Cookie/Session/Header)

目录 1.获取参数 1.1获取单个参数 1.2获取多个参数 传参注意事项&#xff1a; 2.获取对象 3.后端参数重命名RequestParam 4.获取JSON对象RequestBody 5.从 URL 地址中获取参数 PathVariable 6.上传文件 RequestPart 7.获取Cookie/Session/Header 7.1 获取 Request 和…

uniapp开发app获取当前位置的经纬度

查阅了大量的帖子&#xff0c;发现基本上都不能用&#xff0c;后来发现需要配置一下manifest.json才可以&#xff0c;话不多说上代码 真机运行打印出来的经纬度&#xff1a; 一、配置文件 检查一下manifest.json有没有下面的代码&#xff0c;没有的话就加上 { "permiss…

力扣算法 704 35 34 69 367二分查找

704.二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 二分查找法 class Solution { public:int search(vecto…

Centos安装GitLab教程

相关网站 官网安装文档可以按照官方文档去安装&#xff0c;但安装过程中可能会出错。所以最好按照本文章的流程去安装&#xff0c;我是边安装边写的文章。 准备工作 在vmware上安装centos&#xff0c;这里要注意下&#xff0c;gitlab比较占用内存&#xff0c;因此要分配至少…

vue 3.0 下载本地pdf文件

使用a标签,把pdf文件放到public文件夹下面 <el-form label-width"160px"> <el-form-item label"使用手册"> <div class"form-item-static"> <a href"/使用手册.pdf" target"_blank" class"link&q…

轻量级Firefox Send替代方案Gokapi

想不到一个域名的变动会影响这么大&#xff0c;访问量出现断崖式下跌。由此可见&#xff0c;平时的访问应该只是一些 RSS 的访问而已。 上面是 Pageviews&#xff0c;下面是 Uniques 今天略有回升 难怪那些大公司要花钱买域名了&#xff0c;不过老苏是个佛系的人&#xff0c;一…

【pom.xml文件】maven中scope标签和optional标签

文章目录 前言一. scope的类型总览二. 详解1.compile&#xff08;默认选项&#xff09;2. test3. runtime4.privided5. system6. import 三.optional 前言 一. scope的类型总览 设置依赖范围 可以对引入的资源进行设置&#xff0c;设置其生效的范围。生效范围主要有以下&#…

mac如何提取视频中的音频?

mac如何提取视频中的音频&#xff1f;我们经常在平时工作的时候&#xff0c;需要将一个视频里面的音频单独提取出来另做他用&#xff0c;例如很多视频自媒体博主就经常使用这种方法来储备音频素材&#xff0c;这个操作在Windows上面比较容易实现&#xff0c;毕竟有相当多的软件…

RT-Thread qemu mps2-an385 bsp 移植制作 :系统运行篇

前言 前面已经让 RT-Thread 进入了 entry 入口函数&#xff0c;并且 调整 链接脚本&#xff0c;自动初始化与 MSH shell 的符号已经预留&#xff0c; 进入了 RT-Thread 的初始化流程 接下来&#xff1a;从 内存管理、系统tick 定时器、适配串口 uart 驱动三个模块入手&#xf…

Vue-组件高级(下)

一、目标 能够知道如何使用ref引用DOM和组件实例能够知道$nextTick的调用时机能够说出keep-alive元素的作用能够掌握插槽的基本用法能够知道如何自定义指令 二、目录 ref引用动态组件插槽自定义指令Table案例 ref引用 1.什么是ref引用 ref用来辅助开发者在不依赖于jQuery的…

基于Android的自助导游系统的设计与实现(论文+源码)_kaic

摘 要 随着人们的生活水平的提高&#xff0c;外出旅游已经成为人们放松休闲的主要活动之 一。传统的旅游方式都是团队组织&#xff0c;这在很大程度上制约了游客游玩的自主性。 本文充分利用无线互联网技术的优点&#xff0c;以智能手机作为移动终端&#xff0c;设计一款自助 …

react实现路由跳转动画

下载插件 npm i react-transition-group 配置路由 import { createBrowserRouter as ReactRouter,Navigate } from "react-router-dom";import App from ../App.js import Login from "../view/login.js"; import Home from "../home.js"; co…

Django笔记之in查询及date日期相关过滤操作

这一篇介绍关于范围&#xff0c;日期的筛选 inrangedateyearweekweekdayquarterhour 1、in in 对应于 MySQL 中的 in 操作&#xff0c;可以接受数组、元组等类型数据作为参数&#xff1a; Blog.objects.filter(id__in[1,2,3])对应的 SQL 是&#xff1a; select * from blo…