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

news2024/11/20 18:24:02

一、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

tinyint   在java对应   Short

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.coloradmin.cn/o/1866784.html

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

相关文章

服务器数据恢复—用raid6阵列磁盘组建raid5阵列如何恢复原raid数据?

服务器存储数据恢复环境&#xff1a; 华为OceanStor 5800存储&#xff0c;该存储中有一组由10块硬盘组建的raid6磁盘阵列&#xff0c;供企业内部使用&#xff0c;服务器安装linux操作系统EXT3文件系统&#xff0c;划分2个lun。 服务器存储故障&#xff1a; 管理员发现存储中rai…

多家国产大模型提供OpenAI API服务替代方案,谷歌将推出明星网红AI聊天机器人

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 更多资源欢迎关注 1、OpenAI终止对中国提供服务 6月25日凌晨&#xff0c;多个用户收到OpenAI的推送邮件&#xff0c;信中称&#xff0c;自今年7月9日起&#xff0c;将开始阻止来自非支持国家和地区的API&#xff08;应…

pythons工具——裁剪labelme的json不规则多边形标签保存成矩形图像

原图labelme标注 使用以下程序&#xff0c;裁剪labelme的json不规则多边形标签保存成矩形图像 import os import cv2 import math import json import numpy as np from PIL import Image, ImageDrawdef calculate_bounding_box(points):"""计算多边形的最小外…

高校心理咨询管理系统

摘 要 随着高校学生心理问题的增多&#xff0c;心理咨询服务在高校中的重要性日益凸显。然而&#xff0c;传统的心理咨询管理方式存在着诸多问题&#xff0c;如信息不透明、咨询师资源不足等。为了解决这些问题&#xff0c;本文设计并实现了一种基于Java Web的高校心理咨询管理…

Java Stream API揭秘:掌握List流操作,打造高效数据处理流程

序言 Java Stream API是Java 8中引入的一个非常重要的功能组成部分&#xff0c;它提供了一种声明式的处理数据集合的方法。它主要特点是基于函数式编程的理念&#xff0c;允许我们以更加简洁、高效的方式进行集合的处理、转换和过滤。通过Stream API&#xff0c;我们可以灵活地…

Animate软件为什么默认只能导出mov格式视频?

很多同学在学习Animate软件的时候&#xff0c;经常会有一个问题&#xff0c;就是制作好动画导出视频时&#xff0c;只能选择mov格式&#xff0c;而且导出文件特别大&#xff0c;为什么Animate软件默认只能导出mov格式的视频呢&#xff1f;这里简单说一下自己的看法。 首先&…

打破数据分析壁垒:SPSS复习必备(十)

Means过程 统计学上的定义和计算公式 定义&#xff1a;Means过程是SPSS计算各种基本描述统计量的过程&#xff0c;其实就是按照用户指定条件&#xff0c;对样本进行分组计算均数和标准差&#xff0c;如按性别计算各组的均数和标准差。 用户可以指定一个或多个变量作为分组变…

分布式系统:常见的陷阱和复杂性

分布式系统的复杂性是工程师和开发人员面临的重要挑战。复杂性往往会随着系统的发展而增加&#xff0c;因此积极主动非常重要。让我们来谈谈您可能会遇到哪些类型的复杂性以及在工作中应对它的有效策略。 分布式系统和复杂性 在开发中&#xff0c;分布式系统是相互连接并执行…

文华wh6均线交易策略多空波段止盈止损提示主图指标公式源码

文华wh6均线交易策略多空波段止盈止损提示主图指标公式源码&#xff1a; EMA120:EMA(C,120); RSV:(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100; K:SMA(RSV,3,1); D:SMA(K,3,1); J:3*K-2*D; DRAWTEXT(C>EMA120&&J<0,L,多),VALIGN0; DRAWTEXT(C<EMA…

01_02_Mybatis的配置文件与基于XML的使用

1、引入日志 在这里我们引入SLF4J的日志门面&#xff0c;使用logback的具体日志实现&#xff1b;引入相关依赖&#xff1a; <!--日志的依赖--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version&g…

基于LangChain搭建个人知识库

前言 &#x1f63a;Hello&#xff0c;大家好&#xff0c;我是GISer Liu&#xff0c;&#x1f600;&#x1f600; 一名热爱AI技术的GIS开发者&#xff1b;在上一篇文章中&#xff0c;我们学习了LLM API的申请、应用以及提示词工程&#xff1b; 在本文中&#xff0c;作者将介绍如…

观测云 VS 开源自建

观测云是一款面向全技术栈的监控观测一体化产品方案&#xff0c;具备强大而丰富的功能&#xff0c;目标是帮助最终用户提升监控观测的能力&#xff0c;化繁为简&#xff0c;轻松的构建起完整的监控观测体系。同时能够帮助整个企业的开发技术团队从统一的观测能力上获得完整的收…

机器学习辅助的乙醇浓度检测(毕设节选)

目录 1.为什么要机器学习 2. 神经网络一般组成 3.BP神经网络工作过程 4.评价指标 5.实操代码 1.为什么要用机器学习 人工分析大量的谐振模式&#xff0c;建立各种WGM的响应与未知目标之间的关系&#xff0c;是一个很大的挑战。机器学习(ML)能够自行识别全谱的全部特征。作为…

linux高级编程(进程)(1)

进程&#xff1a; 进程的含义? 进程是一个程序执行的过程&#xff0c;会去分配内存资源&#xff0c;cpu的调度 进程分类&#xff1a; 1、交互式进程 2、批处理进程 shell脚本 3、 守护进程 进程与程序的区别&#xff1a; 1&#xff09;程序是…

古文字识别笔记

前置知识 部件&#xff1a;大部分的汉字是由若干组笔画结构拼合而成的&#xff0c;这些相对独立的笔画结构称为「部件」。 部件是大于基本笔画&#xff08;例如&#xff1a;点、横、撇、捺等&#xff09;而小于或等同于 偏旁 的结构单位。 例如「测」字有三个部件&#xff1a;…

Qt开发 | Qt控件 | QTabWidget基本用法 | QListWidget应用详解 | QScrollArea应用详解

文章目录 一、QTabWidget基本用法二、QListWidget应用详解1.列表模式1.1 基本操作1.2 添加自定义item1.3 如何添加右键菜单1.4 QListWidget如何删除item 2.图标模式 三、QScrollArea应用详解 一、QTabWidget基本用法 QTabWidget 是 Qt 框架中的一个类&#xff0c;它提供了一个选…

微深节能 堆取料机动作综合检测系统 格雷母线

系统描述&#xff1a; 格雷母线高精度位移测量系统&#xff0c;包括格雷母线、天线箱、地址解码器、地址编码器四个部分组成。 格雷母线类似一把有刻度的尺子&#xff0c;沿着移动机车运行轨道方向上铺设&#xff0c;格雷母线长度可以根据工程需要长度来定制。天线箱类似指针&a…

企智汇软件:机电工程项目管理系统智能化管理,洞悉项目全貌!

在机电工程领域&#xff0c;项目管理的复杂性要求系统不仅要能够处理大量的数据和信息&#xff0c;还要能够提供实时的洞察和分析&#xff0c;以支持快速而明智的决策。企智汇机电工程项目管理系统正是为了满足这些需求而设计的&#xff0c;它通过一系列先进的功能&#xff0c;…

Vue-Ci搭建项目

项目创建 vue-cli 官方提供的一个脚手架,用于快速生成一个vue的项目模板;预先定义 好的目录结构及基础代码,就好比咱们在创建Maven项目时可以选择创建一个 骨架项目,这个骨架项目就是脚手架,我们的开发更加的快速; 主要的功能 ● 统一的目录结构 ● 本地调试 热部署 ● 单元…

教师资格证考试笔试报名流程

文章目录 前言笔试报名流程一、登录官网二、选择报考省份三、注册报名账号四、确认考试承诺五、填报个人信息六、上传个人照片七、查看个人信息八、笔试报名九、等待审核十、考试缴费最后&#xff08;必看&#xff09;附录1. 中小学教师资格考试网2. 广东省教资笔试报名通知&am…