Spring系列六:JdbcTemplate

news2024/11/25 2:40:09

🦒JdbcTemplate

📕实际需求

实际需求: 如果程序员就希望使用spring框架来做项目, spring框架如何处理对数据库的操作呢?

  1. 方案1: 使用前面做项目开发的JdbcUtils
  2. 方案2: 其实spring提供了一个操作数据库(表)功能强大的类JdbcTemplate. 我们可以同ioc容器来配置一个jdbcTemplate对象, 使用它来完成对数据库表的各种操作.

📕官方文档

官方文档: spring-framework-5.3.8\docs\javadoc-api\index.html

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

📕基本介绍

1.通过Spring可以配置数据源, 从而完成对数据表的操作
2.JdbcTemplateSpring提供的访问数据库的技术. 可以将JDBC的常用操作封装为模板方法.

📕搭建环境

1.引入使用JdbcTemplate需要的jar包
在这里插入图片描述


2.创建数据库spring和表monster

1)管理员打开cmd窗口, 开启数据库服务. 别忘了, 这很重要 安装Mysql5.7
在这里插入图片描述

2)sql代码

-- 创建数据库
CREATE DATABASE spring;
USE spring;
-- 创建表
CREATE TABLE monster (
	id INT UNSIGNED PRIMARY KEY,
	`name` VARCHAR(64) NOT NULL DEFAULT '',
	skill VARCHAR(64) NOT NULL DEFAULT ''
)CHARSET=utf8;
INSERT INTO monster VALUES(100, '孙悟空', '金箍棒');
INSERT INTO monster VALUES(200, '红孩儿', '三昧真火');
INSERT INTO monster VALUES(300, '铁扇公主', '芭蕉扇');

📕配置DataSource


3.创建配置文件 src/dbc.properties
JdbcTemplate会使用到DataSource, 而DataSource可以拿到连接去操作数据库
找到前面我们搭建的spring项目, 在src下新建jdbc.properties
在这里插入图片描述

jdbc.user=root
jdbc.pwd=zzw
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring

4.创建配置文件 src/JdbcTemplate_ioc.xml
通过属性文件配置bean
在这里插入图片描述

JdbcTemplate_ioc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--引入外部的jdbc.properties文件-->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!--配置数据源对象-DataSource-->
    <bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource">
        <!--给数据源对象配置属性值-->
        <property name="user" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.pwd}"/>
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
    </bean>
</beans>

5.在com.zzw.spring.test包下新建测试类JdbcTemplateTest

public class JdbcTemplateTest {
    @Test
    public void testDataSourceByJdbcTemplate() {
        //获取容器
        ApplicationContext ioc =
                new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");
		//在这里打个断点
        System.out.println("ok");
    }
}

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

public class JdbcTemplateTest {
    @Test
    public void testDataSourceByJdbcTemplate() {
        //获取容器
        ApplicationContext ioc =
                new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");

        //因为ComboPooledDataSource类实现了DataSource接口, 所以我们可以用接口类型来获取 comboPooledDataSource对象
        DataSource dataSource = ioc.getBean(DataSource.class);
        Connection connection = dataSource.getConnection();
        
        //获取到connection=com.mchange.v2.c3p0.impl.NewProxyConnection@2cd2a21f
        System.out.println("获取到connection=" + connection);
        connection.close();
        System.out.println("ok");
    }
}

📕添加数据

6.配置JdbcTemplate_ioc.xml, 将数据源分配给JdbcTemplate bean

JdbcTemplate_ioc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--引入外部的jdbc.properties文件-->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!--配置数据源对象-DataSource-->
    <bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource">
        <!--给数据源对象配置属性值-->
        <property name="user" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.pwd}"/>
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
    </bean>

    <!--配置JdbcTemplate对象-->
    <!--JdbcTemplate会使用到DataSource, 而DataSource可以拿到连接去操作数据库-->
    <bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate">
        <!--给JdbcTemplate对象配置dateSource-->
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

测试通过JdbcTemplate对象完成添加数据

public class JdbcTemplateTest {
    @Test
    public void addDataByJdbcTemplate() {
        //获取到容器
        ApplicationContext ioc =
                new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");

        //获取JdbcTemplate对象, 这里我们先 debug一下
        System.out.println("ok");
    }
}

在这里插入图片描述

public class JdbcTemplateTest {
    @Test
    public void addDataByJdbcTemplate() {
        //获取到容器
        ApplicationContext ioc =
                new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");

        //获取JdbcTemplate对象 [按类型获取]
        JdbcTemplate jdbcTemplate = ioc.getBean(JdbcTemplate.class);
        //1.添加方式①
        //String sql = "insert into monster values(400, '陆小千', '魔幻手机')";
        //jdbcTemplate.execute(sql);
        //2.添加方式② ?占位符, 可以防止sql注入
        String sql = "insert into monster values(?, ?, ?)";
        //affected表示 执行后表受影响的行数
        int affected = jdbcTemplate.update(sql, 500, "金角大王", "紫金红葫芦");

        System.out.println("add success afftected=" + affected);
    }
}

在这里插入图片描述

📕修改数据

public class JdbcTemplateTest {
    //测试通过JdbcTemplate对象完成修改数据
    @Test
    public void updateDataByJdbcTemplate() {
        //获取到容器
        ApplicationContext ioc =
                new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");

        //获取JdbcTemplate对象
        JdbcTemplate jdbcTemplate = ioc.getBean(JdbcTemplate.class);

        //组织SQL
        String sql = "update monster set skill = ? where id = ?";
        //假使修改后的数据和修改前的数据一样, 也认为是修改成功了一条语句, affected返回 1, 因为它没有判断要修改的数据
        int affected = jdbcTemplate.update(sql, "美人计", 300);
        System.out.println("update ok affected=" + affected);
    }
}

📕批量处理

public class JdbcTemplateTest {
    //测试通过JdbcTemplate对象完成批量添加数据
    //这里有一个使用API的技巧

    /**
     * 说明
     * 1.对于某些类, 有很多API, 使用的buzhou
     * 2.使用技巧: (1)先确定API名字 (2)根据API提供相应的参数 [组织参数]
     *           (3)把自己的调用思路清晰 (4)根据API, 可以推测类的用法和功能
     */
    @Test
    public void addBatchDataByJdbcTemplate() {
        //获取到容器
        ApplicationContext ioc =
                new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");

        //获取JdbcTemplate对象
        JdbcTemplate jdbcTemplate = ioc.getBean(JdbcTemplate.class);

        //1.先确定, 猜测API名称 update -> batchUpdate [如果出现问题,再重新找]
        //public int[] batchUpdate(String sql, List<Object[]> batchArgs){}
        //2.准备参数 [构建实参]
        String sql = "insert into monster values(?, ?, ?)";
        List<Object[]> batchArgs = new ArrayList<>();
        batchArgs.add(new Object[]{600, "鼠鼠", "偷吃粮食"});
        batchArgs.add(new Object[]{700, "猫猫", "抓老鼠"});
        //3.调用
        //说明: 返回结果是一个数组, 每个元素对应上面的sql语句对表的影响记录数
        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
        //输出
        for (int anInt : ints) {
            System.out.println("anInt=" + anInt);
        }
        System.out.println("batch add ok~");
    }
}

📕查询后封装成对象

在spring项目中我们已经创建了Monster实体类

这里有一个知识点: 给字段起别名, 应对应实体类的属性. 我们在前面的家居购项目中遇到过

在这里插入图片描述

public class JdbcTemplateTest {
    /**
     * 查询id=100的monster对并封装到Monter实体对象[在实际开发中非常有用]
     */
    @Test
    public void selectDataByJdbcTemplate() {
        //获取到容器
        ApplicationContext ioc =
                new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");

        //获取JdbcTemplate对象
        JdbcTemplate jdbcTemplate = ioc.getBean(JdbcTemplate.class);

        //1.确定API query -> queryForObject
        //public <T> T queryForObject(String sql, RowMapper<T> rowMapper, @Nullable Object... args)
        //2.准备参数
        String sql = "SELECT id AS monsterId, `name`, skill FROM monster WHERE id = 100";
        //使用了RowMapper 接口来对返回的数据, 进行一个封装 底层使用的反射 -> setter方法
        //细节: 你查询的记录的表的字段需要和 Monster对象的字段名保持一致
        RowMapper<Monster> rowMapper = new BeanPropertyRowMapper<>();
        //3.调用
        Monster monster = jdbcTemplate.queryForObject(sql, rowMapper);
        //输出
        System.out.println("monster=" + monster);
        System.out.println("query ok~");
    }
}

结果报错: java.lang.IllegalStateException: Mapped class was not specified

修正代码

RowMapper<Monster> rowMapper = new BeanPropertyRowMapper<>(Monster.class);

运行结果
在这里插入图片描述

📕查询后封装成对象集合

在这里插入图片描述

public class JdbcTemplateTest {
    /**
     * 查询id>=200的monster并封装到Monster实体对象
     */
    @Test
    public void selectMulDataByJdbcTemplate() {
        //获取到容器
        ApplicationContext ioc =
                new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");

        //获取JdbcTemplate对象
        JdbcTemplate jdbcTemplate = ioc.getBean(JdbcTemplate.class);

        //1.确定API query
        //public <T> List<T> query(String sql, RowMapper<T> rowMapper, Object... args)
        //2.准备参数
        String sql = "SELECT id AS monsterId, `name`, skill FROM monster WHERE id >= ?";//这个?填进入也可以
        RowMapper<Monster> rowMapper = new BeanPropertyRowMapper<>(Monster.class);
        //3.调用
        List<Monster> monsterList = jdbcTemplate.query(sql, rowMapper, 200);
        //输出
        for (Monster monster : monsterList) {
            System.out.println("monster=" + monster);
        }
    }
}

测试结果

monster=Monster{monsterId='200', name='红孩儿', skill='三昧真火'}
monster=Monster{monsterId='300', name='铁扇公主', skill='美人计'}
monster=Monster{monsterId='400', name='陆小千', skill='魔幻手机'}
monster=Monster{monsterId='500', name='金角大王', skill='紫金红葫芦'}
monster=Monster{monsterId='600', name='鼠鼠', skill='偷吃粮食'}
monster=Monster{monsterId='700', name='猫猫', skill='抓老鼠'}

在这里插入图片描述

📕返回单行单列

在这里插入图片描述

public class JdbcTemplateTest {
    /**
     * 查询返回结果只有一行一列的值
     */
    @Test
    public void selectScalarByJdbcTemplate() {
        //获取到容器
        ApplicationContext ioc =
                new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");

        //获取JdbcTemplate对象
        JdbcTemplate jdbcTemplate = ioc.getBean(JdbcTemplate.class);

        //1.确定API query -> queryObject
        //public <T> T queryForObject(String sql, Class<T> requiredType, @Nullable Object... args)
        //2.准备参数
        String sql = "SELECT `name` FROM monster WHERE id = 100";
        //Class<T> requiredType 表示你返回的单行单列的数据类型
        //3.调用
        String name = jdbcTemplate.queryForObject(sql, String.class);
        //输出
        System.out.println("name=" + name);
        System.out.println("ok~");
    }
}

📕具名参数

配置JdbcTemplate_ioc.xml, 使用到NamedParameterJdbcTemplate

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--引入外部的jdbc.properties文件-->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!--配置数据源对象-DataSource-->
    <bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource">
        <!--给数据源对象配置属性值-->
        <property name="user" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.pwd}"/>
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
    </bean>

    <!--配置JdbcTemplate对象-->
    <!--JdbcTemplate会使用到DataSource, 而DataSource可以拿到连接去操作数据库-->
    <bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate">
        <!--给JdbcTemplate对象配置dateSource-->
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--配置NamedParameterJdbcTemplate对象-->
    <bean class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate" id="namedParameterJdbcTemplate">
        <!--通过构造器, 设置数据源-->
        <constructor-arg name="dataSource" ref="dataSource"/>
    </bean>
</beans>

在这里插入图片描述

public class JdbcTemplateTest {
    /**
     * 使用Map传入具名参数完成操作, 比如添加
     */
    @Test
    public void testDataByNamedParameterJdbcTemplate() {
        //获取到容器
        ApplicationContext ioc =
                new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");

        //得到NamedParameterJdbcTemplate bean
        NamedParameterJdbcTemplate namedParameterJdbcTemplate = ioc.getBean(NamedParameterJdbcTemplate.class);

        //1.确定API update
        //public int update(String sql, Map<String, ?> paramMap)

        //2.准备参数 [:my_id, :name, :skill] 要求按照规定的名字来设置参数
        String sql = "insert into monster values(:id, :name, :skill)";
        Map<String, Object> paramMap = new HashMap<>();
        //给paramMap填写数据
        paramMap.put("id", 800);
        paramMap.put("name", "二郎神");
        paramMap.put("skill", "哮天犬");
        //3.调用
        int affected = namedParameterJdbcTemplate.update(sql, paramMap);
        //输出
        System.out.println("add ok affected=" + affected);
    }
}

📕sqlparametersource

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

public class JdbcTemplateTest {
    /**
     * 使用sqlparamtersource 来封装具名参数, 还是添加一个Monster
     */
    @Test
    public void operDataBySqlparametersource() {
        //获取到容器
        ApplicationContext ioc =
                new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");

        //得到NamedParameterJdbcTemplate bean
        NamedParameterJdbcTemplate namedParameterJdbcTemplate = ioc.getBean(NamedParameterJdbcTemplate.class);

        //1.确定API query
        //public int update(String sql, SqlParameterSource paramSource)
        //public BeanPropertySqlParameterSource(Object object)
        //2.准备参数
        String sql = "insert into monster values(:id, :name, :skill)";
        Monster monster = new Monster(900, "妲己", "魅惑");
        SqlParameterSource sqlParameterSource = new BeanPropertySqlParameterSource(monster);
        //3.调用
        int affected = namedParameterJdbcTemplate.update(sql, sqlParameterSource);
        //输出
        System.out.println("add ok affected=" + affected);
    }
}

结果报错 No value supplied for the SQL parameter 'id': Invalid property 'id' of bean class [com.zzw.spring.bean.Monster]: Bean property 'id' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?

修改代码

String sql = "insert into monster values(:monterId, :name, :skill)";

🥥DAO使用jdbctemplate

com.zzw.spring.jdbctemplate.dao包下新建MonsterDao

@Repository //将MonsterDao注入到spring容器
public class MonsterDao {

    //注入一个属性
    @Resource
    private JdbcTemplate jdbcTemplate;

    //完成保存任务
    public void save(Monster monster) {
        //组织SQL
        String sql = "insert into monster values(?, ?, ?)";
        int affteced =
                jdbcTemplate.update(sql, monster.getMonsterId(), monster.getName(), monster.getSkill());
        System.out.println("affected=" + affteced);
    }
}

JdbcTemplate_ioc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--配置要扫描的包-->
    <context:component-scan base-package="com.zzw.spring.jdbctemplate.dao"/>

    <!--引入外部的jdbc.properties文件-->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!--配置数据源对象-DataSource-->
    <bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource">
        <!--给数据源对象配置属性值-->
        <property name="user" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.pwd}"/>
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
    </bean>

    <!--配置JdbcTemplate对象-->
    <!--JdbcTemplate会使用到DataSource, 而DataSource可以拿到连接去操作数据库-->
    <bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate">
        <!--给JdbcTemplate对象配置dateSource-->
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--配置NamedParameterJdbcTemplate对象-->
    <!--<bean class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate" id="namedParameterJdbcTemplate">
        &lt;!&ndash;通过构造器, 设置数据源&ndash;&gt;
        <constructor-arg name="dataSource" ref="dataSource"/>
    </bean>-->
</beans>

测试

public class JdbcTemplateTest {
    //测试MonsterDao是否生效
    @Test
    public void monsterDaoSave() {
        //获取到容器
        ApplicationContext ioc =
                new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");

        MonsterDao monsterDao = ioc.getBean(MonsterDao.class);

        monsterDao.save(new Monster(1000, "女娲", "女娲补天"));

        System.out.println("save ok~");
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/882004.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

目标和——力扣494

文章目录 题目描述解法:动态规划题目描述 解法:动态规划 nt findTargetSumWays(vector<int>& nums, int target){int sum

Paper 推荐第3期|隐私集合求交 PSI 系列

前言&#xff1a; 隐语 awesome-PETs&#xff08;PETs即Privacy-Enhancing Technologies &#xff0c;隐私增强技术&#xff09;精选业内优秀论文&#xff0c;按技术类型进行整理分类&#xff0c;旨在为隐私计算领域的学习研究者提供一个高质量的学习交流社区。awesome-PETs 包…

关于vant2 组件van-dropdown-item,在IOS手机上,特定条件下无法点击问题的探讨

情景重现 先贴有问题的代码 <template><div :class"showBar ? homeContain : homeContain-nobar"><div class"contant" id"content"><van-dialog v-model"loading" :before-close"onBeforeClose" :…

css鼠标样式 cursor: pointer

cursor: none; cursor:not-allowed; 禁止选择 user-select: none; pointer-events:none;禁止触发事件, 该样式会阻止默认事件的发生&#xff0c;但鼠标样式会变成箭头

openpose姿态估计【学习笔记】

文章目录 1、人体需要检测的关键点2、Top-down方法3、Openpose3.1 姿态估计的步骤3.2 PAF&#xff08;Part Affinity Fields&#xff09;部分亲和场3.3 制作PAF标签3.4 PAF权值计算3.5 匹配方法 4、CPM&#xff08;Convolutional Pose Machines&#xff09;模型5、Openpose5.1 …

【uniapp2】获取manifest里的versionName版本号

在要展示版本号的页面中添加&#xff1a; onLoad() {// 获取本地应用资源版本号plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) > {this.innerVer wgtinfo.version;this.versionCode wgtinfo.versionCode;console.log(wgtinfo);});},打印看看获取的信息&#x…

机器学习---逻辑回归代码

1. 逻辑回归模型 import numpy as npclass LogisticRegression(object):def __init__(self, learning_rate0.1, max_iter100, seedNone):self.seed seedself.lr learning_rateself.max_iter max_iterdef fit(self, x, y):np.random.seed(self.seed)self.w np.random.normal…

视频汇聚平台EasyCVR安防监控视频汇聚平台的FLV视频流在VLC中无法播放的问题解决方案

众所周知&#xff0c;TSINGSEE青犀视频汇聚平台EasyCVR可支持多协议方式接入&#xff0c;包括主流标准协议国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。在视频流的处理与分发上&#xff0c;视频监控…

ESP8266获取网络时间 实时时钟

程序现象 一、用串口调试助手调试 1.发送指令ATRST重启模块使应用模式更改生效&#xff1b; 2.发送指令ATE0取消回显 3.使用串口发送指令ATCWMODE1设置模块Wi-Fi应用模式为Station模式&#xff1b; 4.发送指令ATCWJAP "ssid","pwd"连接AP&#xff1b; …

react-native-webview RN和html双向通信

rn登录后得到的token需要传递给网页&#xff0c;js获取到的浏览器信息需要传递给rn RN Index.js: import React from react import { WebView } from react-native-webview import useList from ./useListexport default function Index(props) {const { uri, jsCode, webVie…

23款奔驰S450 4MATIC升级车载冰箱系统,快乐就是这么朴实无华呀

凉爽餐饮随时触手可及。容积10升的可拆卸冷藏箱与后排扶手和谐融合。如此一来&#xff0c;即使在炎炎夏日&#xff0c;也可享受沁凉的冷饮。

Vue3头像(Avatar)

效果如下图&#xff1a;在线预览 APIs 参数说明类型默认值必传shape指定头像的形状‘circle’ | ‘square’‘circle’falsesize设置头像的大小number | ‘large’ | ‘small’ | ‘default’ | Responsive‘default’falsesrc图片类头像资源地址string‘’falsealt图片无法显…

关于微信临时文件wxfile://tmp文件如何处理,微信小程序最新获取头像和昵称

分享-2023年资深前端进阶&#xff1a;前端登顶之巅-最全面的前端知识点梳理总结&#xff0c;前端之巅 *分享一个使用比较久的&#x1fa9c; 技术栈&#xff1a;taro框架 vue3版本 解决在微信小程序获取微信头像时控制台报错&#xff1a;找不着wxfile://tmp 文件路径,失败&…

迁移协调器 - 就地迁移模式

在本系列博客的第一部分中&#xff0c;我们从高层级视角介绍了 Migration Coordinator 提供的所有模式&#xff0c;Migration Coordinator 是内置于 NSX 中的完全受 GSS 支持的工具&#xff0c;可将 NSX for vSphere 迁移到 NSX (NSX-T)。 本系列的第二篇博客将详细介绍就地迁…

cesium 卫星环绕扫描

成果图 源码 let viewer new Cesium.Viewer(cesiumContainer,{// terrainProvider: Cesium.createWorldTerrain(),geocoder: false, // 隐藏查找位置homeButton: false, // 隐藏返回视角到初始位置sceneModePicker: false, // 隐藏视角模式的选择baseLayerPicker: false, // 隐…

亚马逊云科技助力珠海丹德构建安全技术底座,促进商业发展

随着消费者对商品质量和安全关注度的不断提高&#xff0c;防伪、溯源、防窜已经成为企业关注的重要领域。据前瞻产业研究院数据显示&#xff0c;2028年中国防伪行业市场容量将超过4000亿元&#xff0c;未来市场对防伪、溯源、防窜技术的需求和重视程度可见一斑。 作为一家用智慧…

软件测试项目实战,电商业务功能测试点汇总(全覆盖)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 支付功能怎么测试…

医院后勤管理用什么系统好?的修医院报修管理系统有哪些优势?

随着医院后勤工作量的不断增加&#xff0c;需要协调和维护的设备和部门也随之增多。传统的医院后勤管理方式已经显得不够优越&#xff0c;其劣势日益凸显&#xff0c;无法满足实际工作需求。因此&#xff0c;快速推动医院后勤信息化管理已成为当前医院发展的迫切需求。而的修医…

进销存记账软件2023排行榜,秦丝、智慧记、管家婆哪家更好用?

进销存记账软件已经成为很多实体店必备的一款软件&#xff0c;使用进销存记账软件可以帮助实体店解决手工记账效率低下、对账麻烦且出错率高等问题。 很多实体店都是小本生意&#xff0c;选择进销存记账软件时由于缺乏经验&#xff0c;随意选择&#xff0c;结果买回来之后一堆问…