spring注解开发(Spring整合MyBatis——Mapper代理开发模式、(Spring、MyBatis、Jdbc)配置类)(6)
目录
一、纯MyBatis独立开发程序。
(1)数据库与数据表。
(2)实体类。
(3)dao层接口。(Mapper代理模式、无SQL映射文件——注解配置映射关系)
(4)MyBatis核心配置文件。
(5)应用测试程序。(类App)
二、Spring整合MyBatis的思路分析。(Spring管理哪个bean?)
(1)MyBatis运行程序分析。
<1>初始化SqlSessionFactory。
<2>获取连接(SqlSession)。获取xxxMapper接口。
<3>调用数据层方法完成操作。
<4>关闭连接。
(2)MyBatis核心配置文件分析。
<1>初始属性、加载外部资源文件。
<2>初始化类型别名。
<3>配置数据源连接信息。
<4>初始化映射配置。
(3)分析小结。
三、Spring整合MyBatis。(实操)
(1)导入Spring整合Mybatis核心依赖坐标。
<1>spring-context。(基础核心)
<2>druid。(阿里数据源)
<3>mybatis。(基础核心)
<4>mysql-connector-java。(mysql核心jar)
<5>spring-jdbc。(spring操作数据库核心jar)
<6>mybatis-spring。(spring整合mybatis核心jar)
<7>lombok。(快速开发)
(2)service层。
<1>AccountService接口。
<2>AccountServiceImpl实现类。
(3)dao层。(Mapper代理模式开发)
(4)Jdbc配置类。(配置数据源信息)
(5)MyBatis配置类。(取代MyBatis核心配置文件)
<1>SqlSessionFactoryBean、MapperScannerConfigurer对象。
(6)Spring配置类。
(7)测试程序。(类App02)
一、纯MyBatis独立开发程序。
(1)数据库与数据表。
- 数据库:hyl。数据表:tb_account。
(2)实体类。
- pom文件引入Lombok依赖。(帮助快速开发:无需手动提供getter、setter方法、构造器、toString()方法等...)
<!--Lombok依赖坐标--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version><scope>provided</scope> </dependency>
- 在包(domain)下创建对应数据库字段的实体类用于封装。
- 实体类上使用注解@Data使Lombok生效。
package com.hyl.domain;import lombok.Data;@Data public class Account {private Integer id;private String name;private Double money; }
(3)dao层接口。(Mapper代理模式、无SQL映射文件——注解配置映射关系)
- 只有接口无实现类。使用Mapper代理模式这一套开发模式。
- 无SQL映射文件。使用注解形式(@Select、@Insert、@Delete、@Update)配置其映射关系并完成SQL语句的书写。
package com.hyl.dao;import com.hyl.domain.Account; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update;import java.util.List;/*** 数据层的操作接口*/ public interface AccountDao {/*** 新增*/@Insert("insert into tb_account (name,money) values (#{name},#{money})")void save(Account account);/*** 根据id删除*/@Delete("delete from tb_account where id = #{id}")void delete(Integer id);/*** 更新* @param account*/@Update("update tb_account set name = #{name} , money = #{money} where id = #{id}")void update(Account account);/*** 查询所有* @return*/@Select("select * from tb_account ")List<Account> selectAll();/*** 根据id查询* @param id* @return*/@Select("select * from tb_account where id = #{id}")Account selectById(Integer id); }
(4)MyBatis核心配置文件。
- pom文件引入mybatis核心依赖与Java连接数据库核心依赖。
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <!--mybatis依赖--> <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version> </dependency><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <!--mysql驱动--> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency>
- <properties>加载外部properties配置文件。
jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/hyl jdbc.username=root jdbc.password=root123
- 加载JDBC连接MySQL的数据源连接信息。
- <mappers>中的<package>注册指定包下的所有mapper接口。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><properties resource="db.properties"></properties><settings><setting name="logImpl" value="STDOUT_LOGGING"/></settings><typeAliases><package name="com.hyl.domain"/></typeAliases><environments default="development"><environment id="development"><!--配置JDBC事务管理--><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><mappers><package name="com.hyl.dao"/></mappers> </configuration>
(5)应用测试程序。(类App)
- 获得SqlSessionFactory对象。
- 获得SqlSession对象。
- 通过SqlSession对象调用getMapper("执行业务的接口.class")获取真正执行业务操作的xxxMapper接口。
- 通过调用对应的方法执行查询操作即可。
- 最后释放SqlSession对象资源。
package com.hyl;import com.hyl.dao.AccountDao; import com.hyl.domain.Account; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException; import java.io.InputStream;public class App {public static void main(String[] args) throws IOException {//1.创建sqlSessionFactoryBuilder对象SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();//加载mybatis主配置文件InputStream resourceAsStream = Resources.getResourceAsStream("mybatisConfig.xml");//3.创建SqlSessionFactory对象SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);//4.创建SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession();//5.执行SqlSession对象的getMapper方法获取执行业务的接口MapperAccountDao accountDao = sqlSession.getMapper(AccountDao.class);Account account = accountDao.selectById(1);System.out.println("查询结果:"+account);//6.释放SqlSession资源sqlSession.close();} }
- 测试类App程序运行结果如下。
二、Spring整合MyBatis的思路分析。(Spring管理哪个bean?)
(1)MyBatis运行程序分析。
- 从上面的纯MyBatis开发项目的运行程序(App)分析。并将其拆分为几个重要的模块。
- 因为Spring是用来管理bean的,那么需要确定有哪些bean是需要交给Spring管理的!
<1>初始化SqlSessionFactory。
- 核心对象SqlSessionFactory。(需要交给spring管理)
<2>获取连接(SqlSession)。获取xxxMapper接口。
- 无核心需要被spring管理的对象。
- SqlSession对象是由SqlSessionFactory初始化那个阶段就已经造好。
<3>调用数据层方法完成操作。
- 无核心需要被spring管理的对象。
- 虽然accountDao是执行业务的对象,但依旧不是根源的对象。并且随着业务的更换,造出的对象也会更新。
<4>关闭连接。
- 无核心需要被spring管理的对象。
(2)MyBatis核心配置文件分析。
- MyBatis核心配置文件所有的配置都是围绕着SqlSessionFactory对象进行的。
<1>初始属性、加载外部资源文件。
- 读取外部文件的值。不是核心关键所在。
<2>初始化类型别名。
- 操作数据库得到的数据结果进行封装到对应的实体类中。次要核心。
<3>配置数据源连接信息。
- 配置数据源对象DataSource。核心所在。
- 造出SqlSession对象是操作对应的数据库的。而这些配置都是为核心对象SqlSessionFactory服务的。
<4>初始化映射配置。
- 这部分主要关于业务的操作。
- 初始化SqlSessionFactory对象后,再根据不同的配置、不同的接口,获得不同的xxxMapper,再去操作不同的库与表。所以也不是核心关键所在。
(3)分析小结。
- 最终经过分析:MyBatis核心的对象SqlSessionFactory是需要交给Spring进行管理的。
三、Spring整合MyBatis。(实操)
- 注:数据库、数据表、实体类的代码与纯MyBatis开发程序一致。
(1)导入Spring整合Mybatis核心依赖坐标。
<1>spring-context。(基础核心)
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.18</version></dependency>
<2>druid。(阿里数据源)
<!--阿里数据库连接池druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency>
<3>mybatis。(基础核心)
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --><!--mybatis依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency>
<4>mysql-connector-java。(mysql核心jar)
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><!--mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency>
<5>spring-jdbc。(spring操作数据库核心jar)
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.18</version></dependency>
<6>mybatis-spring。(spring整合mybatis核心jar)
- 注意这个jar与mybatis的基础依赖的版本是有联系的。随着版本的更替都会更替。
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.1</version></dependency>
<7>lombok。(快速开发)
<!--Lombok依赖坐标--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version><scope>provided</scope></dependency>
(2)service层。
<1>AccountService接口。
package com.hyl.service;import com.hyl.domain.Account;import java.util.List;public interface AccountService {/*** 新增* @param account*/void save(Account account);/*** 更新* @param account*/void update(Account account);/*** 删除* @param id*/void delete(Integer id);/*** 根据id查询* @param id* @return*/Account selectById(Integer id);/*** 查询所有* @return*/List<Account> selectAll(); }
<2>AccountServiceImpl实现类。
- 使用注解@Service将该实现类交给spring容器管理。
- 使用注解@Autowired完成dao层AccountDao的自动装配。
package com.hyl.service.impl;import com.hyl.dao.AccountDao; import com.hyl.domain.Account; import com.hyl.service.AccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.util.List;@Service public class AccountServiceImpl implements AccountService {@Autowiredprivate AccountDao accountDao;@Overridepublic void save(Account account) {accountDao.save(account);}@Overridepublic void update(Account account) {accountDao.update(account);}@Overridepublic void delete(Integer id) {accountDao.delete(id);}@Overridepublic Account selectById(Integer id) {return accountDao.selectById(id);}@Overridepublic List<Account> selectAll() {return accountDao.selectAll();} }
(3)dao层。(Mapper代理模式开发)
- AccountDao接口。
- 无SQL映射文件。(使用注解@Selcet、@Insert、@Delete、@Update配置映射关系与SQL语句)
package com.hyl.dao;import com.hyl.domain.Account; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update;import java.util.List;/*** 数据层的操作接口*/ public interface AccountDao {/*** 新增*/@Insert("insert into tb_account (name,money) values (#{name},#{money})")void save(Account account);/*** 根据id删除*/@Delete("delete from tb_account where id = #{id}")void delete(Integer id);/*** 更新* @param account*/@Update("update tb_account set name = #{name} , money = #{money} where id = #{id}")void update(Account account);/*** 查询所有* @return*/@Select("select * from tb_account ")List<Account> selectAll();/*** 根据id查询* @param id* @return*/@Select("select * from tb_account where id = #{id}")Account selectById(Integer id); }
(4)Jdbc配置类。(配置数据源信息)
- 使用注解@Bean标明返回数据源对象的方法。这样Spring会自动将DataSource对象交给Spring容器管理。其它的组件(bean)都可以使用。
package com.hyl.config;import com.alibaba.druid.pool.DruidDataSource; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean;import javax.sql.DataSource;public class JdbcConfig {@Value("${jdbc.driver}")private String driver;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String userName;@Value("${jdbc.password}")private String password;/*** 1、定义方法,返回需要管理的bean(这里使用阿里提供的第三方数据源druid)* 2、使用注解@Bean 将方法的返回值声明为一个Spring管理的Bean。* 这意味着Spring会调用这个方法,并将方法的返回值(bean)存储到Spring容器中,供其他组件使用。*/@Beanpublic DataSource dataSource(){DruidDataSource druidDataSource = new DruidDataSource();druidDataSource.setDriverClassName(driver);druidDataSource.setUrl(url);druidDataSource.setUsername(userName);druidDataSource.setPassword(password);return druidDataSource;} }
(5)MyBatis配置类。(取代MyBatis核心配置文件)
- 使用注解@Bean标明返回SqlSessionFactory对象的方法。这样Spring会自动将SqlSessionFactory对象交给Spring容器管理。其它的组件(bean)都可以使用。
- 因为根据上方分析:SqlSessionFactory对象的初始化都与MyBatis核心配置文件有关,所以在返回SqlSessionFactory的方法里面要设置很多东西!
<1>SqlSessionFactoryBean、MapperScannerConfigurer对象。
- 为了简化开发,spring整合mybatis中提供了类SqlSessionFactoryBean制造bean。
- 最终的Mybatis配置类的代码如下。
package com.hyl.config;import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.mapper.MapperScannerConfigurer; import org.springframework.context.annotation.Bean;import javax.sql.DataSource;public class MyBatisConfig {@Beanpublic SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();//代替Mybatis核心配置文件标签<typeAliases>ssfb.setTypeAliasesPackage("com.hyl.domain");//因为Jdbc配置类的方法使用了@Bean注解生产DataSource对象的方法。// 则可以使用形参注入DataSource。再通过方法设置使DataSourcessfb.setDataSource(dataSource);//jdbc事务管理默认有spring-jdbc依赖处理return ssfb;}//单独方法代替Mybatis核心配置文件标签<Mappers>//使用spring整合mybatis提供的类MapperScannerConfigurer完成映射文件的扫描@Beanpublic MapperScannerConfigurer mapperScannerConfigurer() {MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();//设置映射在哪些包下mapperScannerConfigurer.setBasePackage("com.hyl.dao");return mapperScannerConfigurer;} }
- 加后缀.bak——>注释原来的MyBatis核心配置文件。方便测试。
(6)Spring配置类。
- 为了快速的开发——所以选择纯注解的开发模式。而放弃使用XML配置文件开发模式。
- 使用注解@Configuration标明这是spring的一个配置类。(平替spring配置文件)
- 使用注解@ComponentScan扫描指定包下类的注解。
- 使用注解@PropertySource加载外部properties配置文件。
- 使用注解@Import引入其它的配置类(JdbcConfig、MyBatisConfig配置类)。
package com.hyl.config;import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.PropertySource;@Configuration @ComponentScan("com.hyl") @PropertySource("classpath:jdbc.properties") @Import({JdbcConfig.class,MyBatisConfig.class}) public class SpringConfig {}
(7)测试程序。(类App02)
- 通过类AnnotationConfigApplicationContext加载spring配置类。
- spring配置类再通过注解完成其它配置类的扫描、包的注解扫描。
- 配和注解@Service使用,用容器对象调用getBean()方法获取AccountServiceImpl对象。
- 最后调用操作数据库的方法。(这里以测试根据id查询演示)。
package com.hyl;import com.hyl.config.SpringConfig; import com.hyl.domain.Account; import com.hyl.service.AccountService; import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class App02 {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);AccountService accountService = applicationContext.getBean(AccountService.class);Account account = accountService.selectById(2);System.out.println(account);applicationContext.close();} }
- 测试类App02程序运行结果如下。
- 到这里就是就实现了Spring整合MyBatis的全部操作了!也是完成快速开发的重要一步。
相关文章:
spring注解开发(Spring整合MyBatis——Mapper代理开发模式、(Spring、MyBatis、Jdbc)配置类)(6)
目录 一、纯MyBatis独立开发程序。 (1)数据库与数据表。 (2)实体类。 (3)dao层接口。(Mapper代理模式、无SQL映射文件——注解配置映射关系) (4)MyBatis核心配…...
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
Redisson 是一个高性能的 Java Redis 客户端,提供了丰富的分布式工具集,如分布式锁、Map、Queue 等,帮助开发者简化 Redis 的操作。在集成 Redisson 到项目时,开发者通常有两种选择: 使用 Redisson 原始依赖。使用 Re…...
Maven中一些基础知识点
早些时候只知道创建或者开发springboot项目时候,有一个叫pom.xml的文件可以用来管理项目所需的依赖/第三方工具。 索性稍微深入了解了一下,然后把自己认为重要的记录下来。 首先我们要引入新的依赖自然是在dependencies下写dependency,这个…...
塑造网络安全的关键事件
注:本文为 “网络安全” 相关文章合辑。 机翻,未校。 Timeline of Cyber Security: Key Events that Shaped the Field 网络安全时间表:塑造该领域的关键事件 October 29, 2023 Cyberattacks are an everyday threat, always changing. T…...
前端项目打包生成 JS 文件的核心步骤
前端项目打包生成 JS 文件的过程通常涉及以下核心步骤,以主流工具(如 Webpack、Vite、Rollup 等)为例: 一、项目准备阶段 项目结构 源代码目录(如 src/)包含 JS/TS、CSS、图片等资源配置文件(pa…...
【Pandas】pandas Series fillna
Pandas2.2 Series Computations descriptive stats 方法描述Series.backfill(*[, axis, inplace, limit, …])用于填充 Series 中缺失值(NaN)的方法Series.bfill(*[, axis, inplace, limit, …])用于填充 Series 中缺失值(NaN)的…...
微信小程序自定义导航栏实现指南
文章目录 微信小程序自定义导航栏实现指南一、自定义导航栏的需求分析二、代码实现1. WXML 结构2. WXSS 样式样式解析:3. JavaScript 逻辑三、完整代码示例四、注意事项与优化建议五、总结微信小程序自定义导航栏实现指南 在微信小程序开发中,默认的导航栏样式可能无法满足所…...
GitCode 助力 python-office:开启 Python 自动化办公新生态
项目仓库:https://gitcode.com/CoderWanFeng1/python-office 源于需求洞察,打造 Python 办公神器 项目作者程序员晚枫在运营拥有 14w 粉丝的 B 站账号 “Python 自动化办公社区” 时,敏锐察觉到非程序员群体对 Python 学习的强烈需求。在数字…...
C#开发的Base64编码及解码完整源码及注意事项
在软件开发时,经常用Base64编码和解码功能。本文介绍一个简单易用的Base64 编码和解码工具,顾名思义,就是简单快捷地进行 Base64 代码的解码或编码操作。您的数据可以轻松地编码为 Base64 编码,也可以解码为可读的格式。传输数据时…...
deepseek部署:ELK + Filebeat + Zookeeper + Kafka
## 1. 概述 本文档旨在指导如何在7台机器上部署ELK(Elasticsearch, Logstash, Kibana)堆栈、Filebeat、Zookeeper和Kafka。该部署方案适用于日志收集、处理和可视化场景。 ## 2. 环境准备 ### 2.1 机器分配 | 机器编号 | 主机名 | IP地址 | 部署组件 |-…...
[密码学实战]Java实现国密(SM2)密钥协商详解:原理、代码与实践
一、代码运行结果 二、国密算法与密钥协商背景 2.1 什么是国密算法? 国密算法是由中国国家密码管理局制定的商用密码标准,包括: SM2:椭圆曲线公钥密码算法(非对称加密/签名/密钥协商)SM3:密码杂凑算法(哈希)SM4:分组密码算法(对称加密)2.2 密钥协商的意义 在安全…...
STM32学习——RTC实时时钟(BKP与RTC外设)
RTC实时时钟 RTC实时时钟 想记录或读取日期和事件,就可以通过操作RTC实现 RTC与BKP和PWR经常同时出现 一般情况下,VBTA是电池供电口,需要接备用电池 在BKP备份寄存器写入两个数据,然后再读出之后显示,BKP的数据&a…...
SQL打折日期交叉问题
1. 数据结构:数据为平台商品促销数据 表名:good_promotion 字段名:brand(品牌)、stt(打折开始日期)、edt(打折结束日期)。 2. 需求: ① 创建表 ② 计算每个…...
智能机器人加速进化:AI大模型与传感器的双重buff加成
Deepseek不仅可以在手机里为你解答现在的困惑、占卜未来的可能,也将成为你的贴心生活帮手! 2月21日,追觅科技旗下Dreamehome APP正式接入DeepSeek-R1大模型,2月24日发布的追觅S50系列扫地机器人也成为市面上首批搭载DeepSeek-R1的…...
AI大模型-提示工程学习笔记21-图提示 (Graph Prompting)
目录 1. 图提示的核心思想 (1) 传统提示的局限性 (2) Graph Prompting 的解决方案 2. Graph Prompting 的工作流程 (1) 图构建 (2) 图选择/子图提取 (3) 图编码 (4) 提示构建 (5) LLM 推理与生成 3. Graph Prompting 的关键组件 (1) 大语言模型 (LLM) (2) 图数据库…...
C++ 中的 for 循环语句教程
摘要 for 循环是 C 中最常用的循环结构之一,用于重复执行一段代码,直到满足特定条件。它特别适合在已知循环次数的情况下使用。本教程将详细介绍 for 循环的语法、用法以及一些常见示例。 1. for 循环的基本语法 for 循环的语法如下: for …...
UniApp 中封装 HTTP 请求与 Token 管理(附Demo)
目录 1. 基本知识2. Demo3. 拓展 1. 基本知识 从实战代码中学习,上述实战代码来源:芋道源码/yudao-mall-uniapp 该代码中,通过自定义 request 函数对 HTTP 请求进行了统一管理,并且结合了 Token 认证机制 请求封装原理ÿ…...
paddlehub hub TypeError 错误
pip install paddlehub hub install chinese_ocr_db_crnn_mobile 提示错误: TypeError: Descriptors cannot be created directly. If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc > 3.19.0…...
机器学习--(随机森林,线性回归)
一、集成学习方法之随机森林 集成学习的基本思想就是将多个分类器组合,从而实现一个预测效果更好的集成分类器。集成算法可以说从一方面验证了中国的一句老话:三个臭皮匠,赛过诸葛亮。集成算法大致可以分为:Bagging,B…...
和鲸科技推出人工智能通识课程解决方案,助力AI人才培养
2025年2月,教育部副部长吴岩应港澳特区政府邀请,率团赴港澳宣讲《教育强国建设规划纲要 (2024—2035 年)》。在港澳期间,吴岩阐释了教育强国目标的任务,并与特区政府官员交流推进人工智能人才培养的办法。这一系列行动体现出人工智…...
从暴力破解到时空最优:LeetCode算法设计核心思维解密
一、算法优化金字塔模型(时间复杂度/空间复杂度协同优化) 1.1 复杂度分析的本质 大O记号的三层认知: ① 理论复杂度边界(理想模型) ② 硬件架构影响(缓存命中率/分支预测) ③ 语言特性损耗&am…...
关于在java项目部署过程MySQL拒绝连接的分析和解决方法
前言 在最近一次部署项目一次项目部署过程中,由于没有对MySQL数据库的部分权限和远程连接进行授权,导致了在执行项目功能API时,出现MySQL连接异常或MySQL拒绝连接的问题。 问题 以下是部分报错截图: 分析 根据日志提示…...
『抓包工具』安卓抓包小黄鸟 lsp过检测 雷电模拟器root(保姆级图文)
目录 准备工作雷电9.0.74 64位下载对应工具通过面具鸭安装面具安装防检测模块设置Zygisk安装小黄鸟简易抓包教程总结欢迎关注 『抓包工具』 专栏,持续更新中 欢迎关注 『抓包工具』 专栏,持续更新中 请注意不要随便升级雷电模拟器了 不然你需要重新通过面具鸭安装面具 准备工…...
k8S通过代理将集群外的中间件引入集群内访问 —— 筑梦之路
背景说明 有部分中间件是跑在Kubernetes集群之外,我们希望通过service的方式来访问集群外的中间件,比如访问我们k8s集群外的elasticsearch集群。 ES节点本身又处在一个负载均衡IP:192.168.100.100 之后,但是代理的端口号是9202&am…...
【考试大纲】高级系统架构设计师考试大纲
目录 引言一、 考试说明1.考试目标2.考试要求3.考试科目设置二、 考试范围考试科目1:系统架构设计综合知识考试科目2:系统架构设计案例分析考试科目3:系统架构设计论文引言 最新的系统架构设计师考试大纲出版于 2022 年 11 月,本考试大纲基于此版本整理。 一、 考试说明…...
三个小时学完vue3 —— 简单案例(二)
三个小时学完vue3(二) 图片轮播案例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…...
筑牢安全防线:工商业场所燃气泄漏防护新方案
燃气安全是企业经营不可逾越的生命线。在餐饮后厨、化工车间、酒店锅炉房等场所,可燃气体一旦泄漏,极易引发严重事故。如何实现精准监测、快速响应,成为工业及商业领域安全管理的核心诉求。旭华智能深耕安全监测领域,推出的工业及…...
git上传仓库操作
在 Visual Studio Code (VSCode) 中,手动将本地仓库与远程仓库关联起来是一个常见的需求。以下是详细的操作步骤和解释: 前提条件 已安装 Git:确保你的系统中已经安装了 Git,并且可以通过命令行运行 git 命令。已初始化本地仓库&…...
广义线性模型下的数据分析(R语言)
一、实验目的: 通过上机试验,掌握利用R实现线性回归分析、逻辑回归、列联分析及方差分析,并能对分析结果进行解读。 数据: 链接: https://pan.baidu.com/s/1JqZ_KbZJEk-pqSUWKwOFEw 提取码: hxts 二、实验内容: 1、2…...
贪心算法精品题
1.找钱问题 本题的贪心策略在于我们希望就可能的保留作用大的5元 class Solution { public:bool lemonadeChange(vector<int>& bills) {std::map<int ,int> _map;for(auto ch:bills){if(ch 5) _map[ch];else if(ch 10){if(_map[5] 0) return false;else{_m…...
爱普生汽车用显示控制器IC:ScalerIC,汽车接口IC,相机接口IC
爱普生汽车显示控制器IC,汽车显示控制器芯片可以分为三类:爱普生显示控制芯片Scaler IC ,爱普生汽车接口IC,爱普生相机接口IC。下面就给大家分别介绍下这三类芯片的具体型号的特征及用途。 爱普生显示控制芯片 Scaler IC Scaler…...
深度学习基础--ResNet50V2网络的讲解,ResNet50V2的复现(pytorch)以及用复现的ResNet50做鸟类图像分类
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 如果说最经典的神经网络,ResNet肯定是一个,从ResNet发布后,作者又进行修改,命名为ResNe50v2,…...
物理竞赛中的线性代数
线性代数 1 行列式 1.1 n n n 阶行列式 定义 1.1.1:称以下的式子为一个 n n n 阶行列式: ∣ A ∣ ∣ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a n 1 a n 2 ⋯ a n n ∣ \begin{vmatrix}\mathbf A\end{vmatrix} \begin{vmatrix} a_{11…...
OptiTrack光学跟踪系统:引领工厂机器人应用的革新浪潮
在现代化的工厂生产线上,一台机械臂正以惊人的毫米级精度执行着精密零件的装配任务。这一精准操作的背后,是OptiTrack光学跟踪系统的实时捕捉与优化,它正助力生产效率与产品质量迈向新的高度。如今,这一技术正在全球范围内广泛应用…...
Coze/Dify/Ollama在玩ai时候的用途
Coze、Dify 和 Ollama 是三种不同的工具或平台,它们各自有不同的定位和用途。以下是对它们的区别、优缺点以及部署和使用方式的详细分析。 1. Coze 简介 Coze 是一个专注于构建基于大语言模型(LLM)的应用程序的开发平台。它类似于 Dify&…...
使用Docker Compose部署 MySQL8
MySQL 8 是一个功能强大的关系型数据库管理系统,而 Docker 则是一个流行的容器化平台。结合使用它们可以极大地简化 MySQL 8 的部署过程,并且确保开发环境和生产环境的一致性。 安装 Docker 和 Docker Compose 首先,确保你的机器上已经安装了 Docker 和 Docker Compose。 …...
Golang快速上手02/Golang基础
4.控制语句 4.1条件控制语句 4.1.1if-elseif-else 与clang不同,if不需要加() if <condition1> {<block1> } else if <condition2> {<block2> } else {<block0> }示例 a : 10 if a > 5 {fmt.Println("a > 5") } els…...
Nginx处理http的流程
文章目录 前言一、发版本后旧版本可以用项目基本情况Nginx 配置**解释每一行的作用:****表现和行为:****适用场景**:资源的缓存策略 在这里插入图片描述 二, nginx处理http的流程Nginx 的 GitHub 源码地址 **Nginx 核心源码解读&a…...
算法之刷题汇总
剑指 Offer 剑指 Offer 题解 | CS-Notes 面试笔记 Leetcode Leetcode 题解 | CS-Notes 面试笔记 GitCode - 全球开发者的开源社区,开源代码托管平台...
【AIGC系列】4:Stable Diffusion应用实践和代码分析
AIGC系列博文: 【AIGC系列】1:自编码器(AutoEncoder, AE) 【AIGC系列】2:DALLE 2模型介绍(内含扩散模型介绍) 【AIGC系列】3:Stable Diffusion模型原理介绍 【AIGC系列】4࿱…...
【Python爬虫(81)】当量子计算邂逅Python爬虫:一场技术变革的预演
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取,还涉及数据处理与分析。无论是新手小白还是进阶开发…...
Java Web应用中获取客户端的真实IP地址
Java Web应用中获取客户端的真实IP地址,尤其在存在代理服务器的情况下。 代码示例: public static String getClientIP(HttpServletRequest request) {String ip = parseCommaSeparatedIPs(request.getHeader("X-Forwarded-For"));if (isInvalid(ip)) {ip = pars…...
R语言+AI提示词:贝叶斯广义线性混合效应模型GLMM生物学Meta分析
全文链接:https://tecdat.cn/?p40797 本文旨在帮助0基础或只有简单编程基础的研究学者,通过 AI 的提示词工程,使用 R 语言完成元分析,包括数据处理、模型构建、评估以及结果解读等步骤(点击文末“阅读原文”获取完整代…...
LangChain原理解析及开发实战指南(2025年最新版)
一、LangChain核心架构解析 1.1 框架设计理念 LangChain是基于提示工程(Prompt Engineering)构建的LLM应用开发框架,其核心思想是通过模块化组件实现大语言模型与业务系统的无缝对接。该框架采用分层设计: 接口层:统一对接OpenAI、DeepSee…...
赋能农业数字化转型 雏森科技助力“聚农拼”平台建设
赋能农业数字化转型,雏森科技助力“聚农拼”平台建设 在数字化浪潮席卷各行业的今天,农业领域也在积极探索转型升级之路。中农集团一直以“根植大地,服务三农”为核心,以“乡村振兴,农民增收”为目标,及时…...
CMU15445(2023fall) Project #2 - Extendible Hash Index 匠心分析
胡未灭,鬓已秋,泪空流 此生谁料 心在天山 身老沧州 ——诉衷情 完整代码见: SnowLegend-star/CMU15445-2023fall: Having Conquered the Loftiest Peak, We Stand But a Step Away from Victory in This Stage. With unwavering determinati…...
深度剖析Seata源码:解锁分布式事务处理的核心逻辑
文章目录 写在文章开头如何使用源码(配置转掉)基于AT模式详解Seata全链路流程Seata服务端启动本地服务如何基于GlobalTransaction注解开启事务客户端如何开启分布式事务RM和TC如何协调处理分支事务RM生成回滚日志事务全局提交与回滚小结参考写在文章开头 在当今分布式系统日益…...
python配置mmcv与mmdet环境
首先查看自己的cuda版本 nvcc --version 安装与cuda对应的torch版本,对应关系 Previous PyTorch Versions | PyTorch 安装对应的mmcv版本,使用下面命令可以自动安装匹配的版本,使用mim安装 mim install mmcv-full -f https://download.o…...
ESP 32控制无刷电机2
import machine import time import socket import network from machine import I2C, Pin, ADC def start_ap(): """ 启动ESP32的AP模式 """ ap network.WLAN(network.AP_IF) ap.active(True) ssid ESP32_APTest …...
【uniapp原生】实时记录接口请求延迟,并生成写入文件到安卓设备
在开发实时数据监控应用时,记录接口请求的延迟对于性能分析和用户体验优化至关重要。本文将基于 UniApp 框架,介绍如何实现一个实时记录接口请求延迟的功能,并深入解析相关代码的实现细节。 前期准备&必要的理解 1. 功能概述 该功能的…...