ssm整合(spring+springmvc+mybatis)做一个小项目(SpringMVC学习笔记六)

一、mybatis层

1、搭建数据库:

//创建数据库
CREATE DATABASE `ssmbuild`; //选择数据库
USE `ssmbuild`//检查如果数据库中有books这个表的话就给他删除
DROP TABLE IF EXISTS `books`//创建表books
CREATE TABLE `books`(
`bookID` INT(10) NOT NULL AUTO_INCREMENT COMMENT '图书id',
`bookName` VARCHAR(100) NOT NULL COMMENT'书名',
`bookCounts` INT(11) NOT NULL COMMENT'数量',
`detail` VARCHAR(200) NOT NULL COMMENT'描述',
KEY `bookID` (`bookID`)
)//插入数据
INSERT INTO `books` VALUES (1,'java',1,'从入门到放弃'), (2,'MySQL',10,'从删库到跑路'), (3,'Linux',5,'从进门到进牢'); 

2、搭建maven项目

创建之后的目录:

在配置文件中导入需要用到的依赖

<!--需要的相关依赖--><dependencies><!--Junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!--数据库驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!-- 数据库连接池 --><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version></dependency><!--Servlet - JSP --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.2</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!--Mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.2</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.2</version></dependency><!--Spring--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.9.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.1.9.RELEASE</version></dependency></dependencies>

maven资源过滤设置

<build><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources>
</build>

 3、连接数据库

 4、创建包结构和配置文件结构(目前够用的)

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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

mybatis-config.xml

<?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>
</configuration>

database.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=false&useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=root

下面完成mybatis-config.xml的配置

<?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>
<!--数据源交给spring去做了,这里我们主要做取别名和映射一些mappers配置文件--><!--给pojo包下的所有类取别名--><typeAliases><package name="com.li.pojo"/></typeAliases><!--映射等一下来做-->
</configuration>

5、编写实体类(pojo)和接口(dao)

因为要偷懒,在maven中导入lombok的依赖

<!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency>

编写实体类 

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Books {private int bookID;private String bookName;private int bookCounts;private String detail;}

编写接口

package com.li.dao;import com.li.pojo.Books;import java.util.List;public interface BookMapper {//增加一本书int addBook(Books books);//根据删除一本书int deleteBookByID(int id);//修改一本书int updateBook(Books books);//根据id查询一本书Books queryBookId(int id);//查询所有的书List<Books> queryAllBook();}

编写xxxMapper.xml文件执行sql语句

头文件直接用mybatis-config.xml的改

修改后:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper></mapper>

编写sql语句

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.li.dao.BookMapper"><insert id="addBook" parameterType="books" >insert into ssmbuild.books(bookName,bookCounts,detail)values (#{bookName},#{bookCounts},#{detail},);</insert><delete id="deleteBookByID" parameterType="int">deletefrom ssmbuild.bookswhere bookID = #{bookID};</delete><update id="updateBook" parameterType="books">update ssmbuild.booksset bookName = #{books},bookCounts = #{bookCounts},detail = #{detail}where bookID = #{bookID};</update><select id="queryBookId" resultType="books" parameterType="int">select *from ssmbuild.bookswhere bookID = #{bookID};</select><select id="queryAllBook" resultType="books">select *from ssmbuild.books;</select>
</mapper>

写完sql语句后第一件事就是将xxxMapper.xml配置文件绑定到mybatis的配置文件中,两种绑定(映射)方式

<?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>
<!--数据源交给spring去做了,这里我们主要做取别名和映射一些mappers配置文件--><!--给pojo包下的所有类取别名--><typeAliases><package name="com.li.pojo"/></typeAliases><!--映射等一下来做--><mappers><mapper resource="com/li/dao/BookMapper.xml"/></mappers><!--    <mappers>-->
<!--        <mapper class="com.li.dao.BookMapper"/>-->
<!--    </mappers>--></configuration>

6、编写业务层(service)

package com.li.service;import com.li.dao.BookMapper;
import com.li.pojo.Books;import java.util.List;public class BookServiceImp implements BookService{//service调dao层, 组合daoprivate BookMapper bookMapper;public void setBookMapper(BookMapper bookMapper) {this.bookMapper = bookMapper;}//增加一本书public int addBook(Books books){return bookMapper.addBook(books);}//根据删除一本书public int deleteBookByID(int id){return bookMapper.deleteBookByID(id);}//修改一本书public int updateBook(Books books){return bookMapper.updateBook(books);}//根据id查询一本书public Books queryBookId(int id){return bookMapper.queryBookId(id);}//查询所有的书public List<Books> queryAllBook(){return bookMapper.queryAllBook();}}

到这里mybatis层就基本的就写的差不多了

二、Spring层

编写spring整合dao层的配置文件spring-dao.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><!--1、关联数据库配置文件-->
<context:property-placeholder location="classpath:database.properties"/><!--2、连接池
dbcp  c3p0(这里用这个连接池,用之前需要先导入包,我们之前已经导入过了)  druid hikari
--><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><!--配置连接池属性--><property name="driverClass" value="${jdbc.driver}"/><property name="jdbcUrl" value="${jdbc.url}"/><property name="user" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/><!-- c3p0连接池的私有属性 --><property name="maxPoolSize" value="30"/><property name="minPoolSize" value="10"/><!-- 关闭连接后不自动commit --><property name="autoCommitOnClose" value="false"/><!-- 获取连接超时时间 --><property name="checkoutTimeout" value="10000"/><!-- 当获取连接失败重试次数 --><property name="acquireRetryAttempts" value="2"/></bean><!--3、sqlSessionFactory--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><!--绑定Mybatis的配置文件--><property name="configLocation" value="classpath:mybatis-config.xlm"/></bean><!--4、配置dao接口扫描包,动态的实现了Dao接口可以注入到Spring容器中--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--        注入sqlSessionFactory --><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!--        需要扫描的dao包--><property name="basePackage" value="com.li.dao"/></bean></beans>

三、整合service层

编写spring整合service层的配置文件spring-service.xml

在注入所有的业务类时要将三个配置文件 spring-service.xml  applicationContext.xml   spring-dao.xml三个配置文件整合到一起

  

 

 要不然会报错如下:

使用注解将所有业务类注入到Spring中

spring-service.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--1.扫描service下的包--><context:component-scan base-package="com.li.service"/><!--2.将我们的所有业务类,注入到Spring,可以通过配置,或者注解实现  这里用配置--><bean id="BookServiceImp" class="com.li.service.BookServiceImp"><property name="bookMapper" ref="bookMapper"/></bean><!--3.申明式事务配置--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--注入数据源        --><property name="dataSource" ref="dataSource"/></bean></beans>

 四、springmvc层

1、配置web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--1.注册DispatcherServlet--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--关联一个springmvc的配置文件:【servlet-name】-servlet.xml--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><!--启动级别-1--><load-on-startup>1</load-on-startup></servlet><!--/ 匹配所有的请求;(不包括.jsp)--><!--/* 匹配所有的请求;(包括.jsp)--><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>

编写spring-mvc.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"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttps://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 --><context:component-scan base-package="com.li.controller"/><!-- 让Spring MVC不处理静态资源(静态资源过滤) --><mvc:default-servlet-handler /><!--支持mvc注解驱动在spring中一般采用@RequestMapping注解来完成映射关系要想使@RequestMapping注解生效必须向上下文中注册DefaultAnnotationHandlerMapping和一个AnnotationMethodHandlerAdapter实例这两个实例分别在类级别和方法级别处理。而annotation-driven配置帮助我们自动完成上述两个实例的注入。--><mvc:annotation-driven /><!-- 视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"id="internalResourceViewResolver"><!-- 前缀 --><property name="prefix" value="/WEB-INF/jsp/" /><!-- 后缀 --><property name="suffix" value=".jsp" /></bean><!--这里是编写Controller类后注册的bean-->
<!--    <bean name="/h1" class="com.li.controller.ControllerTest1"/>-->
</beans>

到这里底层结构就差不多写完了

五、让Controller层和jsp交互起来

1、编写Controller类

package com.li.controller;import com.li.pojo.Books;
import com.li.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.RequestMapping;import java.util.List;@Controller
@RequestMapping("/book")
public class BookController {//Controller层调用 service层//为引用类型属性设置值@Autowired//为引用类型属性指定注入的bean@Qualifier("BookServiceImp")//设置全局变量private BookService bookService;//查询所有的书籍,并且返回到一个书籍展示页面@RequestMapping("/allBook")public String list(Model model){
//        调用查询全部书籍方法List<Books> books = bookService.queryAllBook();
//        将得到的值返回给前端model.addAttribute("books:",books);return "allBook";}}

2、编写返回的对应的前端页面和欢迎页跳转前端页面

首页跳转页面

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>首页</title>
</head>
<body>
<h2><a href="${pageContext.request.contextPath}/book/allBook">进入书籍展示页面</a>
</h2>
</body>
</html>

前端页面

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>书籍展示</title>
</head>
<body>
<h2>书籍展示</h2>
</body>
</html>

这里会报一个500的错

因为我们web.xml中关联spring配置文件的时候我们关联的是一部分配置文件,没有关联到总的配置文件

 改成总配置文件就可以了

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--1.注册DispatcherServlet--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--关联一个springmvc的配置文件:【servlet-name】-servlet.xml--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></init-param><!--启动级别-1--><load-on-startup>1</load-on-startup></servlet><!--/ 匹配所有的请求;(不包括.jsp)--><!--/* 匹配所有的请求;(包括.jsp)--><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!--解决乱码问题--><filter><filter-name>gen</filter-name><filter-class>com.li.properties.GenericEncodingFilter</filter-class></filter><filter-mapping><filter-name>gen</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>

排错思路

 3、从前端得到数据,和美化页面

1、写程序的顺序是 从底层出发最后到前端

数据库 ---》 dao层  ---》 service  ---》 controller层  --->前端

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

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

相关文章

二叉树链式结构的实现

1.创建二叉树 (1)创建结构体 typedef int BTDataType;typedef struct BinaryTreeNode {BTDataType _data;struct BinaryTreeNode* _left;struct BinaryTreeNode* _right; }BTNode;(2)根据前序遍历构建树 //通过前序遍历的数组"123##45##6##"构建二叉树 BTNode* Bi…

vue组合式和选项式

Vue中的组合式(Composition API)和选项式(Options API)是两种不同的编写组件逻辑的方法。 组合式API&#xff08;Composition API&#xff09;: 使用函数来定义组件逻辑&#xff0c;可以更灵活地重用和组合逻辑。使用setup函数作为组件的入口点&#xff0c;在这里可以访问pro…

docker以挂载目录启动容器报错问题的解决

拉取镜像&#xff1a; docker pull elasticsearch:7.4.2 docker pull kibana:7.4.2 创建实例&#xff1a; mkdir -p /mydata/elasticsearch/configmkdir -p /mydata/elasticsearch/dataecho "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasti…

vs2019 c++20 规范 STL库中关于时间的模板 ratio<T,U> , duration<T,U> , time_point<T,U>等

(探讨一)在学习线程的时候&#xff0c;一些函数会让线程等待或睡眠一段时间。函数形参是时间单位&#xff0c;那么在 c 中是如何记录和表示时间的呢&#xff1f;以下给出模板简图&#xff1a; &#xff08;2 探讨二&#xff09;接着给出对模板类 duration_values 的成员函数的测…

【Leetcode 705 】设计哈希集合——数组嵌套链表(限制哈希Key)

题目 不使用任何内建的哈希表库设计一个哈希集合&#xff08;HashSet&#xff09;。 实现 MyHashSet 类&#xff1a; void add(key) 向哈希集合中插入值 key 。bool contains(key) 返回哈希集合中是否存在这个值 key 。void remove(key) 将给定值 key 从哈希集合中删除。如果…

免费企业域名备案手把手教程

走的阿里云的备案服务&#xff0c;全程免费 前提 主办者&#xff1a;你的企业主办者负责人&#xff1a;当前登录的阿里云账户的人&#xff0c;不是企业法人的话&#xff0c;得准备委托书&#xff0c;会有地方提供模板&#xff0c;打印一下&#xff0c;签字扫描上传就行域名的…

imweb前端教程:深入探索前端技术的奥秘

imweb前端教程&#xff1a;深入探索前端技术的奥秘 在数字化浪潮的推动下&#xff0c;前端技术日益成为互联网行业的核心驱动力。imweb前端教程旨在为广大前端开发者提供一份全面而深入的学习指南&#xff0c;帮助大家更好地掌握前端技术的精髓。本文将从四个方面、五个方面、…

【强化学习】DPO(Direct Preference Optimization)算法学习笔记

【强化学习】DPO&#xff08;Direct Preference Optimization&#xff09;算法学习笔记 RLHF与DPO的关系KL散度Bradley-Terry模型DPO算法流程参考文献 RLHF与DPO的关系 DPO&#xff08;Direct Preference Optimization&#xff09;和RLHF&#xff08;Reinforcement Learning f…

C++知识点

1. 构造函数&#xff1a;当没有写任何构造函数(含拷贝构造)&#xff0c;系统会生成默认的无参构造&#xff0c;并且访问属性是共有。 默认拷贝构造&#xff1a;当没有写任何的拷贝构造&#xff0c;系统会生成默认的拷贝构造->是一个浅拷贝 写了拷贝构造函数&#xff0c;这…

Kaggle线上零售 CRM分析(RFM+BG-NBD+生存分析+PySpark)

数据集地址&#xff1a;数据集地址 我的NoteBook地址&#xff1a;NoteBook地址 这个此在线零售数据集包含2009年12月1日至2011年12月9日期间的在线零售的所有交易。该公司主要销售独特的各种场合礼品。这家公司的许多客户都是批发商。本文将通过pyspark对数据进行导入与预处理&…

思迈特受邀参加工信部等权威机构行业盛会,探讨AI领域前沿技术

近日&#xff0c;思迈特软件作为国产BI领域知名厂商&#xff0c;多次受邀出席行业盛会&#xff0c;与众多业内专家学者、行业精英及知名企业代表等汇聚一堂共襄盛会&#xff0c;探讨行业前沿热点研究及最新趋势&#xff0c;分享企业数字化建设创新成果与成功实践&#xff0c;共…

Spring高手之路19——Spring AOP注解指南

文章目录 1. 背景2. 基于AspectJ注解来实现AOP3. XML实现和注解实现AOP的代码对比4. AOP通知讲解5. AOP时序图 1. 背景 在现代软件开发中&#xff0c;面向切面编程&#xff08;AOP&#xff09;是一种强大的编程范式&#xff0c;允许开发者跨越应用程序的多个部分定义横切关注点…

深度解析:重庆耶非凡科技有限公司的人力rpo项目

在当今竞争激烈的商业环境中&#xff0c;人力资源项目的成功与否往往决定了一个企业的长远发展。重庆耶非凡科技有限公司作为行业内的佼佼者&#xff0c;其人力资源项目备受瞩目。本文将深入探讨该公司的人力资源项目&#xff0c;特别是其独特的选品师项目和人力RPO服务。 首先…

【做一道算一道】无重叠区间

无重叠区间 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 示例 1: 输入: intervals [[1,2],[2,3],[3,4],[1,3]] 输出: 1 解释: 移除 [1,3] 后&#xff0c;剩下的区间没有…

2024年06月在线IDE流行度最新排名

点击查看最新在线IDE流行度最新排名&#xff08;每月更新&#xff09; 2024年06月在线IDE流行度最新排名 TOP 在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的 在线IDE被搜索的次数越多&#xff0c;人们就会认为它越受欢迎。原始数据来自谷歌Trends 如果您相…

安装、测试和训练OpenPCDet:一篇详尽的指南

简介 OpenPCDet是一个用于3D目标检测的开源工具箱&#xff0c;它提供了多种数据集的加载器&#xff0c;支持多种模型&#xff0c;并且易于扩展。在本博客中&#xff0c;我将引导你完成OpenPCDet的安装过程&#xff0c;并展示如何测试和训练预训练模型。 安装OpenPCDet 环境要…

数字光强测量仪OPT3001

外观 参考价格 原理图 频谱 特性 说明 OPT3001 传感器用于测量可见光的密度。传感器的光 谱响应与人眼的视觉响应紧密匹配&#xff0c;其中具有很高的红 外线阻隔。 OPT3001 是一款可如人眼般测量光强的单芯片照度 计。OPT3001 器件兼具精密的频谱响应和较强的 IR 阻隔功能&a…

基于Weaviate构建多模态检索和多模态检索增强(RAG): Building Multimodal Search and RAG

Building Multimodal Search and RAG 本文是学习 https://www.deeplearning.ai/short-courses/building-multimodal-search-and-rag/ 这门课的学习笔记。 What you’ll learn in this course Learn how to build multimodal search and RAG systems. RAG systems enhance an …

JVM垃圾回收器的选择

在java中&#xff0c;垃圾回收&#xff08;gc&#xff09;是重要的过程&#xff0c;用于管理内存&#xff0c;回收不被使用的对象&#xff0c;垃圾回收主要针对的是内存结构中的堆内存进行回收&#xff0c;内存结构和回收算法请参考java内存结构及垃圾回收算法介绍 垃圾回收器的…

在iPhone上恢复已删除的Safari历史记录的最佳方法

您是否正在寻找恢复 iPhone 上已删除的 Safari 历史记录的最佳方法&#xff1f;好吧&#xff0c;这篇文章提供了 4 种在有/无备份的情况下恢复 iPhone 上已删除的 Safari 历史记录的最佳方法。现在按照分步指南进行操作。 iPhone 上的 Safari 历史记录会被永久删除吗&#xff1…