每日十题八股-2024年12月20日

1.SpringBoot自动装配原理是什么?
2.说几个启动器(starter)?
3.写过SpringBoot starter吗?
4.SpringBoot里面有哪些重要的注解?还有一个配置相关的注解是哪个?
5.springboot怎么开启事务?
6.与传统的JDBC相比,MyBatis的优点?
7.还记得JDBC连接数据库的步骤吗?
8.如果项目中要用到原生的mybatis去查询,该怎样写?
9.Mybatis里的 # 和 $ 的区别?
10.MybatisPlus和Mybatis的区别?

1.SpringBoot自动装配原理是什么?

从SpringBoot启动类的的注解 @SpringBootApplication 开始,其包含:
在这里插入图片描述
其中最核心的是 @EnableAutoConfiguration 中有一行@Import({AutoConfigurationImportSelector.class})。自动装配核心功能的实现实际是通过AutoConfigurationImportSelector类。
AutoConfigurationImportSelector是 Spring Boot 中一个重要的类,它实现了 ImportSelector 接口,用于实现自动配置的选择和导入。具体来说,它通过分析项目的类路径和条件来决定应该导入哪些自动配置类。
扫描类路径上的 META-INF/spring.factories 文件。

2.说几个启动器(starter)?

在这里插入图片描述

3.写过SpringBoot starter吗?

  • 引入 spring-boot-autoconfigure 依赖
  • 创建配置实体类
  • 创建自动配置类,设置实例化条件(@Conditionalxxx注解,可不设置),并注入容器
  • 在 MATE-INF 文件夹下创建spring.factories 文件夹,激活自动配置。
  • 在 maven 仓库发布 starter

starter 是 SpringBoot 的一个重要的组成部分,它相当于一个集成的模块,比如你想用 Mybatis 和 lombok,但是在 pom 文件中需要写两个依赖,如果你将他们集成为一个 starter(或者将更多你需要的依赖集成进去),那么你只需要在 pom 文件中写一个 starter 依赖就可以了,这对于一个可复用模块的开发和维护都极为有利。
① 在 IDEA 中新建一个 maven 工程
② 在 pom 文件中加入实现 starter 所需要的依赖。
③ 创建配置信息实体类:

import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * 配置信息实体类
 * @author Planeswalker23
 * @date 2020-05-25
 */
@ConfigurationProperties("formatter")
public class DateFormatProperties {

    /**
     * default format pattern
     */
    private String pattern = "yyyy-MM-dd HH:mm:ss";

    // 忽略 getter setter
}

④ 创建配置类

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.text.SimpleDateFormat;
/**
 * 配置信息实体类
 * @author Planeswalker23
 * @date 2020-05-25
 */
@Configuration
@EnableConfigurationProperties(DateFormatProperties.class)
@ConditionalOnProperty(prefix = "formatter", name = "enabled", havingValue = "true")
public class DateFormatConfiguration {
    private DateFormatProperties dateFormatProperties;
    public DateFormatConfiguration(DateFormatProperties dateFormatProperties) {
        this.dateFormatProperties = dateFormatProperties;
    }

    @Bean(name = "myDateFormatter")
    public SimpleDateFormat myDateFormatter() {
        System.out.println("start to initialize SimpleDateFormat with pattern: " + dateFormatProperties.getPattern());
        return new SimpleDateFormat(dateFormatProperties.getPattern());
    }
}

在这里插入图片描述
⑥ 指定自动装配:在 resource 目录下创建 MATE-INF 文件夹,并创建一个名为 spring.factories 的文件,然后在文件中写下

org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.walker.planes.DateFormatConfiguration

⑦ 在命令行中敲下 mvn clean install 命令,当看到下面的输出后,自定义的 starter 就可以作为一个依赖被引用了。

4.SpringBoot里面有哪些重要的注解?还有一个配置相关的注解是哪个?

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

5.springboot怎么开启事务?

在 Spring Boot 中开启事务非常简单,只需在服务层的方法上添加 @Transactional 注解即可。

6.与传统的JDBC相比,MyBatis的优点?

在这里插入图片描述

7.还记得JDBC连接数据库的步骤吗?

在这里插入图片描述

8.如果项目中要用到原生的mybatis去查询,该怎样写?

  • 配置MyBatis: 在项目中配置MyBatis的数据源、SQL映射文件等。
  • 创建实体类: 创建用于映射数据库表的实体类。
  • 编写SQL映射文件: 创建XML文件,定义SQL语句和映射关系。
  • 编写DAO接口: 创建DAO接口,定义数据库操作的方法。
  • 编写具体的SQL查询语句: 在DAO接口中定义查询方法,并在XML文件中编写对应的SQL语句。
  • 调用查询方法:在服务层或控制层调用DAO接口中的方法进行查询。

9.Mybatis里的 # 和 $ 的区别?

https://www.cnblogs.com/heqiyoujing/p/11204533.html
1、#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。
如:where username=#{username},如果传入的值是111,那么解析成sql时的值为where username=“111”, 如果传入的值是id,则解析成的sql为where username=“id”. 
2、$将传入的数据直接显示生成在sql中。
如:where username=${username},如果传入的值是111,那么解析成sql时的值为where username=111;
3、#方式能够很大程度防止sql注入,$方式无法防止Sql注入。
如果传入的值是;drop table user;,
那么第一条用#{}的sql解析为:select id, username, password, role from user where username=“;drop table user;”
那么第二条用${}的sql解析为:select id, username, password, role from user where username=;drop table user;
这时候已经sql注入了。
4、$方式一般用于传入表名和列名,还有排序时使用order by动态参数时需要使用$ ,ORDER BY ${columnName}
一般能用#的就别用$,若不得不使用“${xxx}”这样的参数,要手工地做好过滤工作,来防止sql注入攻击。

10.MybatisPlus和Mybatis的区别?

MyBatisPlus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。它引入了一些新的特性,如自动填充、乐观锁插件、逻辑删除等,同时还内置了一些常用的CRUD操作,极大地减少了开发人员的工作量。

  • BaseMapper,IService 接口直接调用内置的方法来完成这些操作,而无需手动编写SQL。
  • MyBatisPlus支持自动填充功能,我们可以通过在实体类中使用@TableField(fill =FieldFill.INSERT)和@TableField(fill = FieldFill.UPDATE)注解来指定哪些字段需要在插入或更新时自动填充。
  • MyBatisPlus内置了乐观锁插件,我们可以通过在实体类中使用@Version注解来指定哪个字段作为乐观锁字段。
  • MyBatisPlus支持逻辑删除,我们可以通过在实体类中使用@TableLogic注解来指定哪个字段作为逻辑删除字段。然后在执行删除操作时,MyBatisPlus会自动将逻辑删除字段的值更新为删除标记,而不是真正地删除记录。
  • MyBatisPlus内置了性能分析插件,我们可以通过配置该插件来启用SQL性能分析。
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎。
  • 通用方法封装:MybatisPlus封装了许多常用的方法,如条件构造器、排序、分页查询等,简化了开发过程,提高了开发效率。
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错。
  • 注解支持:MybatisPlus引入了更多的注解支持,使得开发者可以通过注解来配置实体与数据库表之间的映射关系,减少了XML配置文件的编写。
  • 多租户支持:MybatisPlus提供了多租户的支持,可以轻松实现多租户数据隔离的功能。(待了解)

详解:
在MyBatis中,如果我们需要执行CRUD操作,通常需要手动编写SQL语句。而在MyBatisPlus中,我们可以直接调用内置的方法来完成这些操作,而无需手动编写SQL。例如,我们可以使用BaseMapper接口中的insert、selectById、updateById和deleteById方法来完成插入、查询、更新和删除操作。

MyBatisPlus 提供了 IService 接口,这个接口封装了一些常见的 CRUD 操作,比如 save(), remove(), update(), list() 等等。如果你的 service 类实现了这个接口,那么你就可以直接在 service 类中调用这些方法,而不需要再去调用 mapper 的方法。这样可以使得你的 service 类更加简洁,也更加符合面向对象的设计原则。

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
    // ...
}

MyBatisPlus支持自动填充功能,我们可以通过在实体类中使用@TableField(fill = FieldFill.INSERT)和@TableField(fill = FieldFill.UPDATE)注解来指定哪些字段需要在插入或更新时自动填充。

public class User implements Serializable {
    // ...
 
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
 
    @TableField(fill = FieldFill.UPDATE)
    private Date updateTime;
 
    // ...
}

MyBatisPlus内置了乐观锁插件,我们可以通过在实体类中使用@Version注解来指定哪个字段作为乐观锁字段。

public class User implements Serializable {
    // ...
 
    @Version
    private Integer version;
 
    // ...
}

然后在更新时,MyBatisPlus会自动将版本号加一,并在更新语句中添加版本号的判断条件。

MyBatisPlus支持逻辑删除,我们可以通过在实体类中使用@TableLogic注解来指定哪个字段作为逻辑删除字段。
然后在执行删除操作时,MyBatisPlus会自动将逻辑删除字段的值更新为删除标记,而不是真正地删除记录。

public class User implements Serializable {
    // ...
 
    @TableLogic
    private Integer deleted;
 
    // ...
}

MyBatisPlus内置了性能分析插件,我们可以通过配置该插件来启用SQL性能分析。

@Configuration
public class MybatisPlusConfig {
 
    @Bean
    public PerformanceInterceptor performanceInterceptor() {
        PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
        // 设置SQL性能分析的最大时间,如果超过这个时间,则不执行
        performanceInterceptor.setMaxTime(1000);
        // 设置SQL格式化
        performanceInterceptor.setFormat(true);
        return performanceInterceptor;
    }
 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值