mybatis,mybatis连接池,延迟加载,缓存,二级缓存,注解开发,整合spring思路

本文深入探讨了MyBatis框架的使用,包括其与JDBC的区别、配置详解、动态SQL编写技巧、延迟加载策略及缓存机制。同时,介绍了如何通过MyBatis进行DAO开发、与Spring的整合以及逆向工程的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDBC编程

jdbc概念:是一种执行SQL语句的java api.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

JDBC存在的问题

麻烦,频繁的释放资源,性能浪费,硬编码,获取到的结果处理麻烦.

Mybatis复习

架构

在这里插入图片描述
在这里插入图片描述
简单流程 :在mapper.xml中写SQL语句 mapper.java 写对应的接口 .再配置mapper扫描后,(官方推荐方法)可以自动生成mapper接口的实现类.随后用调接口中的方法就可以了.

配置文件介绍

SqlMapConfig.xml:

mybatis的全局配置文件.配置的是mybatis的运行环境等信息,主要是配数据库信息.事务管理

基本配置

在这里插入图片描述
后期与spring整合后,这些基本都要废除.sqlmapconfig.xml基本上是空文件

mapper.xml

在该文件中配置SQL语句,在sqlmapconfig.xml中加载mapper.xml

在这里插入图片描述
后面详细回顾怎么拼写SQL语句

测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
说明: datasource 用的是sqlmapconfig.xml文件中配置的那个. user类就是定义的那个pojo类

模糊查询

在这里插入图片描述
自我理解: #{}是个占位符,直接将代码中传的参放入SQL语句,传到SQL语句块中像是直接传的字符串, 而${}则是字符串拼接,可以在SQL语句中的字符串中镶入传的参数
补充:现在多数用#{}, ${}中只能为value的原因是在源代码中,是map.put(“value”,“xxx”);键的值为value
在这里插入图片描述
直接传入参数 username 王

在这里插入图片描述
传入参数%王%
补充:

输入输出参数类型和selectone list

在这里插入图片描述
在这里插入图片描述
补充:ongl表达式把user.getUserName()省略成user.username了,’ .'表示调用(如果里面还有的话)
使用mybatis开发dao有原始dao方法和使用mapper方法.
原始dao方法:dao接口 dao实现类(写session调用selectone等封装好的对数据库操作的方法) SQL映射文件

mapper方法 官方推荐

在这里插入图片描述
个人理解 使用mapper方法只需按照规范写接口,和mapper.xml映射文件.mybatis帮我们写mapper接口的实现类
在这里插入图片描述在这里插入图片描述
通过getmapper方法获得实例.
在这里插入图片描述

sqlmapconfig.xml详细配置

在这里插入图片描述

properties:

在这里插入图片描述

在这里插入图片描述
补充:
在这里插入图片描述

typeAliases 别名(常用)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一般我们配包名批量定义 将类名定义为别名
在这里插入图片描述

mapper 配置

在这里插入图片描述
项目中常用第三个方法(与spring整合后配的扫描包名的方法 真实项目)
在这里插入图片描述

mapper.xml的编写相关知识点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
个人理解:
mybatis是通过ognl来解析对象字段的.所以可以传pojo 也可以传包装类 只需在SQL语句的编写中在#{}${}中对应的字段属性名就可以了 比如在这里插入图片描述

在这里插入图片描述

输出pojo或者pojo列表

mybatis可以指定返回自己定义的pojo类型,只需要字段对应,有多个查询返回就放到列表中

resultmap在这里插入图片描述

个人理解:当数据库查的字段名和返回类型pojo中的名字对应不上时,使用resultmap将两个名字联系在一起 那么返回结果就能正确的映射到pojo返回类上
补充:
根本原因是数据库字段与pojo名不匹配
解决方法1.sql语句中起别名
2.使用resultmap对应起来
补充细节
因为:mysql 在 在 windows 系统中不区分大小写!所以比如数据库中列名username pojo 中userName 能封装成功,而在linnux下 mysql严格区分大小写,此时,这种情况无法封装成功
区分:有关JAVA pojo类的区分大小写(譬如占位符中,if标签判断中是关于pojo的),sql语句中不区分(win下)

在这里插入图片描述

mybatis中提供的数据库连接池

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
区别:
在这里插入图片描述

动态拼写sql

当查询条件越多需要编写的SQL语句越多,这显然不合理
适用: 查询输入参数为pojo类的 ,在pojo中设置查询参数

if标签

在这里插入图片描述

注意: 字符串类型的需要做不等于 空串的校验 且先判断不等于null 在判断不等于"".(短路).

where标签

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
补充:SQL片段(抽取重复片段)
在这里插入图片描述
引用:
在这里插入图片描述
补充细节注意:SQL语句拼写末尾加不加分号都一样,建议不加,比如抽取出的片段有分号但是,后面还要拼接语句会出问题,有时可能会让你找很久bug都找不出来原因

关联查询

在这里插入图片描述
一般思路 改造pojo 其他的依照SQL语句规则写就行了 列如
在这里插入图片描述
1.继承父类(新写一个pojo)
在这里插入图片描述
2.改造pojo
在这里插入图片描述
在这里插入图片描述
这里采用的 resultmap对应的映射关系
一对多resultmap编写
在这里插入图片描述
##mybatis 延迟加载
在这里插入图片描述
延迟加载:
就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据。延迟加载也称懒加载.
好处:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速
度要快。
坏处 :
因为只有当需要用到数据时,才会进行数据库查询,这样在大批量数据查询时,因为查询工作也要消耗
时间,所以可能造成用户等待时间变长,造成用户体验下降。
在这里插入图片描述
实现:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述结果:
在这里插入图片描述
在这里插入图片描述
同样我们也可以在一对多关系配置的结点中配置延迟加载策略。
结点中也有 select 属性,column 属性。
需求:
完成加载用户对象时,查询该用户所拥有的账户信息。
在这里插入图片描述
个人理解:
延迟加载就是把多表查询拆分成多个单表查询.如果客户(java代码中)有查询关联的信息,则再去查询相关信息.

mybatis一级缓存

一级缓存是 SqlSession 级别的缓存,只要 SqlSession 没有 flush 或 close,它就存在。
测试方法:
在这里插入图片描述
在这里插入图片描述
一级缓存是 SqlSession 范围的缓存,当调用 SqlSession 的修改,添加,删除,commit(),close()等
方法时,就会清空一级缓存
在这里插入图片描述

mybatis二级缓存

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意事项:
当我们在使用二级缓存时,所缓存的类一定要实现 java.io.Serializable 接口,这种就可以使用序列化
方式来保存对象。
在这里插入图片描述

mybatis注解开发

常用注解
在这里插入图片描述
1.实体类编写(与数据库列名不一致)
在这里插入图片描述
未完待续

mybatis整合spring

在这里插入图片描述
注意点:
别名配置在sqlmapconfig.xml中,其余的sqlsessionfactory datasource交给spring
自己写daoimpl模式的需要把dao交给spring在配属性sqlsessionfactory在这里插入图片描述
mapper代理方法:
自己配 或者开包扫描
在这里插入图片描述
在这里插入图片描述

mybatis逆向工程

适用:单表查询时可以用逆向工程直接生成mapper.xml,pojo类和mapper接口.不用自己写
关键点:
修改generatorConfig.xml文件的配置即可
在这里插入图片描述

资料

传智黑马

声明

自学的黑马,用途:复习一遍,顺便写个笔记.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值