【一篇搞懂】MyBatis持久层框架丨黑马程序员(学习笔记)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、前言🚀🚀🚀

在这里插入图片描述

☀️
你先去读你的书 我也去看我的电影,
终有一天 我们会窝在一起,读同一本书 看同一部电影。


本文简介:本人是大二软件工程专业,java后端方向,学习路线:java基础->JDBC->Maven->MyBatis->SSM,通过做笔记分享到博客上的形式,激励自己学习,同时方便复习。由于水平为入门级别,如有错误,希望大佬们评论或私信斧正 Thanks♪(・ω・))ノ



二、MyBatis简介及使用详解:☀️☀️☀️

1.MyBatis简介

1.1 What(MyBatis是什么?)

  MyBatis 是一款优秀的持久层框架,用于简化JDBC 开发

在这里插入图片描述
理解:
  只需要少量的工作便可以完成一个复杂的产品高效、规范、通用、可拓展。
在这里插入图片描述

1.2 Why(为什么要用MyBatis)

1.硬编码
注册驱动,获取连接
SQL 语句
2.操作繁琐
手动设置参数
手动封装结果集

在这里插入图片描述

分析:
一旦账号密码更改,就要改代码,意味着工作量大,就要重新去打包、重新去运行,意味着代码的维护性比较差了。

1.3 How(MyBatis如何简化操作)

在这里插入图片描述
  可以看到MyBatis直接通过配置文件将SQL语句就放在UserMapper.xml文件中。获取连接放在mybatis-config.xml核心配置文件中,而一行代码搞定了原先JDBC的手动设置参数、手动封装结果集的繁琐操作。

在这里插入图片描述

看一下MyBatis的市场占用率。(主流框架)
在这里插入图片描述

  


2. MyBatis快速入门

2.1 具体步骤

在这里插入图片描述
其中 编写 MyBatis 核心配置文件 -->替换连接信息 解决硬编码问题
编写 SQL 映射文件 -->统一管理sql语句,解决硬编码问题,这两个步骤是最关键的,其他复制即可。大大提高了后期的可维护性

2.1.1 创建usr表,添加数据

在这里插入图片描述

2.1.2 创建模块,导入坐标

  那如何在pom.xml中加mybatis坐标呢,去官网找,然后将坐标粘过去。

在这里插入图片描述

  除了导mybatis依赖,还要导mysql驱动jar包junit单元测试等坐标。而将来这些坐标我们都会找的地方放起来,然后直接复制粘贴即可(不用去记)

在这里插入图片描述
在这里插入图片描述
  

  logback除了这三个坐标信息外,其实还需要一个配置文件,先把这个配置文件粘贴到对应的
resource中.

在这里插入图片描述

在这里插入图片描述

  

2.1.3 配置核心配置文件

  这里还要写核心配置文件mybatis-config.xml,仍然是去官网找。

在这里插入图片描述

在这里插入图片描述

  粘完之后需要注意:这里这些数据是需要改成我们自己数据库的信息.

在这里插入图片描述

  然后这里还有个配置项(mappers),这个其实是用来指定当前这个SQL映射文件的路径

在这里插入图片描述

  


2.1.4 编写SQL映射

SQL映射文件要怎么写呢?接着看官网:里边有对应的示例
在这里插入图片描述

  这个Mapper命名有一定规定,如果是写Uers订单表那就叫UserMapper.xml,要写Order订单表,那就写OrderMapper.xml

在这里插入图片描述

  这里有个名称空间(后面会讲是干嘛的)这里先随便给个名字test,这里resultTupe是返回一个类型,这里是User。

在这里插入图片描述

2.1.4 编码

  这里写sqlSessionFactory不用记也不用背,直接去官网复制即可(三行代码)。有异常就抛出异常即可。

在这里插入图片描述

代码分析:
  看一下这三行代码,第一行定义了一个配置文件路径,我现在这个在resources的根目录下面,所以直接写文件名即可。第二行,Resources对象,这是Mybatis提供的这么一个资源加载的类,这个类里面有个静态方法(getResourcesAsStream)可以把字符串String传进来,然后返回一个字节输入流,将来通过new一个对象叫做SqlSessionFactoryBuilderbuild方法,就可以返回一个SqlSessionFactory对象了。第一步就做完了。

第二步直接获取SqlSession对象,第三步返回一个List集合。

在这里插入图片描述
  


3. Mapper代理开发(主流开发)

3.1 What

在这里插入图片描述

  


3.2 步骤

在这里插入图片描述
  为什么要用MyBatis代理开发
之前存在的问题:

在这里插入图片描述

  刚才的代码是这样子的,但是我们看到执行sql这里,test.selectAll相当于把代码写死了,又存在了硬编码问题。而且这样写也很不方便,因为有很多的SQL语句不同的id,将来还要看看不同的sql对应哪个id,如果有大量的sql的话就非常不方便

在这里插入图片描述
  而mapper代理是怎么写代码的呢,如下图:通过sqlSession.getMapper获得一个类,这个类将会返回一个UserMapper类型,而这个UserMapper其实是一个接口,这个接口会有很多的方法,这些方法会一一对应文件配置的这些id名称。意味着这个接口中将来会有selectAll这个方法,获取该方法后,一执行就会返回个List集合

在这里插入图片描述
  第二种方法有很多优势,首先它不依赖于字符串字面值,会更安全一点;其次,如果你的 DE 有代码补全功解,那么代码补全可以帮你快速选择到映射好的 SQL 语句。


  定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下(什么意思呢?如下)

在这里插入图片描述

在这里插入图片描述
  

  如果有很多要加载的sql映射文件,那么Mapper代理方式不管你存在多少个文件,就一行代码全部都加载出来。

在这里插入图片描述
  


4. MyBatis核心配置文件

在这里插入图片描述
在这里插入图片描述
  这里transactionManage,这个操作将来会由Spring管理,将来这里的dataSource数据源的信息会被Spring所接管

  这里是别名的作用,相当于给这个pojo包里面的所有实体类起了个别名(默认为类名),这里不区分大小写,不要带包的名称,非常方便。

在这里插入图片描述

  意味着这里这个resultType返回类型可以直接写类名了。

在这里插入图片描述

在这里插入图片描述
  


5. 配置文件完成增删改查

5.1 查看详情

查看的SQL语句:

在这里插入图片描述

注意: 因为在xml文件中小于<符合是标签,所以会报错,这里改成&lt就表示是一个小于<符号

在这里插入图片描述

还有个快捷方式: CD

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  


5.2 条件查询
5.2.1 多条件查询

在这里插入图片描述

多条件体现在如下:(这里是三个条件)
在这里插入图片描述
问题:1.条件表达式 ? 2.如何连接?

在这里插入图片描述
  


5.3 多条件动态查询

在这里插入图片描述

如何修改呢,其实加个if判断即可,判断用户是否输入账目密码。
这里可以看一下MyBatis官网:
在这里插入图片描述

如下,加个if标签,这里有个test属性,里面便是写逻辑表达式,然后名称要写对应的属性名。此时动态SQL便改完了。

在这里插入图片描述
运行成功,暂时没什么问题。

在这里插入图片描述

当只存放公司名称这个属性时,出现问题了:因为where后面直接跟and,语法错误了。
之所以出现where后跟and,是因为前面那三个判断,如果第一个条件如果不存在,第二个会跳到第一,故前面where后面就直接跟and了。

在这里插入图片描述

5.3.1 恒等式

这里where 1 = 1 故后面直接加and,但是这个方法比较笨,MyBatis早就帮你想好了,通过where标签。
在这里插入图片描述

在这里插入图片描述

5.3.2 where标签替换where关键字

它会看你判断条件只有一个(而且是第一个),故会把and自动去掉。
在这里插入图片描述
在这里插入图片描述

5.4 单条件动态查询

在这里插入图片描述
也可以把上述代码的otherwise标签去掉,改成在外面加个where标签。where标签是很智能的标签。

在这里插入图片描述

  


5.5 添加&&修改
5.5.1 添加

在这里插入图片描述在这里插入图片描述

  这里insert标签要注意,添加的是字段名,但下面#后要加的是实体类里面的属性(驼峰命名)
写完测试后,运行后打开数据库发现数据并没有增加,这是因为MyBatis的事务原因,它这里少了事务提交这一步。(autocommit to false 自动提交关闭了,说明开启了事务,后面Rolling back 事务回滚)

在这里插入图片描述

自动提交事务:

在这里插入图片描述

手动提交事务:

在这里插入图片描述
在这里插入图片描述

能否获得属性的ID
在这里插入图片描述
在这里插入图片描述

  我们发现这样是获取不出来的,然后查看数据库里面的数据是有这个ID的。如果获取不出来就会出现很多问题:如订单跟订单项是关联的数据,一个订单里面可能会有很多订单项(意味着一个订单项对应着一个外键*来指向订单的 主键

  其实这个添加语句执行完后,ID是已经存在的了,那么在MyBatis中可以通过uesGeneratedKeys设置为true,并且设置keyProperty为属性名(这里即为ID)

在这里插入图片描述
在这里插入图片描述

改完运行后,发现ID便出来了。

在这里插入图片描述
  


5.5.2 修改

修改全部字段:

在这里插入图片描述

注意:这里就是需要写上一堆的if判断,是否为null,为null就不需要修改其值。
所以加上个set<>标签后非常灵活,想修改哪个属性就修改哪个属性。

在这里插入图片描述

右边为动态修改字段,更为灵活。

在这里插入图片描述

5.5 删除功能
5.5.1 删除一个

在这里插入图片描述

5.5.1 批量删除

在这里插入图片描述

使用@Param注解,改变map集合的默认key的名称

在这里插入图片描述

这里的collection=“array” 就可以改成"ids"。separator是分隔符,以逗号分隔。
在这里插入图片描述

在这里插入图片描述

6. MyBatis参数传递

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这里的@Param名称要跟SQL语句占位符名称保持一致。

结论: 我们用起来都要用到@Param注解。

在这里插入图片描述    


7. MyBatis注解方式完成增删改查

区别是:配置文件这一块是将SQL语句写到xml文件里面去,而注解其实就是将你的SQL语句写在注解里边。

Mybatis官方说:说

接下来在这个User里面完成selectById的功能,之前写过对应的statement,现在把它注释掉。

在这里插入图片描述

在这个位置将会报找不到statement,但是我们这里给它加个注解(查询呢,就用select注解)

在这里插入图片描述

跟之前写SQL是一样的,但是这个地方写SQL没有提示,在xml写就有。

在这里插入图片描述

这里这些测试样例是跟之前完全一样,执行一下,发现正常运行。这样也就完成了注解的开发。

在这里插入图片描述

  

  

三、总结:🍓🍓🍓

  碎碎念:
费时三天,终于把MyBatis学完了,接下来尽快赶spring和springMVC的进程,争取今明后三天肝个七八成,下周着手入门项目。奥利给!!!

                                              一一2024/05/23
Alt

  • 51
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值