【Spring】Spring的数据库开发

news2024/11/16 19:41:16

目录

    • 1.Spring JDBC
      • 1.1 Spring JdbcTemplate的解析
      • 1.2 Spring JDBC的配置
    • 2 Spring JdbcTemplate的常用方法
      • 2.1 execute()——执行SQL语句
      • 2.2 update()——更新数据
      • 2.3 query()——查询数据

1.Spring JDBC

1.1 Spring JdbcTemplate的解析

    针对数据库的操作,Spring框架提供了JdbcTemplate类,该类是Spring框架数据抽象层的基础,其他更高层次的抽象类是构建于JdbcTemplate类之上的。可以说,JdbcTemplate类是Spring JDBC的核心类。JdbcTemplate类的继承关系十分简单。它继承自抽象类JdbcAccessor,同时实现了JdbcOperations接口。

    (1)JdbcOperations接口定义了在JdbcTemplate类中可以使用的操作集合,包括添加、修改、查询和删除等操作。

    (2)JdbcTemplate类的直接父类是JdbcAccessor,该类为子类提供了一些访问数据库时使用的公共属性,具体如下。

  • DataSource:其主要功能是获取数据库连接,具体实现时还可以引入对数据库连接的缓冲池和分布事务的支持,它可以作为访问数据库资源的标准接口。
  • SQLExceptionTranslatororg.springframework.jdbc.support.SQLExceptionTranslator接口负责对SQLException进行转译工作。通过必要的设置或者获取SQLExceptionTranslator中的方法可以使JdbcTemplate在需要处理SQLException时委托SQLExceptionTranslator的实现类来完成相关的转译工作。

1.2 Spring JDBC的配置

     Spring JDBC模块主要由4个包组成,分别是core(核心包)、dataSource(数据包)、object(对象包)和support(支持包)。关于这4个包的具体说明如表所示。

在这里插入图片描述

     Spring对数据库的操作都封装在了这几个包中,如果想要使用Spring JDBC,就需要对其进行配置。在Spring中,JDBC的配置是在配置文件applicationContext.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 1.配置数据源 -->
    <bean id="dataSource"
          class="org.springframework.jdbc.datasource.DriverMangerDataSource">
        <!-- 数据库驱动 -->
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <!-- 连接数据库url -->
        <property name="url" value="jdbc:mysql://localhost:3306/db_spring"/>
        <!-- 连接数据库的用户名 -->
        <property name="username" value="root"/>
        <!-- 连接数据库的密码 -->
        <property name="password" value="root"/>
    </bean>
    <!-- 2.配置JDBC模板 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.jdbcTemplate">
        <!-- 默认必须使用数据源 -->
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- 3.配置注入类 -->
    <bean id="xxx" class="xxx">
        <!-- 默认必须使用数据源 -->
        <property name="jdbcTemplate" ref="jdbcTemplate"/>
    </bean>
</beans>

     在上述代码中定义了3个Bean,分别是dataSource、jdbcTemplate和需要注入类的Bean。其中dataSource对应的org.springframework.jdbc.datasource.DriverManagerDataSource类用于对数据源进行配置,jdbcTemplate对应的org.springframework.jdbc.core.JdbcTemplate类中定义了JdbcTemplate的相关配置。上述代码中dataSource的配置就是JDBC连接数据库时所需的4个属性,如表所示。

在这里插入图片描述
     定义jdbcTemplate时,需要将dataSource注入jdbcTemplate中,而其他需要使用jdbcTemplate的Bean,也需要将jdbcTemplate注入该Bean中(通常注入Dao类中,在Dao类中进行与数据库的相关操作)。

2 Spring JdbcTemplate的常用方法

     在JdbcTemplate类中提供了大量更新和查询数据库的方法,我们就是使用这些方法来操作数据库的。

2.1 execute()——执行SQL语句

     execute(String sql)方法能够完成执行SQL语句的功能。

    【示例4-1】下面以创建数据表的SQL语句为例演示此方法的使用,具体步骤如下。

    步骤01 在MySQL中创建一个名为db_spring的数据库。

    步骤02 在idea中创建一个名为chapter00的Web项目。

    步骤03 在src目录下创建配置文件applicationContext.xml,在该文件中配置id为dataSource的数据源Bean和id为jdbcTemplate的JDBC模板Bean,并将数据源注入JDBC模板中。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 1.配置数据源 -->
    <bean id="dataSource"
          class="org.springframework.jdbc.datasource.DriverMangerDataSource">
        <!-- 数据库驱动 -->
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <!-- 连接数据库url -->
        <property name="url" value="jdbc:mysql://localhost:3306/db_spring"/>
        <!-- 连接数据库的用户名 -->
        <property name="username" value="root"/>
        <!-- 连接数据库的密码 -->
        <property name="password" value="root"/>
    </bean>
    <!-- 2.配置JDBC模板 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.jdbcTemplate">
        <!-- 默认必须使用数据源 -->
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

    步骤04 在src目录下创建一个com.ssm.jdbc包,在该包中创建测试类JdbcTemplateTest。在该类的main()方法中通过Spring容器获取在配置文件中定义的JdbcTemplate实例,然后使用实例的execute(String s)方法执行创建数据表的SQL语句。

package com.ssm.jdbc;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

/**
 * 使用excute()方法创建表
 *
 * @author: 衍生星球
 * @date: 2023年04月21日 9:37
 */

public class JdbcTemplateTest {
    public static void main(String[] args) {
        //加载配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取jdbcTemplate实例
        JdbcTemplate jdbcTemplate =(JdbcTemplate)applicationContext.getBean("jdbcTemplate");
        //使用excute()方法执行sql语句,创建用户表user
        jdbcTemplate.execute("create table user(" +
                "id int primary key auto_increment," +
                "username varchar(40)," +
                "password varchar(40))");
    }
}

在这里插入图片描述

在这里插入图片描述

2.2 update()——更新数据

    update()方法可以完成插入、更新和删除数据的操作。在JdbcTemplate类中提供了一系列update()方法,其常用格式如表所示。

在这里插入图片描述

    【示例4-2】通过一个用户管理的案例来演示update()方法的使用,具体步骤如下。

    步骤01 在chapter00项目的com.ssm.jdbc包中创建User类,在该类中定义id、username和password属性,以及其对应的getter()/setter()方法。

package com.ssm.jdbc;

/**
 * 功能描述
 *
 * @author: 衍生星球
 * @date: 2023年04月22日 19:21
 */
// User实体类
public class User {
    private Integer id; //用户id
    private String username; //用户名
    private String password; //密码
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String toString() {
        return "User [id=" +id+ ", username=" +username+", password=" + password + "]";
    }
}

    步骤02 在com.ssm.jdbc包中创建接口UserDao,并在接口中定义添加、更新和删除用户的方法。

package com.ssm.jdbc;

public interface UserDao {
    //添加用户方法
    public int addUser(User user);
    //更新用户方法
    public int updateUser(User user);
    //删除用户方法
    public int deleteUser(int id);
}

    步骤03 在com.ssm.jdbc包中创建UserDao接口的实现类UserDaoImpl,并在类中实现添加、更新和删除账户的方法。

package com.ssm.jdbc;

import org.springframework.jdbc.core.JdbcTemplate;

/**
 * 功能描述
 *
 * @author: 衍生星球
 * @date: 2023年04月22日 19:37
 */

public class UserDaoImpl implements UserDao {
    private JdbcTemplate jdbcTemplate;
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
    //添加用户方法
    public int addUser(User user) {
        String sql = "insert into user(username,password) value(?,?)";
        Object[] obj = new Object[] {
            user.getUsername(),
            user.getPassword()
        };
        int num = this.jdbcTemplate.update(sql,obj);
        return num;
    }
    //更新用户方法
    public int updateUser(User user) {
        String sql = "update user set username=? ,password=? where id=?";
        Object[] params = new Object[] {
                user.getUsername(),
                user.getPassword(),
                user.getId()
        };
        int num = this.jdbcTemplate.update(sql,params);
        return num;
    }
    //删除用户方法
    public int deleteUser(int id) {
        String sql = "delete from user where id=?";
        int num = this.jdbcTemplate.update(sql,id);
        return num;
    }
}

    添加、更新和删除操作的实现步骤类似,只是定义的SQL语句有所不同。

    步骤04 在applicationContext.xml中定义一个id为userDao的Bean,该Bean用于将jdbcTemplate注入userDao实例中。

 <!-- 定义id为 UserDaoBean -->
    <bean id="UserDao" class="com.ssm.jdbc.UserDaoImpl">
        <!-- 将jdbcTemplate 注入userDao实例中 -->
        <property name="jdbcTemplate" ref="jdbcTemplate"/>
    </bean>

    步骤05 在测试类JdbcTemplateTest中添加一个测试方法addUserTest()。该方法主要用于添加用户信息。

package com.ssm.jdbc;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 添加用户方法
 *
 * @author: 衍生星球
 * @date: 2023年04月21日 9:37
 */

public class JdbcTemplateTest {
    
    @Test
    public void addUserTest() {
        //加载配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取userDao实例
        UserDao userDao = (UserDao)applicationContext.getBean("UserDao");
        //创建User实例
        User user = new User();
        //创建User实例属性值
        user.setUsername("zhangsan");
        user.setPassword("123456");
        //添加用户
        int num = userDao.addUser(user);
        if (num>0) {
            System.out.println("成功插入了" + num + "条数据。");
        } else {
            System.out.println("添加用户失败!");
        }
    }
}

    获取UserDao的实例后又创建了User对象,并向User对象中添加了属性值。然后调用UserDao对象的addUser()方法向数据表中添加一条数据。最后,通过返回的受影响的行数来判断数据是否插入成功。运行后,控制台的输出结果如图所示。

在这里插入图片描述

    此时再次查询数据库中的user表,其结果如图所示。从中可以看出,使用JdbcTemplate的update()方法已成功地向数据表中插入了一条数据。

在这里插入图片描述
    步骤06 执行完插入操作后,接下来使用JdbcTemplate类的update()方法执行更新操作。在测试类JdbcTemplateTest中添加一个测试方法updateUser Test()。

    @Test
    public void updateUserTest() {
        //加载配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取userDao实例
        UserDao userDao = (UserDao)applicationContext.getBean("UserDao");
        User user = new User();
        user.setId(1);
        user.setUsername("lisi");
        user.setPassword("111111");
        //更新用户
        int num = userDao.updateUser(user);
        if (num>0) {
            System.out.println("更新成功了" + num + "条数据。");
        } else {
            System.out.println("更新用户失败!");
        }
    }

    与addUserTest()方法相比,更新操作的代码增加了id属性值的设置,并在将用户名和密码修改后调用了UserDao对象中的updateUser()方法执行对数据表的更新操作。使用JUnit4运行方法后,再次查询数据库中的user表,其结果如图所示。从中可以看出,使用update()方法已成功更新了user表中id为1的用户的用户名和密码。

在这里插入图片描述
    步骤07 在测试类JdbcTemplateTest中添加一个测试方法deleteUserTest()来执行删除操作。

@Test
    public void deleteUserTest() {
        //加载配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取userDao实例
        UserDao userDao = (UserDao)applicationContext.getBean("UserDao");
        //删除用户
        int num = userDao.deleteUser(1);
        if (num>0) {
            System.out.println("成功删除了" + num + "条数据。");
        } else {
            System.out.println("删除用户失败!");
        }
    }

    在上述代码中,获取了UserDao的实例后,执行实例中的deleteUser()方法来删除id为1的数据。

    运行方法后,查询user表中的数据,其结果如图所示。从中可以看出,已成功通过deleteUser()方法删除了id为1的数据。由于user表中只有一条数据,因此删除后表中数据为空。

在这里插入图片描述

2.3 query()——查询数据

    JdbcTemplate类中还提供了大量的query()方法来处理各种对数据库表的查询操作。其中常用的几个query()方法格式如表所示。

在这里插入图片描述

    【示例4-3】通过一个具体的案例演示query()方法的使用,其实现步骤如下。

    步骤01 向数据表user中插入几条数据,插入后user表中的数据如图所示。

在这里插入图片描述
    步骤02 在UserDao中分别创建一个通过id查询单个用户和查询所有用户的方法。

 	//通过id查询用户
    public User findUserById(int id);
    //查询所有用户
    public List<User> findAllUser();

    步骤03 在UserDao接口的实现类UserDaoImpl中实现接口中的方法,并使用query()方法分别进行查询。

  //通过id查询用户数据信息
    public User findUserById(int id) {
        String sql = "select * from user where id=?";
        RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class);
        return this.jdbcTemplate.queryForObject(sql,rowMapper,id);
    }

    //查询所有用户数据信息
    public List<User> findAllUser() {
        String sql = "select * from user";
        RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class);
        return this.jdbcTemplate.query(sql,rowMapper);
    }

    在上面两个方法代码中,BeanPropertyRowMapper是RowMapper接口的实现类,可以自动地将数据表中的数据映射到用户自定义的类中(前提是用户自定义类中的字段要与数据表中的字段相对应)。创建完BeanPropertyRowMapper对象后,在findUserById()方法中通过queryForObject()方法返回了一个Object类型的单行记录,而在findAllUser()方法中通过query()方法返回了一个结果集合。

    步骤04 在测试类 JdbcTemplateTest中添加一个测试方法findUserByIdTest()来测试条件查询,其代码如下所示。

    @Test
    public void findUserByIdTest() {
        //加载配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取userDao实例
        UserDao userDao = (UserDao)applicationContext.getBean("UserDao");
        //通过id查询用户数据信息
        User user = userDao.findUserById(5);
        System.out.println(user);
    }

    上述代码通过执行findUserById()方法获取了id为1的对象信息,并通过输出语句输出。运行后,控制台的输出结果如图所示。

在这里插入图片描述
    步骤05 在测试类JdbcTemplateTest中添加一个测试方法findAllUserTest()来测试所有用户信息。

    @Test
    public void findAllUserTest() {
        //加载配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取userDao实例
        UserDao userDao = (UserDao)applicationContext.getBean("UserDao");
        //查询所有用户数据信息
        List<User> list = userDao.findAllUser();
        //循环输出用户信息
        for (User user:list) {
            System.out.println(user);
        }
    }

    在上述代码中,调用了UserDao对象的findAllUser()方法查询所有用户账户信息,并通过for循环输出查询结果。运行findAllUser()方法后,控制台的显示信息如图所示,数据表user中的4条记录都已经被查询出来。

在这里插入图片描述

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

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

相关文章

FreeRTOS - 二值信号量

一.信号量定义 信号量&#xff08;semaphore&#xff09;&#xff0c;多任务环境下使用的一种设施&#xff0c;负责协调多个任务&#xff0c;以保证任务能够正确&#xff0c;合理的使用公共资源。 二.二值信号量应用函数 函数原型#include “FreeRTOS.h”#include “semphr.h”…

我国纯电动汽车行业开始从“政策导向”向“消费导向”转变 未来机遇挑战并存

1、纯电动汽车概念及其优缺点情况 新能源汽车以能源供给方式主要可以分为纯电动汽车、混合动力汽车以及燃料电池汽车。其中&#xff0c;纯电动汽车则是指完全由可充电电池&#xff08;如铅酸电池、镍镉电池、镍氢电池或锂离子电池&#xff09;提供动力源&#xff0c;用电机驱动…

华纳云:Pycharm无法正常安装第三方库怎么解决?

这篇文章主要介绍“Pycharm无法正常安装第三方库怎么解决”的相关知识&#xff0c;小编通过实际案例向大家展示操作过程&#xff0c;操作方法简单快捷&#xff0c;实用性强&#xff0c;希望这篇“Pycharm无法正常安装第三方库怎么解决”文章能帮助大家解决问题。 1.首先检查自…

MongoDB常用语句(CURD)

文章目录 一、数据库操作二、集合操作三、文档操作3.1 插入文档3.2 查询文档3.3 更新文档3.4 删除文档 四、安全认证4.1 创建管理员账号4.2 创建应用数据库用户4.3 启动和连接 (校验方式) 提示&#xff1a;以下是本篇文章正文内容&#xff0c;MongoDB 系列学习将会持续更新 一…

【达摩院OpenVI】视频目标渐进式Transformer跟踪器ProContEXT

论文&代码 论文链接&#xff1a;[arxiv]代码&应用&#xff1a; 开源代码&#xff1a;[github code]开源应用&#xff1a;[modelscope] 背景介绍 视频目标跟踪&#xff08;Video Object Tracking, VOT&#xff09;任务以一段视频和第一帧中待跟踪目标的位置信息&…

为什么使用了索引,查询还是慢?

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;为什么使用了索引&#xff0c;查询还是慢&#xff1f; ✅创作者&#xff1a;林在闪闪发光 ⏰预计时间&#xff1a;30分钟 &#x1f389;个人主页&#xff1a;林在闪闪发光的个人主页 &#x1f341;林在闪闪发光的个人社区&…

一、适配各大数据库之前言

一、适配各大数据库之前言 简介 本系列主要记录基于【用户权限服务】(一个SpringBoot服务的名称,不重要,只要是web项目都可以,为了方便描述,以下就简称 “用户中心”),适配各大数据库的过程,其中包括SQL Server、Oracle、PostgreSql、达梦、金仓、MYSQL等等,其次还记…

Docker容器---docker-compose

docker容器---compose容器集群的快速编排 一、Docker-compose简介二、yml文件格式及编写注意事项1、yml文件格式2、yml文件格式注意事项 三、编写docker-compose&#xff08; nginxtomcat 实例&#xff09;1、dockerfile撰写 nginx 镜像2、dockerfile撰写 tomcat 镜像3、将所需…

基于html+css的图片展示32

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

java 7大设计原则

一、设计模式七大原则 设计模式的目的 代码重用性 (即&#xff1a;相同功能的代码&#xff0c;不用多次编写)可读性 (即&#xff1a;编程规范性, 便于其他程序员的阅读和理解)可扩展性 (即&#xff1a;当需要增加新的功能时&#xff0c;非常的方便&#xff0c;称为可维护)可靠…

关于今年五一调休。。

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,YOLO,活动领域博主爱笑的男孩。擅长深度学习,YOLO,活动,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typecollect个人…

Spring5学习总结(三)JdbcTemplate实现数据库增删改查操作JdbcTemplate实现批量增删改操作

Spring5学习总结&#xff08;三&#xff09;JdbcTemplate实现数据库增删改查操作/JdbcTemplate实现批量增删改操作 一、JdbcTemplate概述 什么是 JdbcTemplate&#xff1f; JdbcTemplate是Spring 框架对 JDBC 进行的封装&#xff0c;使用它可以更方便实现对数据库的操作。 二…

Redis序列化设置以及jetcache连接Redis序列化的设置

1、问题 问题&#xff1a;我在使用jetchche进行连接redis的时候&#xff0c;存入redis的value一直使用的是redis默认的序列化方式&#xff0c;是使用的jdk序列化。当我使用jetcache向redis存入一个对象 存入redis的结果: 这是使用jdk序列化的结果。 但是我记得使用redis的时候…

密码学期末复习(按考点整理,超详细!!!)

复习目录&#xff09; 题型第一章密码算法的安全性分类密码分析的难易程度凯撒密码加密原理古典密码中仿射变换的解密变换 第二章流密码的组成和特点流密码的基本思想 第三章分组密码的CBC工作模式&#xff0c;以及该模式的加密示意图AES中字节求逆雪崩效应分组密码的安全设计原…

让HR眼前一亮:30个APP项目软件测试经验,点燃你的简历

在求职过程中&#xff0c;我们都希望自己的简历能够吸引面试官的眼球&#xff0c;从而获得更多的面试机会。作为一名软件测试人员&#xff0c;丰富的实战经验是让自己脱颖而出的关键之一。 在我多年从事APP项目软件测试的工作中&#xff0c;我积累了大量的实践经验&#xff0c…

Java 之 String、StringBuffer与StringBuilder 区别

String String 是被 final 修饰的类&#xff0c;不能被继承&#xff1b;String实现了 Serializable 和Comparable接口&#xff0c;表示String支持序列化和可以比较大小&#xff1b;String底层是通过char类型的数据实现的&#xff0c;并且被final修饰&#xff0c;所以字符串的值…

大数据5--spark

1.Spark 定义:Apache Spark是用于大规模数据(large-scala data)处理的统一(unified)分析引擎。 Spark 是什么 Spark 最早源于一篇论文 Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing&#xff0c; 该论文是由加州大学柏克莱…

vue3中其他的变化

1.全局API的转移 Vue 2.x 有许多全局 API 和配置。 - 例如&#xff1a;注册全局组件、注册全局指令等。 //注册全局组件 Vue.component(MyButton, {data: () > ({count: 0}),template: <button click"count">Clicked {{ count }} times.</button> …

微信小程序+wx.connectSocket客服问答

项目需求&#xff0c;记录一下&#xff1a; 1.要求websocket实时返回会话结果 我项目这边是后端一次返回一个字&#xff0c;–finish–结束&#xff0c;所以实现方法是每获取到数据时就setData一次&#xff0c;直到获取到的数据为finish&#xff0c;停止setData 后端返回结果…

Banana Pi BPI-Centi-S3 使用MicroPython编程显示JPG图片

BPI-Centi-S3是我们新推出的一款板载1.9英寸彩屏的小尺寸ESP32-S3开发板&#xff01; BPI-Centi-S3 banana-pi wiki BPI-Centi-S3 bpi-steam wiki 1 关键特性 ESP32-S3&#xff0c;Xtensa 32 bit LX72M PSRAM , 8M FLASH2.4G WIFI &#xff0c;Bluetooth 5 &#xff0c;Blue…