后端之路第三站(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后端吧,一学一个不吱声

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

  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值