后端之路第三站(Mybatis)——入门配置

一、Mybatis是啥?

就是一个用java来操控数据库的框架语言

之前学的datagrip或者navicat这些软件里我们操作数据库,原理是我们编写完的操作语句发送到服务器传送到数据库系统,然后数据库执行完之后再发送给服务器返回给datagrip或者navicat显示

那么Mybatis的逻辑也是一样,只不过是变成从java发送给服务器再到数据库,然后数据库返回给服务器返回给java

二、配置Mabatis项目

提示:新建Spring Initializr模块可以把【服务器 URL】换成阿里云的:http://start.aliyun.com

因为原URL是访问spring.io官网去下载安装项目,而阿里云的服务器下载安装会更快

这里下面是重复我之前在配置sprintboot项目时的步骤,可以参考我这篇文章:

后端之路第二站(正片)——SprintBoot-CSDN博客

点击【创建】(或者finish就配置完了)

(小插曲:遇到下面这种情况的同志请注意)

这特么是我脑残...创建sprint boot的模块时没有选基于【Maven】,选了特么的【Gradle】,不小心的我自己都没发现,塔玛得耗费老子一整上午找问题,记住了老铁,选Maven!!!

配置完之后,我看的黑马里的idea是老版本,所以如果是老版本配置完会有以下文件,删掉即可

那新的idea应该是像我这样,我啥也不敢删,但是这两个应该是没用的可以删

最后确认一下:你这个模块必须是在整个大项目的主目录下

然后点开模块的【src】目录下的pom.xml文件就能看到这些依赖的配置是否齐全了

三、开始尝试连接数据库

1、创建一个装Java的数据库表的目录

首先在【模块】的—>【src】—>【main】—>【java】—>【com.xxx】目录下创建目录,用来装所有的数据库表

然后在这个目录里创建一个表

但是!!!这里我这个屌鸡掰软件他麻的又给老子发塔玛得神经,右键居然不能新建class类,我真特么的服了(如下图)

还好身边有后端大神,看了一眼之后就跟我说这个项目的样子不对劲!颜sai不对!

不愧是老中医,他给我看正确的颜色应该是这样

老中医说虽然不知道为何这位“病人”病状这么奇怪,但是不要紧,一套老中医失传老手法来拯救!!

点击【文件】—>【项目结构】

然后点击【src】的【main】的【java】,点击上面的【源代码】,然后应用、确定

同理,resources也是点击【src】的【main】的【resources】,点击上面的【资源】,然后应用、确定

同理,test是点击【test】的【java】,点击上面的【测试】,然后应用、确定

大功告成,美极了,看得我都受不了了,太棒了,能右键直接新建java类简直太舒服了,好爽,快爽死了,爽啊好爽啊,不愧是后端老中医,传统的老手法直接让病人起死回生,直接让我爽喷

那么现在就直接新建一个java类,起名的时候【包名.类名】能自动创建一个包,在包目录下创建这个java类

2、创建数据库表、实体类

java里创建数据库表其实就是写一个标准【JavaBean类】,你对比数据库的的性质都知道是差不多的了,都是定义多个字段、并定义它们的数据类型,只不过java还可以写方法函数,废话不多说,先直接建一个User类

(没有java基础的自己上网查,这里不阐述)

这里只提一下:数据库中这几个数据类型

整型数:int   在java对应   Integer

字符串:varchar( )   在java对应   String

               char( )   在java对应   String

短整型数:tinyint   在java对应   Short

日期date:  在java对应   LocalDate

时间datetime:   在java对应   LocalDateTime

3、在数据库工具创建一个数据库和表先

这里不过多讲解,会的可以直接跳过,就是创建一个库、一个表,而且为了节约时间我只做可视化操作,想用代码建库建表的自己一边呆着去(另外,我这里用的是datagrip)

先创建一个数据库,就叫Mybatis吧

然后建表,就叫User表吧

有如下字段,以及数据类型

然后!!记住你这个数据库的四要素!!!为了连接数据库用的

右键数据库,看属性

第一要素:驱动类名在这,点【转到驱动程序】,然后就能看到

第二要素,url在这,原本的应该是【jdbc:mmysql://localhost:3306】,但是后面连接的时候记得在后面加上【/你的数据库名字】,这样一来就会直接连接到你的这个数据库,而不是连接一整个数据源

至于用户名还能看到,密码就没人知道了,你要是创建数据库的时候忘了......那就卸载了数据库重装吧,不然谁都不知道你的密码

4、连接数据库

现在就到连接数据库了,点到【src】的【main】的【resources】的【application.properties】

然后这又塔玛得什么鬼啊?????槽泥马的没完了

冷静片刻,点击【设置】

然后点【编辑器】的【文件编码】,英文对应【Editor】的【File Encodings】

然后把这三都换成【UTF-8】!!!

正常了!!好爽!!好舒服啊!!!爽!!!!

好,现在删掉这些狗屎,写上我们的【连接数据库4要素】:

#连接数据库的【四要素】
#这是我的,你们别找抄
#1、数据库的驱动类名
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver

#2、数据库的Url
spring.datasource.url = jdbc:mysql://localhost:3306/mybatis

#3、数据库的账户名
spring.datasource.username = r**t

#4、数据库的密码
spring.datasource.password = 1***6

这就是上面第3点要你们记住的数据库四要素

5、编写SQL语句(利用注解/XML)

首先创建一个包装操作sql语句的接口,还是直接在写接口的时候用【包名.接口名】方便

然后先写一个注解【@Mapper】,它标识了:在运行时会自动生成实现这个接口的实现对象,并将这个对象交给IOC容器管理

然后再在接口里定义一个抽象方法list(),返回值就是一个集合,作用就是用一个集合封装所有User

还得在这个方法上加一个注解:【@Select("SQL语句")】,这个注解就可以指定要执行什么sql语句

这里注意:我么们之前学java时,接口里的这种没有方法体的方法是抽象方法,要实现接口类里再次重写这个方法才可以用,但这里不是!!这里有了【@Select("SQL语句")】注解,他就是一个可以“干事”的完整方法了,它的返回值就是执行完sql语句的结果!!!可以直接调用,不用重写!!!

(各位先不用深究到底为什么,老实说我学起来也是一知半解迷迷糊糊的)

(另外,注解爆红的,再检查这几个问题:1、鼠标悬停,看看能不能导入包,比如List的包没导入     2、检查你当前是不是在spring boot的项目中   3、检查你是不是Maven项目管理下,如果2、3都不是,直接删了项目重新搭建一次试试)

import com.czm.mybatis01.table.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper //在运行时会自动生成实现这个接口的实现对象,并将这个对象交给IOC容器管理
public interface UsrMapper {
    //这就是你要执行的sql语句
    @Select("select * from user")//查询数据库User表所有信息
    public List<User> list();
    //直接在接口里定义一个抽象方法list(),返回值就是一个集合,也就是用一个集合封装所有User
}

然后再直接在【test】包里的【java】的【com.xxx...】目录下的【模块名ApplicationnTests.java】文件,运行测试爽一下!!

那么看初始代码里有一个@SpringBootTes注解,这个就是说明这里可以整合springboot的单元测试

你就理解为之前学java时你写了那么多个JavaBean实体类,就可以在这测试类public static void main(String[] args)这里运行它们的方法(只是方便各位理解)

然后在里面再用一个@Test注解就可以写方法,去运行外面那些接口、类的方法爽一下了

但是我们学java时学过,接口的方法是不能直接调用重写的,只有接口的实现类(public class 实现类 implements 接口)才能重写调用接口的抽象方法

但是我们之前写那个接口时有一个@Mapper注解,一旦有它,就会自动生成一个接口实现对象,并放到IOC容器

那就只用加一个注入依赖的注解就可以用了

这讲得什么乱七八糟的屌东西

不知道的先死去看前面spring boot的《分层解耦》里的“控制反转”和“依赖注入”的内容去,我也有写:后端之路第二站(正片)——SprintBoot之:分层解耦_后端分层-CSDN博客              

简单说就是:我这个文章的意思 “控制反转” 就是只要给一个接口实现类加上【@Component】这个注解,他就会流向IOC容器被管理

然后 “依赖注入” 就是:谁要用它就用【@Autowired】这个注解,然后就可直接创建这个接口实现类的实例对象,然后调用对象的方法......

那么【@Component】是用与接口实现类的,而我们这里【@Mapper】这个注解直接是用在接口的,都不用再写接口实现类了,直接自动生成了一个它的接口实现类

那么直接再加一个【@Autowired】注解,就可以创建这个接口实现类的实例对象,然后调用对象的方法就行了!

import com.czm.mybatis01.mapper.UsrMapper;
import com.czm.mybatis01.table.User;
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 //springboot整合单元测试的注解
class Mybatis01ApplicationTests {
    //使用@Autowired注解可以【依赖注入】,直接创建UserMapper接口的实例化对象
    //可以理解为跳过了【创建实现接口类】这一步,spring boot帮我们创建好了一个
    @Autowired
    private UsrMapper userMapper;

    @Test
    public void testUserMapper(){
        //在这里调用UserMapper接口的抽象方法:list()
        List<User> userList = userMapper.list();
        //然后把list()执行完sql语句的结果返回值循环输出,这里用的是stream流的方法
        userList.stream().forEach(user -> {
            System.out.println(user);
        });
    }
}

这里解释一下stream流,我也是今天看黑马视频第一次看到,了解了一下这还是一个蛮吊的方法

举个例子:现在有下图这么一个集合,要获得一个既姓张又是长度为3的名字集合,要先把姓张的过滤存到新集合,再过滤长度为3的到一个新集合,再输出

那么用stream流可以直接根据条件、叠加、一次性执行完三次操作

语法就是【集合.stream().方法1().方法2().方法3().方法4()......】

然后.filter(变量 -> 变量.条件()):根据条件过滤留下

.forEach(变量 -> 干啥):循环

最后!!!我们运行试一下

这里又发现了大量疯狂恐怖要人命要死人的刺眼的红色报错,几万行的报错,我都他吗的无奈了

检查这几点:

1、连接的四要素配置错了没,错一点都不行

2、表名字一样不,java里User类的成员跟数据库的user表的字段能对应上不?

3、最后啥都没问题的话!!!重要!!!我不说你到死都不会知道是为什么,不信你就耗着

去数据库的控制台执行这一个语句:

SET GLOBAL time_zone = '+00:00';

然后就正常了

你就学这个b后端吧,一学一个不吱声

下一篇讲:进阶操作数据库

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

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

相关文章

独立开发者系列(13)——示例理解面向对象与过程

专业术语晦涩难懂&#xff0c;特别是当你没有写过稍微大点的系统的时候&#xff0c;你要理解这里面的区别很难。 从最简单的早期我们学习开始&#xff0c;我们除了练习hello world掌握了入门函数之后&#xff0c;基本都再练习算法。比如水仙花数的获取&#xff0c;冒泡排序&…

phpMyAdmin | mysqli::real_connect(): (HY000/2002): No such file or directory

法一&#xff1a;第一次安装宝塔 第一次安装宝塔mysql服务是默认关闭的&#xff0c;需要手动打开&#xff0c;打开服务再次进入phpMyAdmin发现可以进入了 法二&#xff1a;第一种方法没解决用这种 出现mysqli::real_connect(): (HY000/2002): No such file or directory错误通…

Java | Leetcode Java题解之第206题反转链表

题目&#xff1a; 题解&#xff1a; class Solution {public ListNode reverseList(ListNode head) {if (head null || head.next null) {return head;}ListNode newHead reverseList(head.next);head.next.next head;head.next null;return newHead;} }

ROS2自定义接口Python实现机器人移动

1.创建机器人节点接口 cd chapt3_ws/ ros2 pkg create example_interfaces_rclpy --build-type ament_python --dependencies rclpy example_ros2_interfaces --destination-directory src --node-name example_interfaces_robot_02 --maintainer-name "Joe Chen" …

20240630 每日AI必读资讯

&#x1f4da;全美TOP 5机器学习博士发帖吐槽&#xff1a;实验室H100数量为0&#xff01; - 普林斯顿、哈佛「GPU豪门」&#xff0c;手上的H100至少三四百块&#xff0c;然而绝大多数ML博士一块H100都用不上 - 年轻的研究者们纷纷自曝自己所在学校或公司的GPU情况&#xff1a…

vue开发网站--关于window.print()调取打印

1.vue点击按钮调取打印 点击按钮&#xff1a; 调取打印该页面&#xff1a; <div click"clickDown()">下载</div>methods: {//下载-调取打印clickDown() {window.print()}, }<style>/* 点击打印的样式 */media print {.clickDown {display: no…

【测试】软件测试规程(word原件)

软件测试规程的作用在于确保软件测试活动的系统性、规范性和一致性。它明确了测试的目标、范围、方法、流程以及所需资源&#xff0c;为测试人员提供了明确的指导和操作规范。通过遵循测试规程&#xff0c;可以提高测试效率&#xff0c;减少测试遗漏和错误&#xff0c;保证软件…

K8S基础简介

用于自动部署&#xff0c;扩展和管理容器化应用程序的开源系统。 功能&#xff1a; 服务发现和负载均衡&#xff1b; 存储编排&#xff1b; 自动部署和回滚&#xff1b; 自动二进制打包&#xff1b; 自我修复&#xff1b; 密钥与配置管理&#xff1b; 1. K8S组件 主从方式架…

神经网络原理

神经网络原理是一种模拟人脑的机器学习技术&#xff0c;通过大量的神经元和层次化的连接进行信息处理和学习。 图1 神经元 神经网络由许多简单的计算单元或“神经元”组成&#xff0c;这些神经元通过连接传递信息。每个连接都有一个权重&#xff0c;用于调整传递的信号强度。这…

【Red Hat】 Red Hat 系统提示未注册订阅管理,并进行阿里yum源更新的解决方案

目录 &#x1f30a;1. 问题说明 &#x1f30a;2. 解决方案 &#x1f30d;2.1 Redhat 官网注册与订阅 &#x1f30d;2.2 Redhat 登录已订阅账号 &#x1f30d;2.3 更换 Redhat 为阿里yum源 &#x1f30d;2.4 验证 &#x1f30a;1. 问题说明 使用 yum makecache 或 yum up…

内网渗透:端口转发(SSH隧道)

SSH&#xff1a;两台设备之间进行远程登录的协议&#xff08;SSH本身就是一个隧道协议&#xff09; 远程文件传输scp命令&#xff08;scp是基于SSH的&#xff09; 拓扑&#xff1a; SSH隧道搭建的条件 1.获取到跳板机权限 2.跳板机中SSH服务启动 SSH端口转发分类&#xff1…

【工具分享】SQLmap

文章目录 工具介绍安装方式环境准备安装 sqlmap 工具介绍 sqlmap 是一个非常强大的自动化 SQL 注入工具&#xff0c;主要用于渗透测试和安全审计。它能够检测和利用 SQL 注入漏洞&#xff0c;进而访问数据库服务器。 GitHub&#xff1a;https://github.com/sqlmapproject/sql…

为什么IP地址会被列入黑名单?

您是否曾经历过网站访客数量骤减或电子邮件投递失败的困扰&#xff1f;这背后或许隐藏着一个常被忽略的原因&#xff1a;您的IP地址可能已经被列入了黑名单内。尽管您并没有进行任何违法的网络操作&#xff0c;但这个问题依然可能出现。那么&#xff0c;究竟黑名单是什么&#…

通过Python脚本实现字符画

效果 讲解&#xff1a; 用于将3D视图的帧缓冲区转换为字符画&#xff0c;并将字符画输出到文本编辑器中。 首先&#xff0c;获取当前绑定的帧缓冲区、视口信息和视图像素。 然后&#xff0c;将像素矩阵转化为字符串&#xff0c;并将字符串写入到文本编辑器中。 设置文本编辑…

【Lua】第三篇:基本变量类型介绍

文章目录 一. 变量类型介绍二. 基本知识三. 基本类型介绍1. 空类型&#xff08;nil&#xff09;2. 数值类型&#xff08;number&#xff09;3. 字符串类型&#xff08;string&#xff09;4. 布尔类型&#xff08;boolean&#xff09; 一. 变量类型介绍 Lua中一共有如下8中变量…

Nosql期末复习

mongodb基本常用命令&#xff08;只要掌握所有实验内容就没问题&#xff09; 上机必考&#xff0c;笔试试卷可能考&#xff1a; 1.1 数据库的操作 1.1.1 选择和创建数据库 &#xff08;1&#xff09;use dbname 如果数据库不存在则自动创建&#xff0c;例如&#xff0c;以下…

设计模式 - 原型模式,就该这样学!

目录 开始 为什么要引入原型模式 原型模式概述 原型模式代码实现&#xff08;浅拷贝&#xff09; 浅拷贝和深拷贝的区别 原型模式代码实现&#xff08;深拷贝&#xff09; 方式一&#xff1a;直接 copy 方式二&#xff1a;序列化和反序列化&#xff08;推荐&#xff09…

ApolloClient GraphQL 与 ReactNative

要在 React Native 应用程序中设置使用 GraphQL 的简单示例&#xff0c;您需要遵循以下步骤&#xff1a; 设置一个 React Native 项目。安装 GraphQL 必要的依赖项。创建一个基本的 GraphQL 服务器&#xff08;或使用公共 GraphQL 端点&#xff09;。从 React Native 应用中的…

window下git bash设置启动后默认路径进入自己的工程

方法一&#xff1a;更改快捷方式 方法二&#xff1a;修改~/.bashrc

c++类和对象(三)日期类

类和对象 一.拷贝构造函数定义二.拷贝构造函数特征三.const成员函数权限权限的缩小权限的缩放大 四.隐式类型转换 一.拷贝构造函数定义 拷贝构造函数&#xff1a;只有单个形参&#xff0c;该形参是对本类类型对象的引用(一般常用const修饰)&#xff0c;在用已存 在的类类型对象…