当前位置: 首页 > news >正文

SpringBoot自动配置-以Mybatis配置为例

SpringBoot自动配置

无基础的直接看链接内容,有基础就直接顺着往下看就可以
Spring底层(自动配置)

自动配置就是@EnableXXX封装@Improt(ImportSelector的实现类)对应方法selectImoprt返回字符串数组为类名会注册为bean
而我们这个字符串数组从我们的各个auotoconfiguration依赖的里面的一个org.springframework.boot.autoconfigure.AutoConfiguration.imports或spring.factories获取
每个第三方都会在这里写上需要自动配置注册的bean,以达到统一管理的效果

参数类

是什么

比如该类
会读取properties下log开头的
log.level=xxx
就会赋值给该类的level

package com.example.log;

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

@ConfigurationProperties(prefix = "log")
public class LogProperties {
    private String level;

    public String getLevel() {
        return level;
    }

    public void setLevel(String level) {
        this.level = level;
    }
}

然后我们工具类就可以读取这个属性进行动态的自动配置

配置类为什么是核心

自动配置的核心确实是通过参数类(通常是 @ConfigurationProperties 注解的类)来读取配置文件中的属性,并根据这些属性自动进行配置和实例化相应的 Bean。
而如果一个bean没有用到这个参数类中的参数,我感觉和直接引用没什么区别
在这里插入图片描述
在这里插入图片描述

隐式注入/调用

自动配置有隐式调用和显示调用,一般我们都是隐式调用的,比如数据库连接信息的配置,我们并没有@Autowired
在这里插入图片描述

mybatis-config.xml

这个我不讲了,感觉就是原始的配置方式,mybatis官方提供的方式

例子详解

mybatis就是通过对应的数据源datasource先生成sqlsessionFactory
然后生成sqlsession用来执行sql语句
在这里插入图片描述

在这里插入图片描述
通过在spring配置文件写参数来进行对应的配置
这种是如何配置的呢
就是通过我们的参数类

数据源配置

@Configuration
@EnableTransactionManagement
@PropertySource("classpath:application.properties")  // 引入配置文件
public class DataSourceConfig {

    @Value("${spring.datasource.url}")  // 通过 @Value 注解读取配置文件中的参数
    private String dbUrl;

    @Value("${spring.datasource.username}")
    private String username;

    @Value("${spring.datasource.password}")
    private String password;

    @Value("${spring.datasource.driver-class-name}")
    private String driverClassName;

    @Bean
    public DataSource dataSource() {
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setJdbcUrl(dbUrl);  // 设置数据源 URL
        dataSource.setUsername(username);  // 设置用户名
        dataSource.setPassword(password);  // 设置密码
        dataSource.setDriverClassName(driverClassName);  // 设置驱动类名
        return dataSource;
    }
}

@Configuration
@MapperScan("com.example.mapper")  // 扫描 Mapper 接口
public class MyBatisConfig {
	//上一步我们已经定义了数据源,再@bean里面注入bean只要在方法参数列表写一下即可,不用手动注入
    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);  // 设置数据源
        factoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));  // 设置 MyBatis 配置文件路径(这步我们按照规范写的话同包同名,这个文件应该是不用写的)
        return factoryBean.getObject();  // 返回 SqlSessionFactory 实例
    }

    @Bean
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);  // 配置 SqlSessionTemplate,用于执行 SQL
    }
}

然后我们的Mapper要执行对应的sql语句不是吗?
我们的mybatis会生成一个Mapper实现类,依赖注入我们的sqlsession来实现我们的数据库操作

public class UserMapperImpl implements UserMapper {
	@AutoWired//通过依赖注入实现!!!
    private final SqlSession sqlSession;

    public UserMapperImpl(SqlSession sqlSession) {
        this.sqlSession = sqlSession;
    }

    @Override
    public User getUserById(int id) {
        return sqlSession.selectOne("com.example.mapper.UserMapper.getUserById", id);  // 执行 SQL 查询
    }

    @Override
    public int insertUser(User user) {
        return sqlSession.insert("com.example.mapper.UserMapper.insertUser", user);  // 执行 SQL 插入
    }
}

这样就实现了自动配置(隐式的调用bean)

相关文章:

  • 深入解析:如何利用 Python 爬虫获取淘宝/天猫 SKU 详细信息
  • 模型文件及部署工具包org.dmg.pmml
  • 本地部署SafeLine详细指南:抵御网络攻击构建更安全的网站环境
  • LabVIEW太阳能制冷监控系统
  • C# OpenCV机器视觉:OSTU算法实现背景差分的自适应分割
  • DeepSeek AI 满血版功能集成到WPS或Microsoft Office中
  • Baumer工业相机堡盟工业相机如何通过BGAPI SDK实现一次触发控制三个光源开关分别采集三张图像(C#)
  • LeetCode 热题 100_组合总和(58_39_中等_C++)(递归(回溯))
  • YOLO算法模型检测利用手机IP摄像头
  • php5 php8 nginx Access denied.
  • 【RAG落地利器】Weaviate、Milvus、Qdrant 和 Chroma 向量数据库对比
  • 基于Java的图书管理网站:SpringBoot+Vue开发的图书借阅管理系统
  • 判断192.168.1.0/24网络中,当前在线的ip有哪些
  • AWS AppFabric
  • 【前端框架】vue2和vue3的区别详细介绍
  • Halcon相机标定
  • 在分布式场景下可以使用synchronized加锁么?
  • Node.js 工具模块
  • 华为云+硅基流动使用Chatbox接入DeepSeek-R1满血版671B
  • 【机器学习】简单线性回归算法及代码实现
  • 3d效果图制作软件/兰州网络推广优化服务
  • 网站制作论坛/百度做网站
  • 唐山做网站优化/企业如何开展网络营销
  • 网站建设的市场有多大/宁德市教育局官网
  • 嘉兴做微网站设计/搜索关键词
  • 苏州营销网站建设公司排名/百度网站首页入口