Spring Boot 数据访问与数据库集成

Spring Boot 数据访问与数据库集成

Spring Boot 数据访问与数据库集成

在这里插入图片描述
18.1 学习目标与重点提示

学习目标:掌握Spring Boot数据访问与数据库集成的核心概念与使用方法,包括Spring Boot数据访问的基本方法、Spring Boot与MySQL的集成、Spring Boot与H2的集成、Spring Boot与MyBatis的集成、Spring Boot与JPA的集成、Spring Boot的事务管理、Spring Boot的实际应用场景,学会在实际开发中处理数据库访问问题。
重点:Spring Boot数据访问的基本方法Spring Boot与MySQL的集成Spring Boot与H2的集成Spring Boot与MyBatis的集成Spring Boot与JPA的集成Spring Boot的事务管理Spring Boot的实际应用场景

18.2 Spring Boot数据访问概述

Spring Boot数据访问是指使用Spring Boot进行数据库操作的方法。

18.2.1 数据访问的定义

定义:数据访问是指使用Spring Boot进行数据库操作的方法。
作用

  • 实现数据库的增删改查。
  • 实现事务管理。
  • 实现数据的持久化。

✅ 结论:数据访问是指使用Spring Boot进行数据库操作的方法,作用是实现数据库的增删改查、事务管理、数据的持久化。

18.2.2 数据访问的常用组件

定义:数据访问的常用组件是指Spring Boot提供的数据访问组件。
组件

  • JdbcTemplate:用于JDBC操作。
  • JPA:用于JPA操作。
  • MyBatis:用于MyBatis操作。
  • Hibernate:用于Hibernate操作。

✅ 结论:数据访问的常用组件包括JdbcTemplate、JPA、MyBatis、Hibernate。

18.3 Spring Boot与MySQL的集成

Spring Boot与MySQL的集成是最常用的数据访问方法之一。

18.3.1 集成MySQL的步骤

定义:集成MySQL的步骤是指使用Spring Boot与MySQL集成的方法。
步骤

  1. 在pom.xml文件中添加MySQL依赖。
  2. 在application.properties或application.yml文件中配置MySQL连接信息。
  3. 创建实体类。
  4. 创建Repository接口。
  5. 创建控制器类。
  6. 测试应用。

示例
pom.xml文件中的MySQL依赖:

<dependencies><!-- Web依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Data JPA依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- MySQL依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- 测试依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

application.properties文件中的MySQL连接信息:

# 服务器端口 server.port=8080 # 数据库连接信息 spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.username=root spring.datasource.password=123456 # JPA配置 spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true 

实体类:

importjavax.persistence.*;@Entity@Table(name ="product")publicclassProduct{@Id@GeneratedValue(strategy =GenerationType.IDENTITY)privateLong id;privateString productId;privateString productName;privatedouble price;privateint sales;publicProduct(){}publicProduct(String productId,String productName,double price,int sales){this.productId = productId;this.productName = productName;this.price = price;this.sales = sales;}// Getter和Setter方法publicLonggetId(){return id;}publicvoidsetId(Long id){this.id = id;}publicStringgetProductId(){return productId;}publicvoidsetProductId(String productId){this.productId = productId;}publicStringgetProductName(){return productName;}publicvoidsetProductName(String productName){this.productName = productName;}publicdoublegetPrice(){return price;}publicvoidsetPrice(double price){this.price = price;}publicintgetSales(){return sales;}publicvoidsetSales(int sales){this.sales = sales;}@OverridepublicStringtoString(){return"Product{"+"id="+ id +",+ productId +'\''+",+ productName +'\''+", price="+ price +", sales="+ sales +'}';}}

Repository接口:

importorg.springframework.data.jpa.repository.JpaRepository;importorg.springframework.stereotype.Repository;importjava.util.List;@RepositorypublicinterfaceProductRepositoryextendsJpaRepository<Product,Long>{List<Product>findBySalesGreaterThan(int sales);}

控制器类:

importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.*;importjava.util.List;@RestController@RequestMapping("/api/products")publicclassProductController{@AutowiredprivateProductRepository productRepository;@GetMapping("/")publicList<Product>getAllProducts(){return productRepository.findAll();}@PostMapping("/")publicProductaddProduct(@RequestBodyProduct product){return productRepository.save(product);}@GetMapping("/top-selling")publicList<Product>getTopSellingProducts(@RequestParamint topN){List<Product> products = productRepository.findBySalesGreaterThan(0); products.sort((p1, p2)-> p2.getSales()- p1.getSales());if(products.size()> topN){return products.subList(0, topN);}return products;}}

测试类:

importorg.junit.jupiter.api.Test;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.test.context.SpringBootTest;importjava.util.List;importstaticorg.junit.jupiter.api.Assertions.assertEquals;@SpringBootTestclassProductApplicationTests{@AutowiredprivateProductController productController;@TestvoidcontextLoads(){}@TestvoidtestGetAllProducts(){List<Product> products = productController.getAllProducts();assertEquals(5, products.size());}@TestvoidtestAddProduct(){Product product =newProduct("P006","平板",2000.0,70);Product addedProduct = productController.addProduct(product);assertEquals("P006", addedProduct.getProductId());}@TestvoidtestGetTopSellingProducts(){List<Product> topSellingProducts = productController.getTopSellingProducts(3);assertEquals(3, topSellingProducts.size());assertEquals("P004", topSellingProducts.get(0).getProductId());assertEquals("P005", topSellingProducts.get(1).getProductId());assertEquals("P001", topSellingProducts.get(2).getProductId());}}

✅ 结论:集成MySQL的步骤包括添加MySQL依赖、配置MySQL连接信息、创建实体类、创建Repository接口、创建控制器类、测试应用。

18.4 Spring Boot与H2的集成

Spring Boot与H2的集成是用于开发和测试的常用方法之一。

18.4.1 集成H2的步骤

定义:集成H2的步骤是指使用Spring Boot与H2集成的方法。
步骤

  1. 在pom.xml文件中添加H2依赖。
  2. 在application.properties或application.yml文件中配置H2连接信息。
  3. 创建实体类。
  4. 创建Repository接口。
  5. 创建控制器类。
  6. 测试应用。

示例
pom.xml文件中的H2依赖:

<dependencies><!-- Web依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Data JPA依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- H2数据库依赖 --><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><!-- 测试依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

application.properties文件中的H2连接信息:

# 服务器端口 server.port=8080 # 数据库连接信息 spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password # JPA配置 spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true # H2数据库控制台 spring.h2.console.enabled=true spring.h2.console.path=/h2-console 

实体类、Repository接口、控制器类、测试类与集成MySQL的示例相同。

✅ 结论:集成H2的步骤包括添加H2依赖、配置H2连接信息、创建实体类、创建Repository接口、创建控制器类、测试应用。

18.5 Spring Boot与MyBatis的集成

Spring Boot与MyBatis的集成是常用的数据访问方法之一。

18.5.1 集成MyBatis的步骤

定义:集成MyBatis的步骤是指使用Spring Boot与MyBatis集成的方法。
步骤

  1. 在pom.xml文件中添加MyBatis依赖。
  2. 在application.properties或application.yml文件中配置MyBatis连接信息。
  3. 创建实体类。
  4. 创建Mapper接口。
  5. 创建Mapper XML文件。
  6. 创建控制器类。
  7. 测试应用。

示例
pom.xml文件中的MyBatis依赖:

<dependencies><!-- Web依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MyBatis依赖 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version></dependency><!-- MySQL依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- 测试依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

application.properties文件中的MyBatis连接信息:

# 服务器端口 server.port=8080 # 数据库连接信息 spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.username=root spring.datasource.password=123456 # MyBatis配置 mybatis.mapper-locations=classpath:mapper/*.xml mybatis.type-aliases-package=com.example.demo.entity 

实体类:

publicclassProduct{privateLong id;privateString productId;privateString productName;privatedouble price;privateint sales;publicProduct(){}publicProduct(String productId,String productName,double price,int sales){this.productId = productId;this.productName = productName;this.price = price;this.sales = sales;}// Getter和Setter方法publicLonggetId(){return id;}publicvoidsetId(Long id){this.id = id;}publicStringgetProductId(){return productId;}publicvoidsetProductId(String productId){this.productId = productId;}publicStringgetProductName(){return productName;}publicvoidsetProductName(String productName){this.productName = productName;}publicdoublegetPrice(){return price;}publicvoidsetPrice(double price){this.price = price;}publicintgetSales(){return sales;}publicvoidsetSales(int sales){this.sales = sales;}@OverridepublicStringtoString(){return"Product{"+"id="+ id +",+ productId +'\''+",+ productName +'\''+", price="+ price +", sales="+ sales +'}';}}

Mapper接口:

importorg.apache.ibatis.annotations.Mapper;importjava.util.List;@MapperpublicinterfaceProductMapper{List<Product>findAll();intinsert(Product product);List<Product>findBySalesGreaterThan(int sales);}

Mapper XML文件(src/main/resources/mapper/ProductMapper.xml):

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.example.demo.mapper.ProductMapper"><resultMapid="ProductResultMap"type="com.example.demo.entity.Product"><idproperty="id"column="id"/><resultproperty="productId"column="product_id"/><resultproperty="productName"column="product_name"/><resultproperty="price"column="price"/><resultproperty="sales"column="sales"/></resultMap><selectid="findAll"resultMap="ProductResultMap"> SELECT * FROM product </select><insertid="insert"parameterType="com.example.demo.entity.Product"> INSERT INTO product (product_id, product_name, price, sales) VALUES (#{productId}, #{productName}, #{price}, #{sales}) </insert><selectid="findBySalesGreaterThan"parameterType="int"resultMap="ProductResultMap"> SELECT * FROM product WHERE sales > #{sales} </select></mapper>

控制器类:

importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.*;importjava.util.List;@RestController@RequestMapping("/api/products")publicclassProductController{@AutowiredprivateProductMapper productMapper;@GetMapping("/")publicList<Product>getAllProducts(){return productMapper.findAll();}@PostMapping("/")publicintaddProduct(@RequestBodyProduct product){return productMapper.insert(product);}@GetMapping("/top-selling")publicList<Product>getTopSellingProducts(@RequestParamint topN){List<Product> products = productMapper.findBySalesGreaterThan(0); products.sort((p1, p2)-> p2.getSales()- p1.getSales());if(products.size()> topN){return products.subList(0, topN);}return products;}}

测试类:

importorg.junit.jupiter.api.Test;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.test.context.SpringBootTest;importjava.util.List;importstaticorg.junit.jupiter.api.Assertions.assertEquals;@SpringBootTestclassProductApplicationTests{@AutowiredprivateProductController productController;@TestvoidcontextLoads(){}@TestvoidtestGetAllProducts(){List<Product> products = productController.getAllProducts();assertEquals(5, products.size());}@TestvoidtestAddProduct(){Product product =newProduct("P006","平板",2000.0,70);int count = productController.addProduct(product);assertEquals(1, count);}@TestvoidtestGetTopSellingProducts(){List<Product> topSellingProducts = productController.getTopSellingProducts(3);assertEquals(3, topSellingProducts.size());assertEquals("P004", topSellingProducts.get(0).getProductId());assertEquals("P005", topSellingProducts.get(1).getProductId());assertEquals("P001", topSellingProducts.get(2).getProductId());}}

✅ 结论:集成MyBatis的步骤包括添加MyBatis依赖、配置MyBatis连接信息、创建实体类、创建Mapper接口、创建Mapper XML文件、创建控制器类、测试应用。

18.6 Spring Boot与JPA的集成

Spring Boot与JPA的集成是常用的数据访问方法之一。

18.6.1 集成JPA的步骤

定义:集成JPA的步骤是指使用Spring Boot与JPA集成的方法。
步骤

  1. 在pom.xml文件中添加JPA依赖。
  2. 在application.properties或application.yml文件中配置JPA连接信息。
  3. 创建实体类。
  4. 创建Repository接口。
  5. 创建控制器类。
  6. 测试应用。

示例
pom.xml文件中的JPA依赖:

<dependencies><!-- Web依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Data JPA依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- MySQL依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- 测试依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

application.properties文件中的JPA连接信息:

# 服务器端口 server.port=8080 # 数据库连接信息 spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.username=root spring.datasource.password=123456 # JPA配置 spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true 

实体类、Repository接口、控制器类、测试类与集成MySQL的示例相同。

✅ 结论:集成JPA的步骤包括添加JPA依赖、配置JPA连接信息、创建实体类、创建Repository接口、创建控制器类、测试应用。

18.7 Spring Boot的事务管理

Spring Boot的事务管理是数据访问的重要组件。

18.7.1 事务管理的定义

定义:事务管理是指使用Spring Boot进行事务处理的方法。
作用

  • 保证数据的一致性。
  • 保证数据的完整性。
  • 保证数据的原子性。

常用注解

  • @Transactional:标记方法或类为事务方法。

示例

importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importorg.springframework.transaction.annotation.Transactional;importjava.util.List;@ServicepublicclassProductService{@AutowiredprivateProductRepository productRepository;@TransactionalpublicvoidaddProduct(Product product){ productRepository.save(product);}@TransactionalpublicvoidupdateProduct(Product product){ productRepository.save(product);}@TransactionalpublicvoiddeleteProduct(Long id){ productRepository.deleteById(id);}@Transactional(readOnly =true)publicList<Product>getAllProducts(){return productRepository.findAll();}@Transactional(readOnly =true)publicList<Product>getTopSellingProducts(int topN){List<Product> products = productRepository.findBySalesGreaterThan(0); products.sort((p1, p2)-> p2.getSales()- p1.getSales());if(products.size()> topN){return products.subList(0, topN);}return products;}}

✅ 结论:事务管理是指使用Spring Boot进行事务处理的方法,常用注解包括@Transactional。

18.8 Spring Boot的实际应用场景

在实际开发中,Spring Boot数据访问与数据库集成的应用场景非常广泛,如:

  • 实现商品的展示与购买。
  • 实现订单的管理。
  • 实现用户的管理。
  • 实现博客的发布与管理。

示例

importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.data.jpa.repository.JpaRepository;importorg.springframework.stereotype.Repository;importorg.springframework.stereotype.Service;importorg.springframework.transaction.annotation.Transactional;importorg.springframework.web.bind.annotation.*;importjavax.persistence.*;importjava.util.List;// 产品类@Entity@Table(name ="product")publicclassProduct{@Id@GeneratedValue(strategy =GenerationType.IDENTITY)privateLong id;privateString productId;privateString productName;privatedouble price;privateint sales;publicProduct(){}publicProduct(String productId,String productName,double price,int sales){this.productId = productId;this.productName = productName;this.price = price;this.sales = sales;}// Getter和Setter方法publicLonggetId(){return id;}publicvoidsetId(Long id){this.id = id;}publicStringgetProductId(){return productId;}publicvoidsetProductId(String productId){this.productId = productId;}publicStringgetProductName(){return productName;}publicvoidsetProductName(String productName){this.productName = productName;}publicdoublegetPrice(){return price;}publicvoidsetPrice(double price){this.price = price;}publicintgetSales(){return sales;}publicvoidsetSales(int sales){this.sales = sales;}@OverridepublicStringtoString(){return"Product{"+"id="+ id +",+ productId +'\''+",+ productName +'\''+", price="+ price +", sales="+ sales +'}';}}// 产品Repository@RepositorypublicinterfaceProductRepositoryextendsJpaRepository<Product,Long>{List<Product>findBySalesGreaterThan(int sales);}// 产品Service@ServicepublicclassProductService{@AutowiredprivateProductRepository productRepository;@TransactionalpublicvoidaddProduct(Product product){ productRepository.save(product);}@TransactionalpublicvoidupdateProduct(Product product){ productRepository.save(product);}@TransactionalpublicvoiddeleteProduct(Long id){ productRepository.deleteById(id);}@Transactional(readOnly =true)publicList<Product>getAllProducts(){return productRepository.findAll();}@Transactional(readOnly =true)publicList<Product>getTopSellingProducts(int topN){List<Product> products = productRepository.findBySalesGreaterThan(0); products.sort((p1, p2)-> p2.getSales()- p1.getSales());if(products.size()> topN){return products.subList(0, topN);}return products;}}// 产品控制器@RestController@RequestMapping("/api/products")publicclassProductController{@AutowiredprivateProductService productService;@GetMapping("/")publicList<Product>getAllProducts(){return productService.getAllProducts();}@PostMapping("/")publicvoidaddProduct(@RequestBodyProduct product){ productService.addProduct(product);}@PutMapping("/{id}")publicvoidupdateProduct(@PathVariableLong id,@RequestBodyProduct product){ product.setId(id); productService.updateProduct(product);}@DeleteMapping("/{id}")publicvoiddeleteProduct(@PathVariableLong id){ productService.deleteProduct(id);}@GetMapping("/top-selling")publicList<Product>getTopSellingProducts(@RequestParamint topN){return productService.getTopSellingProducts(topN);}}// 应用启动类@SpringBootApplicationpublicclassProductApplication{publicstaticvoidmain(String[] args){SpringApplication.run(ProductApplication.class, args);}@AutowiredprivateProductService productService;publicvoidrun(String... args){// 初始化数据 productService.addProduct(newProduct("P001","手机",1000.0,100)); productService.addProduct(newProduct("P002","电脑",5000.0,50)); productService.addProduct(newProduct("P003","电视",3000.0,80)); productService.addProduct(newProduct("P004","手表",500.0,200)); productService.addProduct(newProduct("P005","耳机",300.0,150));}}// 测试类@SpringBootTestclassProductApplicationTests{@AutowiredprivateProductController productController;@TestvoidcontextLoads(){}@TestvoidtestGetAllProducts(){List<Product> products = productController.getAllProducts();assertEquals(5, products.size());}@TestvoidtestAddProduct(){Product product =newProduct("P006","平板",2000.0,70); productController.addProduct(product);List<Product> products = productController.getAllProducts();assertEquals(6, products.size());}@TestvoidtestUpdateProduct(){Product product =newProduct("P001","手机",1500.0,120); productController.updateProduct(1L, product);List<Product> products = productController.getAllProducts();assertEquals(1500.0, products.get(0).getPrice());}@TestvoidtestDeleteProduct(){ productController.deleteProduct(2L);List<Product> products = productController.getAllProducts();assertEquals(4, products.size());}@TestvoidtestGetTopSellingProducts(){List<Product> topSellingProducts = productController.getTopSellingProducts(3);assertEquals(3, topSellingProducts.size());assertEquals("P004", topSellingProducts.get(0).getProductId());assertEquals("P005", topSellingProducts.get(1).getProductId());assertEquals("P001", topSellingProducts.get(2).getProductId());}}

输出结果

访问http://localhost:8080/api/products/top-selling?topN=3:

[{"id":4,"productId":"P004","productName":"手表","price":500.0,"sales":200},{"id":5,"productId":"P005","productName":"耳机","price":300.0,"sales":150},{"id":1,"productId":"P001","productName":"手机","price":1500.0,"sales":120}]

访问http://localhost:8080/api/products/:

[{"id":1,"productId":"P001","productName":"手机","price":1500.0,"sales":120},{"id":3,"productId":"P003","productName":"电视","price":3000.0,"sales":80},{"id":4,"productId":"P004","productName":"手表","price":500.0,"sales":200},{"id":5,"productId":"P005","productName":"耳机","price":300.0,"sales":150},{"id":6,"productId":"P006","productName":"平板","price":2000.0,"sales":70}]

✅ 结论:在实际开发中,Spring Boot数据访问与数据库集成的应用场景非常广泛,需要根据实际问题选择合适的数据访问方法。

总结

本章我们学习了Spring Boot数据访问与数据库集成,包括Spring Boot数据访问的基本方法、Spring Boot与MySQL的集成、Spring Boot与H2的集成、Spring Boot与MyBatis的集成、Spring Boot与JPA的集成、Spring Boot的事务管理、Spring Boot的实际应用场景,学会了在实际开发中处理数据库访问问题。其中,Spring Boot数据访问的基本方法、Spring Boot与MySQL的集成、Spring Boot与H2的集成、Spring Boot与MyBatis的集成、Spring Boot与JPA的集成、Spring Boot的事务管理、Spring Boot的实际应用场景是本章的重点内容。从下一章开始,我们将学习Spring Boot的其他组件、微服务等内容。

Read more

2026 AI 元年|智能体来了:Agent Native 正在取代 Copilot,定义下一代 AI 公司

2026 AI 元年|智能体来了:Agent Native 正在取代 Copilot,定义下一代 AI 公司

关键词:Agent Native|Flow Engineering|可控 AI|组织 SOP 数字化 引言:AI 的竞争焦点,已经完成一次根本性迁移 2023–2024 年,AI 的进步主要体现在模型层: * 更大的上下文窗口 * 更强的推理能力 * 更接近人类的语言表达 但站在 2026 AI 元年 的门槛上,行业正在形成一个高度一致的判断: AI 的核心竞争力,不再是“模型有多聪明”,而是“系统是否可控、可复用、可规模化”。 这意味着,AI 正在经历一次范式级跃迁: 从 LLM 的单点能力展示,进入 Agent Native 的系统时代。 一、为什么 2025 年之前的

By Ne0inhk

WhisperX语音识别工具:为什么它比传统方案更值得选择?

WhisperX语音识别工具:为什么它比传统方案更值得选择? 【免费下载链接】whisperXm-bain/whisperX: 是一个用于实现语音识别和语音合成的 JavaScript 库。适合在需要进行语音识别和语音合成的网页中使用。特点是提供了一种简单、易用的 API,支持多种语音识别和语音合成引擎,并且能够自定义语音识别和语音合成的行为。 项目地址: https://gitcode.com/gh_mirrors/wh/whisperX 在当今数字化时代,语音识别技术正迅速改变着我们处理信息的方式。WhisperX作为基于OpenAI Whisper的增强版本,不仅在识别准确率上有所突破,更在处理效率上实现了质的飞跃。本文将深入探讨这款工具的核心价值及其在实际应用中的独特优势。 为什么需要更智能的语音识别? 传统的语音识别系统往往面临多个挑战:处理速度慢、时间戳精度不足、多说话人识别困难等。WhisperX通过创新的技术架构,有效解决了这些问题,为用户提供了前所未有的语音转写体验。 WhisperX语音识别完整流程:从音频输入到精准时间戳输出 核心功能深度解析 批

By Ne0inhk
使用 VS Code 和 Android Studio 阅读 Android 源码:基于 Copilot 的高效代码分析技巧

使用 VS Code 和 Android Studio 阅读 Android 源码:基于 Copilot 的高效代码分析技巧

1. 背景 在日常开发中,大家常用 AI 工具(如 ChatGPT、DeepSeek 等)进行代码分析。但通过网页 AI 工具分析代码时,缺乏上下文,需要手动分段粘贴代码,效率低且容易遗漏关键信息。 公司引入 Copilot 后,大家多在 VS Code、Android Studio 等 IDE 插件中用 Copilot 进行代码分析。Copilot 能直接分析当前编辑器中的代码,并支持上下文,极大提升了分析效率,减少了人工粘贴的麻烦。 但实际开发中,仍存在以下痛点: * 代码跳转不连贯:对于 Android.bp soong 构建系统下的 Android 代码,不能自由地跳转到方法定义、实现、符号等。 * 查找方法繁琐:大部分

By Ne0inhk
【AIGC文生图】通义万相2.1应用拓展与蓝耘云平台实践

【AIGC文生图】通义万相2.1应用拓展与蓝耘云平台实践

探索调参之道:通义万相2.1应用拓展与平台调优实践 近年来,随着生成模型不断迭代升级,通义万相在图像生成领域的表现愈发引人瞩目。相比于基础的文生图使用,如何在平台应用拓展和参数调优上发掘更大潜力,已成为众多开发者与工程师关注的热点。本文将从实际应用案例出发,分享一些调参心得与平台优化策略,并着重探讨蓝耘GPU平台在这方面的独特优势,力求帮助读者快速上手并走上创新之路。 一、通义万相2.1来临 前几日,通义官方发布了万相最新文生图模型2.1。 通义万相2.1在模型底层和交互体验上都有显著升级,具体来说: * 模型参数与语义理解升级 新版本参数规模已经突破千亿级别,使得对输入文本的语义捕捉更为精准,能更好地理解复杂描述,生成的图像在细节和质感上都有明显提升。与此同时,内置的智能改写功能可以自动优化用户输入,使得图像风格和表现更符合预期。 * 生成速度与细节表现的提升 得益于优化的算法和模型架构,生成速度大幅加快,尤其在高分辨率(最高支持200万像素)输出时,依然能保持流畅高效。同时,细节表现力增强后,无论是人物表情、光影效果还是场景布置,都能呈现得更加生动自

By Ne0inhk