springboot3.2.4+Mybatis-plus在graalvm21环境下打包exe
springboot3.2.4+Mybatis-plus在graalvm21环境下打包exe
- 前提条件为之前已经能直接打包springboot3.2.4项目了
- 然后在此基础上接入Mybatis-plus,然后能够正常进行打包exe并且执行,参考之前的文章进行打包
核心配置如下
package com.example.demo.config;import com.baomidou.mybatisplus.annotation.IEnum;
import com.baomidou.mybatisplus.core.MybatisParameterHandler;
import com.baomidou.mybatisplus.core.MybatisXMLLanguageDriver;
import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.handlers.CompositeEnumTypeHandler;
import com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.core.toolkit.support.SerializedLambda;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import com.baomidou.mybatisplus.extension.handlers.GsonTypeHandler;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.commons.logging.LogFactory;
import org.apache.ibatis.annotations.DeleteProvider;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.UpdateProvider;
import org.apache.ibatis.cache.decorators.FifoCache;
import org.apache.ibatis.cache.decorators.LruCache;
import org.apache.ibatis.cache.decorators.SoftCache;
import org.apache.ibatis.cache.decorators.WeakCache;
import org.apache.ibatis.cache.impl.PerpetualCache;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.executor.parameter.ParameterHandler;
import org.apache.ibatis.executor.resultset.ResultSetHandler;
import org.apache.ibatis.executor.statement.BaseStatementHandler;
import org.apache.ibatis.executor.statement.RoutingStatementHandler;
import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.javassist.util.proxy.ProxyFactory;
import org.apache.ibatis.javassist.util.proxy.RuntimeSupport;
import org.apache.ibatis.logging.Log;
import org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl;
import org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl;
import org.apache.ibatis.logging.log4j2.Log4j2Impl;
import org.apache.ibatis.logging.nologging.NoLoggingImpl;
import org.apache.ibatis.logging.slf4j.Slf4jImpl;
import org.apache.ibatis.logging.stdout.StdOutImpl;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.reflection.TypeParameterResolver;
import org.apache.ibatis.scripting.defaults.RawLanguageDriver;
import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.aot.hint.MemberCategory;
import org.springframework.aot.hint.RuntimeHints;
import org.springframework.aot.hint.RuntimeHintsRegistrar;
import org.springframework.beans.PropertyValue;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.aot.BeanFactoryInitializationAotContribution;
import org.springframework.beans.factory.aot.BeanFactoryInitializationAotProcessor;
import org.springframework.beans.factory.aot.BeanRegistrationExcludeFilter;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.ConstructorArgumentValues;
import org.springframework.beans.factory.support.MergedBeanDefinitionPostProcessor;
import org.springframework.beans.factory.support.RegisteredBean;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportRuntimeHints;
import org.springframework.core.ResolvableType;
import org.springframework.util.ClassUtils;
import org.springframework.util.ReflectionUtils;import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;/*** @author lyk* @since 2024-03-30*/
@Configuration(proxyBeanMethods = false)
@ImportRuntimeHints(MyBatisNativeConfiguration.MyBaitsRuntimeHintsRegistrar.class)
public class MyBatisNativeConfiguration {@BeanMyBatisBeanFactoryInitializationAotProcessor myBatisBeanFactoryInitializationAotProcessor() {return new MyBatisBeanFactoryInitializationAotProcessor();}@Beanstatic MyBatisMapperFactoryBeanPostProcessor myBatisMapperFactoryBeanPostProcessor() {return new MyBatisMapperFactoryBeanPostProcessor();}static class MyBaitsRuntimeHintsRegistrar implements RuntimeHintsRegistrar {@Overridepublic void registerHints(RuntimeHints hints, ClassLoader classLoader) {Stream.of(RawLanguageDriver.class,// TODO 增加了MybatisXMLLanguageDriver.classXMLLanguageDriver.class, MybatisXMLLanguageDriver.class,RuntimeSupport.class,ProxyFactory.class,Slf4jImpl.class,Log.class,JakartaCommonsLoggingImpl.class,Log4j2Impl.class,Jdk14LoggingImpl.class,StdOutImpl.class,NoLoggingImpl.class,SqlSessionFactory.class,PerpetualCache.class,FifoCache.class,LruCache.class,SoftCache.class,WeakCache.class,//TODO 增加了MybatisSqlSessionFactoryBean.classSqlSessionFactoryBean.class, MybatisSqlSessionFactoryBean.class,ArrayList.class,HashMap.class,TreeSet.class,HashSet.class).forEach(x -> hints.reflection().registerType(x, MemberCategory.values()));Stream.of("org/apache/ibatis/builder/xml/*.dtd","org/apache/ibatis/builder/xml/*.xsd").forEach(hints.resources()::registerPattern);hints.serialization().registerType(SerializedLambda.class);hints.serialization().registerType(SFunction.class);hints.serialization().registerType(java.lang.invoke.SerializedLambda.class);hints.reflection().registerType(SFunction.class);hints.reflection().registerType(SerializedLambda.class);hints.reflection().registerType(java.lang.invoke.SerializedLambda.class);hints.proxies().registerJdkProxy(StatementHandler.class);hints.proxies().registerJdkProxy(Executor.class);hints.proxies().registerJdkProxy(ResultSetHandler.class);hints.proxies().registerJdkProxy(ParameterHandler.class);// hints.reflection().registerType(MybatisPlusInterceptor.class);hints.reflection().registerType(AbstractWrapper.class,MemberCategory.values());hints.reflection().registerType(LambdaQueryWrapper.class,MemberCategory.values());hints.reflection().registerType(LambdaUpdateWrapper.class,MemberCategory.values());hints.reflection().registerType(UpdateWrapper.class,MemberCategory.values());hints.reflection().registerType(QueryWrapper.class,MemberCategory.values());hints.reflection().registerType(BoundSql.class,MemberCategory.DECLARED_FIELDS);hints.reflection().registerType(RoutingStatementHandler.class,MemberCategory.DECLARED_FIELDS);hints.reflection().registerType(BaseStatementHandler.class,MemberCategory.DECLARED_FIELDS);hints.reflection().registerType(MybatisParameterHandler.class,MemberCategory.DECLARED_FIELDS);hints.reflection().registerType(IEnum.class,MemberCategory.INVOKE_PUBLIC_METHODS);// register typeHandlerhints.reflection().registerType(CompositeEnumTypeHandler.class, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS);hints.reflection().registerType(FastjsonTypeHandler.class, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS);hints.reflection().registerType(GsonTypeHandler.class, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS);hints.reflection().registerType(JacksonTypeHandler.class, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS);hints.reflection().registerType(MybatisEnumTypeHandler.class, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS);}}static class MyBatisBeanFactoryInitializationAotProcessorimplements BeanFactoryInitializationAotProcessor, BeanRegistrationExcludeFilter {private final Set<Class<?>> excludeClasses = new HashSet<>();MyBatisBeanFactoryInitializationAotProcessor() {excludeClasses.add(MapperScannerConfigurer.class);}@Override public boolean isExcludedFromAotProcessing(RegisteredBean registeredBean) {return excludeClasses.contains(registeredBean.getBeanClass());}@Overridepublic BeanFactoryInitializationAotContribution processAheadOfTime(ConfigurableListableBeanFactory beanFactory) {String[] beanNames = beanFactory.getBeanNamesForType(MapperFactoryBean.class);if (beanNames.length == 0) {return null;}return (context, code) -> {RuntimeHints hints = context.getRuntimeHints();for (String beanName : beanNames) {BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName.substring(1));PropertyValue mapperInterface = beanDefinition.getPropertyValues().getPropertyValue("mapperInterface");if (mapperInterface != null && mapperInterface.getValue() != null) {Class<?> mapperInterfaceType = (Class<?>) mapperInterface.getValue();if (mapperInterfaceType != null) {registerReflectionTypeIfNecessary(mapperInterfaceType, hints);hints.proxies().registerJdkProxy(mapperInterfaceType);hints.resources().registerPattern(mapperInterfaceType.getName().replace('.', '/').concat(".xml"));registerMapperRelationships(mapperInterfaceType, hints);}}}};}private void registerMapperRelationships(Class<?> mapperInterfaceType, RuntimeHints hints) {Method[] methods = ReflectionUtils.getAllDeclaredMethods(mapperInterfaceType);for (Method method : methods) {if (method.getDeclaringClass() != Object.class) {ReflectionUtils.makeAccessible(method);registerSqlProviderTypes(method, hints, SelectProvider.class, SelectProvider::value, SelectProvider::type);registerSqlProviderTypes(method, hints, InsertProvider.class, InsertProvider::value, InsertProvider::type);registerSqlProviderTypes(method, hints, UpdateProvider.class, UpdateProvider::value, UpdateProvider::type);registerSqlProviderTypes(method, hints, DeleteProvider.class, DeleteProvider::value, DeleteProvider::type);Class<?> returnType = MyBatisMapperTypeUtils.resolveReturnClass(mapperInterfaceType, method);registerReflectionTypeIfNecessary(returnType, hints);MyBatisMapperTypeUtils.resolveParameterClasses(mapperInterfaceType, method).forEach(x -> registerReflectionTypeIfNecessary(x, hints));}}}@SafeVarargsprivate <T extends Annotation> void registerSqlProviderTypes(Method method, RuntimeHints hints, Class<T> annotationType, Function<T, Class<?>>... providerTypeResolvers) {for (T annotation : method.getAnnotationsByType(annotationType)) {for (Function<T, Class<?>> providerTypeResolver : providerTypeResolvers) {registerReflectionTypeIfNecessary(providerTypeResolver.apply(annotation), hints);}}}private void registerReflectionTypeIfNecessary(Class<?> type, RuntimeHints hints) {if (!type.isPrimitive() && !type.getName().startsWith("java")) {hints.reflection().registerType(type, MemberCategory.values());}}}static class MyBatisMapperTypeUtils {private MyBatisMapperTypeUtils() {// NOP}static Class<?> resolveReturnClass(Class<?> mapperInterface, Method method) {Type resolvedReturnType = TypeParameterResolver.resolveReturnType(method, mapperInterface);return typeToClass(resolvedReturnType, method.getReturnType());}static Set<Class<?>> resolveParameterClasses(Class<?> mapperInterface, Method method) {return Stream.of(TypeParameterResolver.resolveParamTypes(method, mapperInterface)).map(x -> typeToClass(x, x instanceof Class ? (Class<?>) x : Object.class)).collect(Collectors.toSet());}private static Class<?> typeToClass(Type src, Class<?> fallback) {Class<?> result = null;if (src instanceof Class<?>) {if (((Class<?>) src).isArray()) {result = ((Class<?>) src).getComponentType();} else {result = (Class<?>) src;}} else if (src instanceof ParameterizedType) {ParameterizedType parameterizedType = (ParameterizedType) src;int index = (parameterizedType.getRawType() instanceof Class&& Map.class.isAssignableFrom((Class<?>) parameterizedType.getRawType())&& parameterizedType.getActualTypeArguments().length > 1) ? 1 : 0;Type actualType = parameterizedType.getActualTypeArguments()[index];result = typeToClass(actualType, fallback);}if (result == null) {result = fallback;}return result;}}static class MyBatisMapperFactoryBeanPostProcessor implements MergedBeanDefinitionPostProcessor, BeanFactoryAware {private static final org.apache.commons.logging.Log LOG = LogFactory.getLog(MyBatisMapperFactoryBeanPostProcessor.class);private static final String MAPPER_FACTORY_BEAN = "org.mybatis.spring.mapper.MapperFactoryBean";private ConfigurableBeanFactory beanFactory;@Overridepublic void setBeanFactory(BeanFactory beanFactory) {this.beanFactory = (ConfigurableBeanFactory) beanFactory;}@Overridepublic void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName) {if (ClassUtils.isPresent(MAPPER_FACTORY_BEAN, this.beanFactory.getBeanClassLoader())) {resolveMapperFactoryBeanTypeIfNecessary(beanDefinition);}}private void resolveMapperFactoryBeanTypeIfNecessary(RootBeanDefinition beanDefinition) {if (!beanDefinition.hasBeanClass() || !MapperFactoryBean.class.isAssignableFrom(beanDefinition.getBeanClass())) {return;}if (beanDefinition.getResolvableType().hasUnresolvableGenerics()) {Class<?> mapperInterface = getMapperInterface(beanDefinition);if (mapperInterface != null) {// Exposes a generic type information to context for prevent early initializingConstructorArgumentValues constructorArgumentValues = new ConstructorArgumentValues();constructorArgumentValues.addGenericArgumentValue(mapperInterface);beanDefinition.setConstructorArgumentValues(constructorArgumentValues);beanDefinition.setTargetType(ResolvableType.forClassWithGenerics(beanDefinition.getBeanClass(), mapperInterface));}}}private Class<?> getMapperInterface(RootBeanDefinition beanDefinition) {try {return (Class<?>) beanDefinition.getPropertyValues().get("mapperInterface");}catch (Exception e) {LOG.debug("Fail getting mapper interface type.", e);return null;}}}
}
package com.example.demo.config;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @author lyk* @since 2024-03-30*/
@Configuration
//TODO 如果使用这个方式的话,记得一定要指定sqlSessionTemplateRef或sqlSessionFactoryRef https://github.com/mybatis/spring-boot-starter/wiki/Quick-Start-for-building-native-image#how-to-use-mapperscan
@MapperScan(basePackages = "com.example.demo.mapper", sqlSessionTemplateRef = "sqlSessionTemplate")
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){MybatisPlusInterceptor plusInterceptor = new MybatisPlusInterceptor();//plusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));//TODO 3.5.3.1 以下插件多的话,可能会报异常,这个在最新版本修改. https://github.com/baomidou/mybatis-plus/issues/5532
// plusInterceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
// plusInterceptor.addInnerInterceptor(new IllegalSQLInnerInterceptor());
// plusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());return plusInterceptor;}}
demo地址如下
https://gitee.com/lgbisha/springboot3-mybatis-plus/tree/master
相关文章:
springboot3.2.4+Mybatis-plus在graalvm21环境下打包exe
springboot3.2.4Mybatis-plus在graalvm21环境下打包exe 前提条件为之前已经能直接打包springboot3.2.4项目了然后在此基础上接入Mybatis-plus,然后能够正常进行打包exe并且执行,参考之前的文章进行打包 核心配置如下 package com.example.demo.config…...
Kubernetes(K8S)学习(二):K8S常用组件
K8S常用组件 一、 Controllers1、ReplicationController(RC)2、ReplicaSet(RS)3、Deployment 二、Labels and Selectors三、Namespace(命名空间)1、简介2、测试2.1、创建namespace2.2、创建pod 四、Network1、集群内:同一个Pod中的容器通信2、…...
如何使用群晖WebDAV实现固定公网地址同步Zotero文献管理器
文章目录 前言1. Docker 部署 Trfɪk2. 本地访问traefik测试3. Linux 安装cpolar4. 配置Traefik公网访问地址5. 公网远程访问Traefik6. 固定Traefik公网地址 前言 Trfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件,能轻易的部署微服务。它支持多种后端 (D…...
【JavaSE】初识线程,线程与进程的区别
文章目录 ✍线程是什么?✍线程和进程的区别✍线程的创建1.继承 Thread 类2.实现Runnable接口3.匿名内部类4.匿名内部类创建 Runnable ⼦类对象5.lambda 表达式创建 Runnable ⼦类对象 ✍线程是什么? ⼀个线程就是⼀个 “执行流”. 每个线程之间都可以按…...
全国青少年软件编程(Python)等级考试三级考试真题2023年9月——持续更新.....
青少年软件编程(Python)等级考试试卷(三级) 分数:100 题数:38 一、单选题(共25题,共50分) 1.有一组数据存在列表中,things[“桌子”,“椅子”,“茶几”,“沙发”,“西瓜”,“苹果”,“草莓”,“…...
react-navigation:
我的仓库地址:https://gitee.com/ruanjianbianjing/bj-hybrid react-navigation: 学习文档:https://reactnavigation.org 安装核心包: npm install react-navigation/native 安装react-navigation/native本身依赖的相关包: react-nativ…...
nginx负载均衡模式
轮询 (Round Robin) 用法:这是Nginx默认的负载均衡策略。每个请求会按顺序分配给upstream中的后端服务器,即按照配置的服务器列表顺序依次分配。 upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.…...
手写简易操作系统(十七)--编写键盘驱动
前情提要 上一节我们实现了锁与信号量,这一节我们就可以实现键盘驱动了,访问键盘输入的数据也属于临界区资源,所以需要锁的存在。 一、键盘简介 之前的 ps/2 键盘使用的是中断驱动的,在当时,按下键盘就会触发中断&a…...
springboot中基于RestTemplate 类 实现调用第三方API接口【POST版本】
https://blog.csdn.net/Drug_/article/details/135111675 这一篇的升级版 还是先配置文件 package com.init.config;import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.clie…...
编程器固件修改教程
首发csdn,转载请说明出处,保留一切权益。 关于编程器固件 所谓编程器固件是用编程器读取嵌入式设备的FLASH存储数据生成的文件,类似于直接用工具复制整个硬盘 编程器固件与普通固件的差异 编程器固件是用特定的结构(按顺序、大小)将一些文件系…...
Python从原Excel表中抽出数据存入同一文件的新的Sheet(附源码)
python读取excel数据。Python在从原Excel表中抽出数据并存储到同一文件的新的Sheet中的功能,充分展示了其在数据处理和自动化操作方面的强大能力。这一功能不仅简化了数据迁移的过程,还提高了数据处理的效率,为数据分析和管理工作带来了极大的…...
计算机网络实验六:路由信息协议RIP
目录 6 实验六:路由信息协议RIP 6.1 实验目的 6.2 实验步骤 6.2.1 构建网络拓扑、配置各网络设备 6.2.2 网络功能验证测试 6.3 实验总结 6 实验六:路由信息协议RIP 6.1 实验目的 (1)学习RIP协议的工作原理和特点 (2)学习如何选择最短路径路由。 (3)进一步掌握…...
MySQL数据库备份策略与实践详解
目录 引言 一、MySQL数据库备份的重要性 (一)数据丢失的原因 (二)数据丢失的后果 二、MySQL备份类型 (一)根据数据库状态 (二)根据数据的完整性 (三)…...
String类相关oj练习
前言: 此处练习对应博客文章:公主,王子,请点击 1.第一次只出现一次的字符 做题首先看清要求和提示: 给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不…...
【Linux】进程实践项目 —— 自主shell编写
送给大家一句话: 不管前方的路有多苦,只要走的方向正确,不管多么崎岖不平,都比站在原地更接近幸福。 —— 宫崎骏《千与千寻》 自主shell命令编写 1 前言2 项目实现2.1 创建命令行2.2 获取命令2.3 分割命令2.4 运行命令 3 源代码…...
基于SpringBoot和Vue的学生笔记共享平台的设计与实现
今天要和大家聊的是一款基于SpringBoot和Vue的学生笔记共享平台的设计与实现 !!! 有需要的小伙伴可以通过文章末尾名片咨询我哦!!! 💕💕作者:李同学 💕&…...
C++心决之命名空间、重载函数和引用
目录 1. C关键字(C98) 2. 命名空间 2.1 命名空间定义 2.2 命名空间使用 3. C输入&输出 4. 缺省参数 4.1 缺省参数概念 4.2 缺省参数分类 5. 函数重载 5.1 函数重载概念 5.2 C支持函数重载的原理--名字修饰(name Mangling) 6. 引用 6.1 引用概念 6.2 引用特性…...
higress使用了解
higress使用了解 了解下 http-echo、httpbin 镜像使用 未按文档实际搭建,但大致是这样 官方文档:https://higress.io/zh-cn/docs/overview/what-is-higress 了解:利用sealos快速安装kubernetes集群:https://note.youdao.com/s…...
Swagger3探索之游龙入海
引言 后端开发中常用的接口调用工具一般使用Postman、ApiPost工具,但后期需要与前端联调,要补充接口文档花费大量时间,此时Swagger3应运而生,大大提高沟通交流的效率。 引用依赖 <!-- Swagger3 调用方式 http://ip:port/swa…...
javaWeb项目-学生考勤管理系统功能介绍
项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog 1、JAVA技术 JavaSc…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
