• Spring(四)


    1、Spring6整合JUnit

    1、JUnit4

    User类:

    1. package com.songzhishu.spring.bean;
    2. import org.springframework.beans.factory.annotation.Value;
    3. import org.springframework.stereotype.Component;
    4. /**
    5. * @BelongsProject: Spring6
    6. * @BelongsPackage: com.songzhishu.spring.bean
    7. * @Author: 斗痘侠
    8. * @CreateTime: 2023-10-18 20:41
    9. * @Description: TODO
    10. * @Version: 1.0
    11. */
    12. @Component
    13. public class User {
    14. @Value("张三")
    15. private String name;
    16. @Override
    17. public String toString() {
    18. return "User{" +
    19. "name='" + name + '\'' +
    20. '}';
    21. }
    22. public String getName() {
    23. return name;
    24. }
    25. public void setName(String name) {
    26. this.name = name;
    27. }
    28. public User() {
    29. }
    30. public User(String name) {
    31. this.name = name;
    32. }
    33. }

    配置文件:  开启组件扫描

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:context="http://www.springframework.org/schema/context"
    5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    6. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    7. <context:component-scan base-package="com.songzhishu.spring.bean"/>
    8. beans>

    测试:

    1. @RunWith(SpringJUnit4ClassRunner.class)
    2. @ContextConfiguration("classpath:spring.xml")
    3. public class TestJunit4 {
    4. @Autowired
    5. private User user;
    6. @Test
    7. public void test1(){
    8. System.out.println(user.getName());
    9. }
    10. }

    2、JUnit5:

    测试:

    1. /*@ContextConfiguration("classpath:spring.xml")
    2. @ExtendWith(SpringExtension.class)*/
    3. //写法二
    4. @SpringJUnitConfig(locations = "classpath:spring.xml")
    5. public class TestJunit5 {
    6. @Autowired
    7. private User user;
    8. @Test
    9. public void test1(){
    10. System.out.println(user.getName());
    11. }
    12. }

    2、Spring6集成MyBatis

    第一步:准备数据库表

    第二步:IDEA中创建一个模块,并引入依赖

    • spring-context
    • spring-jdbc
    • mysql驱动
    • mybatis
    • mybatis-spring:mybatis提供的与spring框架集成的依赖
    • 德鲁伊连接池
    • junit

    第三步:基于三层架构实现,所以提前创建好所有的包

    第四步:编写pojo

    第五步:编写mapper接口

    第六步:编写mapper配置文件

    • 在配置文件中配置命名空间,以及每一个方法对应的sql。

    第七步:编写service接口和service接口实现类

    第八步:编写jdbc.properties配置文件

    • 数据库连接池相关信息

    第九步:编写mybatis-config.xml配置文件

    • 该文件可以没有,大部分的配置可以转移到spring配置文件中。
    • 如果遇到mybatis相关的系统级配置,还是需要这个文件。
    1. "1.0" encoding="UTF-8" ?>
    2. configuration
    3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
    5. <configuration>
    6. <settings>
    7. <setting name="mapUnderscoreToCamelCase" value="true"/>
    8. <setting name="lazyLoadingEnabled" value="true"/>
    9. <setting name="cacheEnabled" value="true"/>
    10. <setting name="logImpl" value="STDOUT_LOGGING"/>
    11. settings>
    12. configuration>

    第十步:编写spring.xml配置文件

      • 组件扫描
      • 引入外部的属性文件
      • 数据源
      • SqlSessionFactoryBean配置
        • 注入mybatis核心配置文件路径
        • 指定别名包
        • 注入数据源
      • Mapper扫描配置器
        • 指定扫描的包
      • 事务管理器DataSourceTransactionManager
        • 注入数据源
      • 启用事务注解
        • 注入事务管理器
    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:context="http://www.springframework.org/schema/context"
    5. xmlns:tx="http://www.springframework.org/schema/tx"
    6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    7. http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd
    8. http://www.springframework.org/schema/tx https://www.springframework.org/schema/tx/spring-tx.xsd">
    9. <context:component-scan base-package="com.songzhishu.spring6"/>
    10. <context:property-placeholder location="jdbc.properties"/>
    11. <bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
    12. <property name="driverClassName" value="${jdbc.driver}">property>
    13. <property name="url" value="${jdbc.url}">property>
    14. <property name="username" value="${jdbc.username}">property>
    15. <property name="password" value="${jdbc.password}">property>
    16. bean>
    17. <bean class="org.mybatis.spring.SqlSessionFactoryBean">
    18. <property name="dataSource" ref="druidDataSource">property>
    19. <property name="configLocation" value="mybatis-config.xml">property>
    20. <property name="typeAliasesPackage" value="com.songzhishu.spring6.pojo">property>
    21. bean>
    22. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" >
    23. <property name="basePackage" value="com.songzhishu.spring6.mapper">property>
    24. bean>
    25. <bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    26. <property name="dataSource" ref="druidDataSource">property>
    27. bean>
    28. <tx:annotation-driven transaction-manager="dataSourceTransactionManager">tx:annotation-driven>
    29. beans>

    第十一步:编写测试程序,并添加事务,进行测试

    3、Srping Resource:

            Java的标准java.net.URL类和各种URL前缀的标准处理程序无法满足所有对low-level资源的访问,比如:没有标准化的 URL 实现可用于访问需要从类路径或相对于 ServletContext 获取的资源。并且缺少某些Spring所需要的功能,例如检测某资源是否存在等。而Spring的Resource声明了访问low-level资源的能力。

    1、Resource接口:

            Spring 的 Resource 接口位于 org.springframework.core.io 中。 旨在成为一个更强大的接口,用于抽象对低级资源的访问。以下显示了Resource接口定义的方法。

           Resource接口继承了InputStreamSource接口,提供了很多InputStreamSource所没有的方法。

    其中一些重要的方法:

    • getInputStream(): 找到并打开资源,返回一个InputStream以从资源中读取。预计每次调用都会返回一个新的InputStream(),调用者有责任关闭每个流
    • exists(): 返回一个布尔值,表明某个资源是否以物理形式存在
    • isOpen: 返回一个布尔值,指示此资源是否具有开放流的句柄。如果为true,InputStream就不能够多次读取,只能够读取一次并且及时关闭以避免内存泄漏。对于所有常规资源实现,返回false,但是InputStreamResource除外。
    • getDescription(): 返回资源的描述,用来输出错误的日志。这通常是完全限定的文件名或资源的实际URL。

    其他方法:

    • isReadable(): 表明资源的目录读取是否通过getInputStream()进行读取。
    • isFile(): 表明这个资源是否代表了一个文件系统的文件。
    • getURL(): 返回一个URL句柄,如果资源不能够被解析为URL,将抛出IOException
    • getURI(): 返回一个资源的URI句柄
    • getFile(): 返回某个文件,如果资源不能够被解析称为绝对路径,将会抛出FileNotFoundException
    • lastModified(): 资源最后一次修改的时间戳 createRelative(): 创建此资源的相关资源
    • getFilename(): 资源的文件名是什么 例如:最后一部分的文件名 myfile.txt

    但是我们一般使用的它的实现类! 

    2、Resource的实现类:

    (1)UrlResource访问网络资源:

    Resource的一个实现类,用来访问网络资源,它支持URL的绝对路径。

    • http:------该前缀用于访问基于HTTP协议的网络资源。
    • ftp:------该前缀用于访问基于FTP协议的网络资源
    • file: ------该前缀用于从文件系统中读取资源

  • 相关阅读:
    文件的导入与导出
    搞定面试官 - MySQL 中你知道如何计算一个索引的长度嘛?
    Anaconda使用笔记
    [附源码]计算机毕业设计JAVAjsp游乐园管理系统
    尹博学:OceanBase Cloud正式开服,助力全球中小企业数智化升级
    js函数相关知识详解
    Python+Qt多点最短路径(最优路径)算法实现
    设计模式之【工厂模式、适配器模式】
    WIN32核心编程 - 内存管理 内存页面
    JTAG引脚定义的学习
  • 原文地址:https://blog.csdn.net/keleID/article/details/133914469