学习笔记:黑马程序员JavaWeb开发教程(2024.11.8)

5.10 分层解耦-分层解耦(IOC-DI)

在之前写的代码中,Controller层中new了一个Service层中的对象,在Service层中类名改变,则Controller层中也需要变化,这就是两个层之中耦合较重,需要减少耦合性,可以将Controller层中的EmpService变量中需要的对象放到一个容器中,使用容器作为Controller层和Service层的中介,减少他们之间的耦合

因此就引出了控制反转(IOC)和依赖注入(DI)的概念

5.11 分层解耦-IOC&DI入门

控制反转:@Component

依赖注入:@Autowired

当我们要将Service层中的对象从EmpServiceA改成EmpServiceB,只需要将容器中的对象从A变成B就可以了,将EmpServiceA类上面的@Conponent删去,给EmpServiceB加上

5.12 分层解耦-IOC&DI-IOC详解

Spring框架为了更好的标识web应用程序开发中bean对象属于那一层,又提供了Component的三个衍生注解,建议再开发中使用这三个衍生注解,在不知道放到那个层,比如工具类的时候可以用Component

在springboot集成web开发中,声明控制器bean只能用@Controller

Bean默认名字类名首字母小写,当需要自定义名字的时候,例:@Component(value = 'daoA')//value=可以不写

因为扫描只默认扫描当前包及其子包,所以不在这个范围当中的文件需要被扫描,只能手动指定,不过手动指定之后,就需要指定所有需要扫描的包,包括默认的包,因为手动指定后,默认指定就被取代了,例:@ComponentScan({"dao","com.itheima"}),当然不推荐这种方式,推荐直接都放在一个包下

5.13 分层解耦-IOC&DI-DI详解

想要谁生效,就在那个类上面加@Primary

想要谁生效,就在@Autowire上面加@Qualidier("想要的bean的名字")

使用@Resource注解时,不用@Autowire注解了,前者是按照名词注入,后者默认是按照类型注入,例:@Resource(name = 'bean的名字')

8.13 Mybatis-入门-课程介绍

8.14 Mybatis-入门-快速入门

Mybatis是在Java中编写sql语句,将sql语句发送到数据库执行

在springboot中配置Mybatis,需要对springboot的默认配置文件application.properties中配置数据库的四要素:驱动类的全类名、数据库连接的url、数据库的用户名、数据库连接的密码

在入门阶段使用注解的方式,按照Mybatis的规范,需要定义一个持久层的接口UseMapper,并且在这个接口上加@Mapper注解来标识注释Mybatis持久层上的一个接口,个人认为比较重要的是@Mapper这个标识的用处。这是数据访问层的接口。

下图代码中:@Select来指定当前是一个查询操作,并在该注解中(括号中)指定要执行的sql语句,要执行这个sql语句只要调用UseMapper中的list()方法即可

在Mybatis中不需要定义接口的实现类,只需要定义map接口,因为程序在运行时,框架底层会自动生成这个接口的实现类对象。也就是加上@Mapper注解之后,在运行时,会自动生成该接口的运行实现类对象(代理对象),并且将该对象交给IOC容器管理。所以虽然接口不能被直接new,但是因为因为又@Mapper注解,使其可以直接new

在实体类创建时,推荐使用包装类

测试文件写在tset目录下,因为接口不能直接new,但是在前面@Mapper注解可以得到实现类,而且放到了IOC中,因此采用依赖注入的方式获取数据

@SpringBootTest注解是springboot整合单元测试的注释,一旦加了该注解,则其中的单元测试方法在运行的时候会自动加载整个springboot环境,并且创建springboot IOC容器

8.15 Mybatis-入门-配置SQL提示

如果不配置的话,写的sql语句就会像字符串一样,不会被识别,也就不会有报错,如果写错了,就非常不友好,所以要配置

配好了之后,发现输入数据库名没有出现提示,或者爆红,还需要idea和数据库之间建立连接,其中Database数据库需要填写,要不然不知道你要那个数据库,在这里应该填写Mybatis

配置和连接都在PPT里面

在这里没配,到时候写案例的时候记得配

8.16 Mybatis-入门-JDBC

Mybatis是一个持久层框架,用于简化JDBC操作

8.17 Mybatis-入门-数据库连接池

原来的连接方式:客户端创建一个新的连接对象,再来执行这条sql语句,sql语句执行之后,又需要把这个连接对象关闭,来释放资源

有数据库连接池,程序在启动的时候,就会在这个容器当中初始化一定数量的连接对象,客户端在执行sql语句的时候,就可以从连接池获取一个连接,获取到连接之后,再来执行sql语句,sql语句执行之后,会把这个连接还给连接池;当个别客户端获取了连接,但是没有使用,也就是这个连接处于空闲状态,数据库连接池回去监测这个空闲时间,要是这个空闲时间超过了连接池中预设的最大值,则这个连接会被释放归还给连接池

Springboot中默认追光者数据库,需要切换数据库时,可以采用两种方式,第一种添加对应数据库的配置,第二种在spring那个数据库四要素进行修改:

8.18 Mybatis-入门-lombok工具包

使用lombok需要引入lombok的依赖

相关推荐
csxin几秒前
Spring Boot 中如何设置 serializer 的 TimeZone
java·后端
@半良人10 分钟前
Deepseek+python自动生成禅道测试用例
开发语言·python·测试用例
一只鲲18 分钟前
48 C++ STL模板库17-容器9-关联容器-映射(map)多重映射(multimap)
开发语言·c++
杨过过儿18 分钟前
【Task02】:四步构建简单rag(第一章3节)
android·java·数据库
青云交19 分钟前
Java 大视界 -- Java 大数据分布式计算在基因测序数据分析与精准医疗中的应用(400)
java·hadoop·spark·分布式计算·基因测序·java 大数据·精准医疗
荔枝爱编程22 分钟前
如何在 Docker 容器中使用 Arthas 监控 Java 应用
java·后端·docker
喵手28 分钟前
Java中Stream与集合框架的差异:如何通过Stream提升效率!
java·后端·java ee
JavaArchJourney30 分钟前
PriorityQueue 源码分析
java·源码
喵手40 分钟前
你知道,如何使用Java的多线程机制优化高并发应用吗?
java·后端·java ee
渣哥1 小时前
10年Java老司机告诉你:为什么永远不要相信浮点数相等
java