后端之路第三站(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

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帮我们创建好了一个@Autowiredprivate UsrMapper userMapper;@Testpublic 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.mzph.cn/diannao/35818.shtml

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

相关文章

GPT-5:AI的博士时代与我们的未来

目录 引言第一部分&#xff1a;GPT-5技术突破预测1. NLP技术的革新1.1 算法进步对理解力提升的影响1.2 技术突破推动行业发展 2. 行业推动力2.1 教育行业的变革2.2 医疗行业的创新2.3 法律行业的效率提升 第二部分&#xff1a;智能系统与人类的协作1. 辅助决策的角色1.1 决策支…

游戏AI的创造思路-技术基础-sigmoid函数详解

在前面的机器学习和深度学习的内容中&#xff0c;大量出现了sigmoid函数&#xff0c;所以本篇为大家介绍下sigmoid函数&#xff0c;希望对大家理解前面的算法和后面的Transformer有所帮助 目录 3.8. sigmoid函数 3.8.1. 定义 3.8.2. 性质 3.8.3. 应用 3.8.4. 缺点 3.8.5.…

Flutter实现页面间传参

带参跳转 步骤 在router中配置这个路由需要携带的参数,这里的参数是 arguments,注意要用花括号包裹参数名称 在相应组件中实现带参构造函数 在state类中可以直接使用${widget.arguments}来访问到传递的参数 在其他页面中使用Navigator.pushNamed()带参跳转

2024年最新通信安全员考试题库

61.架设架空光缆&#xff0c;可使用吊板作业的情况是&#xff08;&#xff09;。 A.在2.2/7规格的电杆与墙壁之间的吊线上&#xff0c;吊线高度5m B.在2.2/7规格的墙壁与墙壁之间的吊线上&#xff0c;吊线高度6m C.在2.2/7规格的电杆与电杆之间的吊线上&#xff0c;吊线高度…

[leetcode]24-game

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:static constexpr int TARGET 24;static constexpr double EPSILON 1e-6;static constexpr int ADD 0, MULTIPLY 1, SUBTRACT 2, DIVIDE 3;bool judgePoint24(vector<int> &nums) {vector&l…

【C++LeetCode】【热题100】三数之和【中等】-不同效率的题解【6】

题目&#xff1a; 暴力方法&#xff1a; class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> res;std::unordered_set<std::string> uniqueValues;//保证结果唯一for(int i0;i<n…

工商业储能柜用的Acrel-2000ES储能能量管理系统-安科瑞 蒋静

概述 Acrel-2000ES储能能量管理系统&#xff0c;专门针对工商业储能柜、储能集装箱研发的一款储能EMS&#xff0c;具有完善的储能监控与管理功能,涵盖了储能系统设备(PCS、BMS、电表、消防、空调等)的详细信息&#xff0c;实现了数据采集、数据处理、数据存储、数据查询与分析…

PHP米表域名出售管理源码带后台

源码介绍 html5米表源码PHP域名销售程序安装方法&#xff1a; 本站已测试,各项功能正常,功能易用,不复杂,非常适合个人米表使用 1、所有文件传至网站目录 2、浏览器执行http://你的访问网址/install 3、输入mysql帐号及密码信息&#xff0c;提交安装 源码截图 源码下载 …

MySQL程序使用的选项文件

MySQL程序使用的选项文件如下&#xff1a; 显示帮助消息并退出。 在具有多个网络接口的计算机上&#xff0c;使用此选项可以选择用于连接MySQL服务器的接口。 安装字符集的目录。 如果可能&#xff0c;压缩客户端和服务器之间发送的所有信息。 从MySQL 8.0.18开始&#xff0c;…

GPOPS-II教程(3): 航天器最优控制问题

文章目录 问题描述GPOPS代码main functioncontinuous functionendpoint function完整代码代码仿真结果 最后 问题描述 例子出自论文 Direct solution of nonlinear optimal control problems using quasilinearization and Chebyshev polynomials&#xff08;DOI&#xff1a;1…

新手选择代理IP时这几点误区一定要避开!

在选择代理IP时&#xff0c;许多用户可能会因为对代理IP的认识不足或受到一些误导&#xff0c;而陷入一些常见的误区。这些误区不仅可能导致用户无法达到预期的效果&#xff0c;还可能带来一些不必要的风险。下面&#xff0c;IPIDEA代理IP就与大家一同分析在选择代理IP时需要避…

Retrofit类型安全的HTTP客户端库(json)

简介 Retrofit是Square公司开发的一个类型安全的HTTP客户端库&#xff0c;用于Android和Java平台&#xff0c;它使得与Web服务的交互变得更加简单快捷。Retrofit将HTTP API转换成Java接口&#xff0c;让你可以用更简洁的代码形式调用RESTful API&#xff0c;Android网络编程重点…

在前端开发过程中如果函数参数很多,该如何精简

1. 在前端开发过程中如果函数参数很多&#xff0c;该如何精简 1.1. 对象参数&#xff08;对象字面量&#xff09;&#xff1a;1.2. 默认参数和解构赋值&#xff1a;1.3. 使用类或构造函数&#xff1a;1.4. 利用闭包或者高阶函数&#xff1a;1.5. 利用ES6的扩展运算符&#xff1…

Nuxt3 的生命周期和钩子函数(二)

title: Nuxt3 的生命周期和钩子函数&#xff08;二&#xff09; date: 2024/6/26 updated: 2024/6/26 author: cmdragon excerpt: 摘要&#xff1a;本文深入介绍了Nuxt.js框架中几个关键的生命周期钩子函数&#xff0c;包括app:redirected&#xff08;SSR环境下重定向前触发…

20240626让飞凌的OK3588-C开发板在相机使用1080p60分辨率下预览

20240626让飞凌的OK3588-C开发板在相机使用1080p60分辨率下预览 2024/6/26 15:15 4.2.1 全编译测试 在源码路径内&#xff0c;提供了编译脚本 build.sh&#xff0c;运行该脚本对整个源码进行编译&#xff0c;需要在终端切换到解压 出来的源码路径&#xff0c;找到 build.sh 文件…

6.26作业

1.整理思维导图 2.统计家目录下.c文件的个数 ls ~/*.c | wc -l 3.终端输入一个.sh文件&#xff0c;判断文件是否由可执行权限&#xff0c;如果有可执行权限运行脚本&#xff0c;没有可执行权限添加可执行权限后&#xff0c;再运行脚本 #!/bin/bash read -p "请输入一个.…

从官方源码精简出第1个FreeRTOS程序

一、下载官方源码 1、打开百度搜索freerots&#xff0c;找到官网:FreeRTOS官网 2、将源码解压到没有中文目录的路径下 二、删减目录 1、删除FreeRTOS-Plus和tools 2、删除FreeRTOS/Demo下除CORTEX_STM32F103_Keil外的所有文件 3、删除FreeRTOS\Source\portable下除RVDS和MemM…

海康威视摄像头修复

一、适用场景 1、室外安装的摄像头&#xff0c;长时间日晒雨淋后&#xff0c;可能因风向导致雨水进入水晶头&#xff0c;进而摄像头无法识别&#xff1b; 2、在经常施工的场地&#xff0c;可能由于车辆的进出&#xff0c;或施工设备的运行导致摄像头的网线水晶头断裂而无法使用…

IT入门知识第八部分《云计算》(8/10)

目录 云计算&#xff1a;现代技术的新篇章 1. 云计算基础 1.1 云计算的起源和发展 云计算的早期概念 云计算的发展历程 1.2 云计算的核心特点 按需自助服务 广泛的网络访问 资源池化 快速弹性 按使用量付费 1.3 云计算的优势和挑战 成本效益 灵活性和可扩展性 维…

[leetcode]intersection-of-two-arrays-ii 两个数组的交集 II

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {sort(nums1.begin(), nums1.end());sort(nums2.begin(), nums2.end());int length1 nums1.size(), length2 …