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

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独立开发程序。 &#xff08;1&#xff09;数据库与数据表。 &#xff08;2&#xff09;实体类。 &#xff08;3&#xff09;dao层接口。&#xff08;Mapper代理模式、无SQL映射文件——注解配置映射关系&#xff09; &#xff08;4&#xff09;MyBatis核心配…...

散户情绪周期模型(情绪影响操作)

目录 一、个股上涨阶段情绪演化二、个股下跌阶段情绪演化三、底部震荡阶段情绪演化四、情绪观察与操作工具箱1. 情绪自测量表&#xff08;每日收盘后记录&#xff09;2. 情绪-指标对照表 五、高阶情绪管理技巧1.认知重构训练2.生理指标监控&#xff08;需配合智能手表&#xff…...

计算机毕业设计SpringBoot+Vue.js网上商城系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

自动化测试无法启动(java.net.SocketException)

在运行测试代码,对浏览器进行自动化操作时,遇到了以下问题,添加依赖,编写了测试代码,但是程序无法运行 这个有两种原因(我使用的是谷歌浏览器): 网络问题: 因为需要从GitHub上下载对应包,所以有时候可能会出现网络问题,这个时候可以打开VPN之后,重新对程序进行启动 浏览器版本…...

智能机器人加速进化:AI大模型与传感器的双重buff加成

Deepseek不仅可以在手机里为你解答现在的困惑、占卜未来的可能&#xff0c;也将成为你的贴心生活帮手&#xff01; 2月21日&#xff0c;追觅科技旗下Dreamehome APP正式接入DeepSeek-R1大模型&#xff0c;2月24日发布的追觅S50系列扫地机器人也成为市面上首批搭载DeepSeek-R1的…...

osgEarth安装总结

第一步&#xff1a;安装OSG 直接通过git下载源码&#xff0c;使用cmake进行编译&#xff0c; git clone --depth 1 https://github.com/openscenegraph/OpenSceneGraph.git mkdir build cd build cmake .. make sudo make isntall编译过程中缺什么库&#xff0c;就安装什么库 …...

Java多线程与高并发专题——从AQS到ReentrantLock

关于AQS AQS就是AbstractQueuedSynchronizer抽象类&#xff0c;AQS其实就是JUC包下的一个基类&#xff0c;JUC下的很多内容都是基于AQS实现了部分功能&#xff0c;比如ReentrantLock&#xff0c;ThreadPoolExecutor&#xff0c;阻塞队列&#xff0c;CountDownLatch&#xff0c…...

力扣 寻找重复数

二分&#xff0c;双指针&#xff0c;环形链表。 题目 不看完题就是排序后&#xff0c;用两个快慢指针移动&#xff0c;找到相同就返回即可。 class Solution {public int findDuplicate(int[] nums) {Arrays.sort(nums);int l0;int r1;while(r<nums.length){if(nums[l]num…...

第48天:Web开发-JavaEE应用依赖项Log4j日志Shiro验证FastJson数据XStream格式

#知识点 1、安全开发-JavaEE-第三方依赖开发安全 2、安全开发-JavaEE-数据转换&FastJson&XStream 3、安全开发-JavaEE-Shiro身份验证&Log4j日志处理 一、Log4j 一个基于Java的日志记录工具&#xff0c;当前被广泛应用于业务系统开发&#xff0c;开发者可以利用该工…...

ES6笔记总结

首先我们需要了解一下什么是 ECMA&#xff1a; ECMA&#xff08;European Computer Manufacturers Association&#xff09;中文名称为欧洲计算机制造商协会&#xff0c;这 个组织的目标是评估、开发和认可电信和计算机标准。1994 年后该组织改名为 Ecma 国际 什么是 ECMAScr…...

使用Docker Desktop部署GitLab

1. 环境准备 确保Windows 10/11系统支持虚拟化技术&#xff08;需在BIOS中开启Intel VT-x/AMD-V&#xff09;内存建议≥8GB&#xff0c;存储空间≥100GB 2. 安装Docker Desktop 访问Docker官网下载安装包安装时勾选"Use WSL 2 instead of Hyper-V"&#xff08;推荐…...

经典算法 统计数字问题(常数时间解决)

统计数字问题 一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排&#xff0c;每个页码都不含多余的前导数字0。例如&#xff0c;第6 页用数字6 表示&#xff0c;而不是06 或006 等。数字计数问题要求对给定书的总页码n&#xff0c;计算出书的全部页…...

基于yolov8的糖尿病视网膜病变严重程度检测系统python源码+pytorch模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的糖尿病视网膜病变严重程度检测系统 基于YOLOv8的糖尿病视网膜病变严重程度检测系统是一款利用深度学习技术&#xff0c;专为糖尿病视网膜病变早期诊断设计的智能辅助工具。该系统采用YOLOv8目标检测模型&#xff0c;结合经过标注和处理的医学影像数…...

AcWing 5933:爬楼梯 ← 递归 / 递推 / 高精度

【题目来源】 https://www.acwing.com/problem/content/5936/ 【题目描述】 树老师爬楼梯&#xff0c;他可以每次走 1 级或者 2 级&#xff0c;输入楼梯的级数&#xff0c;求不同的走法数。 例如&#xff1a;楼梯一共有 3 级&#xff0c;他可以每次都走一级&#xff0c;或者第…...

c++ 中的容器 vector 与数组 array

当初自学 c 与 c 语言时&#xff0c;一直被指针弄的云里雾里。后来 c 中引入了容器&#xff0c;避免了指针。但是&#xff0c;一些教材把容器的章节放在书本中后面的章节&#xff0c;太不合理。应该把这种方便的功能放到前面&#xff0c;这样一些初学者就不会遇到太多生硬难懂的…...

我的世界1.20.1forge模组开发进阶物品(7)——具有动画、3D立体效果的物品

基础的物品大家都会做了对吧?包括武器的释放技能,这次来点难度,让物品的贴图呈现动画效果和扔出后显示3D立体效果,这个3D立体效果需要先学习blockbench,学习如何制作贴图。 Blockbench Blockbench是一个用于创建和编辑三维模型的免费软件,特别适用于Minecraft模型的设计…...

ubuntu22.04安装docker engine

在Ubuntu 22.04上安装Docker Engine可以通过以下步骤完成&#xff1a; 更新系统包索引&#xff1a; sudo apt update安装必要的依赖包&#xff1a; 这些包允许apt通过HTTPS使用仓库。 sudo apt install -y apt-transport-https ca-certificates curl software-properties-commo…...

性能测试测试策略制定|知名软件测评机构经验分享

随着互联网产品的普及&#xff0c;产品面对的用户量级也越来越大&#xff0c;能抗住指数级增长的瞬间访问量以及交易量是保障购物体验是否顺畅的至关重要的一环&#xff0c;而我们的性能测试恰恰也是为此而存在的。 性能测试是什么呢&#xff1f;性能测试要怎么测呢&#xff1f…...

Let‘s Encrypt免费证书的应用示例

文章目录 前言证书申请证书介绍cert.pemchain.pemfullchain.pemprivkey.pem 使用步骤搭建简易demo应用新建nginx配置文件测试SSL是否生效 总结 前言 最近在搞苹果应用上架的问题&#xff0c;据说用HTTP会被拒&#xff0c;但貌似不绝对&#xff0c;2017年苹果曾发公告说必须要求…...

threeJS——安装以及三要素

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装二、三要素1.场景1.1创建场景1.2向场景添加元素1.3场景属性 2.相机2.1相机特点2.2正交相机2.3空间布局2.4小姐操作 3.渲染器 总结 前言 本章简单介绍前…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...