Mybatis多对一查询的配置及两种方法的使用示例对比以及Mybatis一对多查询两种方法使用示例及对比

一、Mybatis多对一查询的配置及两种方法的使用示例对比

    为了试验Mybatis多对一的查询,我们先在数据库中建两个表,一个城市表,一个市区表,一个城市有多个区是一个一对多的关系;多个区对应一个城市是一个多对一的关系。建表SQL及数据如下:

DROP TABLE IF EXISTS `citys`;
CREATE TABLE `citys` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`name` varchar(20) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
INSERT INTO `citys` VALUES ('1', '北京');
INSERT INTO `citys` VALUES ('2', '上海');DROP TABLE IF EXISTS `areas`;
CREATE TABLE `areas` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`cityid` int(20) unsigned NOT NULL,`area` varchar(20) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=42 DEFAULT CHARSET=utf8;
INSERT INTO `areas` VALUES ('1', '1', '海淀区');
INSERT INTO `areas` VALUES ('35', '1', '东城区');
INSERT INTO `areas` VALUES ('18', '1', '西城区');
INSERT INTO `areas` VALUES ('37', '1', '朝阳区');
INSERT INTO `areas` VALUES ('39', '2', '黄浦区');
INSERT INTO `areas` VALUES ('40', '2', '闵行区');
INSERT INTO `areas` VALUES ('41', '2', '徐汇区');

    接下来我们开始新建项目及module,相关的项目依赖及配置可参见文章:https://linge.blog.csdn.net/article/details/142846955icon-default.png?t=O83Ahttps://linge.blog.csdn.net/article/details/142846955 我们建立两个pojo类及两个mapper类,此时的Area pojo类中的city不再是一个字符串,而是关联city的pojo类。代码如下:

//city pojo类
package com.kermit.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class City {private int id;private String cityname;
}//area pojo类
package com.kermit.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Area {private int id;private City city;private String areaname;
}//AreaMapper类
package com.kermit.dao;import com.kermit.pojo.Area;
import java.util.List;public interface AreaMapper {//取得市区列表public List<Area> getArea();}

    接下来我们要来编辑mybatis的mapper.xml配置文件,我们这里只是试验多对一,只需要填写AreaMapper.xml文件,这里我们使用了两种方式来实现多对一的查询,一是在association中用子查询去取得城市数据数据,另一种是是使用显示联表SQL查询后通过resultMap对应到city对象中。配置如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--绑定DAO接口-->
<mapper namespace="com.kermit.dao.AreaMapper"><!--使用association用子查询去取得城市数据数据--><select id="getArea" resultMap="AreaCity">select * from areas</select><resultMap id="AreaCity" type="com.kermit.pojo.Area"><association property="city" javaType="com.kermit.pojo.City" select="getCity" column="cityid"/></resultMap><select id="getCity" resultType="com.kermit.pojo.City">select * from citys where id = #{cid};</select><!--使用association:使用显示联表SQL查询后通过resultMap对应到city对象中--><select id="getArea2" resultMap="AreaCity2">select areas.cityid,cityname,areas.id,areas.areaname from areas,citys where areas.cityid = citys.id</select><resultMap id="AreaCity2" type="com.kermit.pojo.Area"><result property="id" column="id" /><result property="areaname" column="areaname" /><association property="city" javaType="com.kermit.pojo.City" ><result property="id" column="cityid" /><result property="cityname" column="cityname" /></association></resultMap></mapper>

接下来我们去编辑测试类TestMybatis代码如下:

import com.kermit.dao.AreaMapper;
import com.kermit.pojo.Area;
import com.kermit.utils.MybatisConn;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;import java.io.IOException;
import java.util.List;public class TestMybatis {private static SqlSession sqlSession;private static AreaMapper mapper;static{try {sqlSession = MybatisConn.getSqlsession();} catch (IOException e) {e.printStackTrace();}mapper = sqlSession.getMapper(AreaMapper.class);}@Testpublic void areaToCity1() {//多对一的情况:取出区域的同时取得城市数据List<Area> areaList = mapper.getArea();for (Area area : areaList) {System.out.println(area);}sqlSession.close();}@Testpublic void areaToCity2(){//多对一的查询,通过sql查询再映射实现List<Area> areaList = mapper.getArea2();for (Area area : areaList) {System.out.println(area);}sqlSession.close();}
}

我们尝试运行两种查询,得到的结果分别如下:

#areaToCity1()结果如下:
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
Opening JDBC Connection
Created connection 1293241549.
Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@4d154ccd]
==>  Preparing: select * from areas 
==> Parameters: 
<==    Columns: id, cityid, areaname
<==        Row: 1, 1, 海淀区
====>  Preparing: select * from citys where id = ?; 
====> Parameters: 1(Long)
<====    Columns: id, cityname
<====        Row: 1, 北京
<====      Total: 1
<==        Row: 35, 1, 东城区
<==        Row: 18, 1, 西城区
<==        Row: 37, 1, 朝阳区
<==        Row: 39, 2, 黄浦区
====>  Preparing: select * from citys where id = ?; 
====> Parameters: 2(Long)
<====    Columns: id, cityname
<====        Row: 2, 上海
<====      Total: 1
<==        Row: 40, 2, 闵行区
<==        Row: 41, 2, 徐汇区
<==      Total: 7
Area(id=1, city=City(id=1, cityname=北京), areaname=海淀区)
Area(id=35, city=City(id=1, cityname=北京), areaname=东城区)
Area(id=18, city=City(id=1, cityname=北京), areaname=西城区)
Area(id=37, city=City(id=1, cityname=北京), areaname=朝阳区)
Area(id=39, city=City(id=2, cityname=上海), areaname=黄浦区)
Area(id=40, city=City(id=2, cityname=上海), areaname=闵行区)
Area(id=41, city=City(id=2, cityname=上海), areaname=徐汇区)
Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@4d154ccd]
Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@4d154ccd]
Returned connection 1293241549 to pool.
Process finished with exit code 0#areaToCity2()结果如下:
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
Opening JDBC Connection
Created connection 1400856767.
Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@537f60bf]
==>  Preparing: select areas.cityid,cityname,areas.id,areas.areaname from areas,citys where areas.cityid = citys.id 
==> Parameters: 
<==    Columns: cityid, cityname, id, areaname
<==        Row: 1, 北京, 1, 海淀区
<==        Row: 1, 北京, 35, 东城区
<==        Row: 1, 北京, 18, 西城区
<==        Row: 1, 北京, 37, 朝阳区
<==        Row: 2, 上海, 39, 黄浦区
<==        Row: 2, 上海, 40, 闵行区
<==        Row: 2, 上海, 41, 徐汇区
<==      Total: 7
Area(id=1, city=City(id=1, cityname=北京), areaname=海淀区)
Area(id=35, city=City(id=1, cityname=北京), areaname=东城区)
Area(id=18, city=City(id=1, cityname=北京), areaname=西城区)
Area(id=37, city=City(id=1, cityname=北京), areaname=朝阳区)
Area(id=39, city=City(id=2, cityname=上海), areaname=黄浦区)
Area(id=40, city=City(id=2, cityname=上海), areaname=闵行区)
Area(id=41, city=City(id=2, cityname=上海), areaname=徐汇区)
Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@537f60bf]
Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@537f60bf]
Returned connection 1400856767 to pool.
Process finished with exit code 0

    可以看到两种方式均能实现我们要的结果,但也有所不同。通过日志记录我们可以发现第一种方式areaToCity1()执行后,实际执行了3次SQL查询。而第二种方式areaToCity2()只进行了一次SQL查询操作,从性能来讲肯定是第二种更优越。

二、Mybatis一对多查询两种方法使用示例及对比

    演示所需要的数据库表及mybatis相关配置等见上篇文章及其关联的文章。此时我们已经有了城市与区域的一对多的关系,我们查询城市时,每个城市应该把它对应的多个区域数据取出来,这里我们要把pojo类进行一下修改,我们把Area类的city属性变成一个简单的cityid,而把City类的area变成一个List集合,每个值都是城市下面的一个区,即一对多的数据。代码如下:

//City的pojo类如下
package com.kermit.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.List;@Data
@NoArgsConstructor
@AllArgsConstructor
public class City {private int id;private String cityname;private List<Area> areaList;
}//Area的pojo类如下
package com.kermit.pojo;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Area {private int id;private int cityid;private String areaname;
}//CityMapper接口类如下:
package com.kermit.dao;import com.kermit.pojo.City;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;import java.util.List;public interface CityMapper {public List<City> getCity1();public List<City> getCity2();
}

    接下来我们来编写CityMapper.xml配置文件,我们仍然是通过两种方式来实现,一个是通过子查询嵌套的方式,一个是通过联表查询后将字段映射到数据中,这里和多对一查询有个大的不一样的关键词即collection和association。在多对一查询时,每个结果只需要关联后面的这个“一”,是使用association;而在一对多查询时,前面的结果需要将后面的多数据放至一个集合中。即collection。当然我为了一次到位,实际我这篇文章和上一遍多对一查询都有多对多的关系。CityMapper.xml配置文件如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--绑定DAO接口-->
<mapper namespace="com.kermit.dao.CityMapper"><!--1通过子查询嵌套--><select id="getCity1" resultMap="cityAndArea1">select * from citys;</select><resultMap id="cityAndArea1" type="com.kermit.pojo.City"><collection property="areaList" column="id" select="getAreas" javaType="ArrayList" ofType="com.kermit.pojo.Area"/></resultMap><select id="getAreas" resultType="com.kermit.pojo.Area">select * from areas where cityid= #{id}</select><!--2通过联表查询后将字段映射到数据中--><select id="getCity2" resultMap="cityAndArea2" >select areas.cityid,cityname,areas.id,areas.areaname from areas,citys where areas.cityid = citys.id;</select><resultMap id="cityAndArea2" type="com.kermit.pojo.City"><result property="id" column="cityid" /><result property="cityname" column="cityname" /><collection property="areaList" ofType="com.kermit.pojo.Area"><result property="id" column="id"/><result property="areaname" column="areaname"/></collection></resultMap></mapper>

最后我们编写测试类,分别调用我们已经定义好的两个方法,测试类代码如下:

import com.kermit.dao.AreaMapper;
import com.kermit.dao.CityMapper;
import com.kermit.pojo.Area;
import com.kermit.pojo.City;
import com.kermit.utils.MybatisConn;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;import java.io.IOException;
import java.util.List;public class TestMybatis {private static SqlSession sqlSession;private static CityMapper mapper;static{try {sqlSession = MybatisConn.getSqlsession();} catch (IOException e) {e.printStackTrace();}mapper = sqlSession.getMapper(CityMapper.class);}@Testpublic void getCityIncludeArea1(){List<City> cityList = mapper.getCity1();for (City city : cityList) {System.out.println(city);}sqlSession.close();}@Testpublic void getCityIncludeArea2(){List<City> cityList = mapper.getCity2();for (City city : cityList) {System.out.println(city);}sqlSession.close();}
}

运行结果如下:

//getCityIncludeArea1()方法运行结果如下
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
Opening JDBC Connection
Created connection 252277567.
Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@f09733f]
==>  Preparing: select * from citys; 
==> Parameters: 
<==    Columns: id, cityname
<==        Row: 1, 北京
====>  Preparing: select * from areas where cityid= ? 
====> Parameters: 1(Long)
<====    Columns: id, cityid, areaname
<====        Row: 1, 1, 海淀区
<====        Row: 35, 1, 东城区
<====        Row: 18, 1, 西城区
<====        Row: 37, 1, 朝阳区
<====      Total: 4
<==        Row: 2, 上海
====>  Preparing: select * from areas where cityid= ? 
====> Parameters: 2(Long)
<====    Columns: id, cityid, areaname
<====        Row: 39, 2, 黄浦区
<====        Row: 40, 2, 闵行区
<====        Row: 41, 2, 徐汇区
<====      Total: 3
<==      Total: 2
City(id=0, cityname=北京, areaList=[Area(id=1, cityid=1, areaname=海淀区), Area(id=35, cityid=1, areaname=东城区), Area(id=18, cityid=1, areaname=西城区), Area(id=37, cityid=1, areaname=朝阳区)])
City(id=0, cityname=上海, areaList=[Area(id=39, cityid=2, areaname=黄浦区), Area(id=40, cityid=2, areaname=闵行区), Area(id=41, cityid=2, areaname=徐汇区)])
Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@f09733f]
Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@f09733f]
Returned connection 252277567 to pool.
Process finished with exit code 0//getCityIncludeArea2()方法运行结果如下:
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
Opening JDBC Connection
Created connection 580673921.
Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@229c6181]
==>  Preparing: select areas.cityid,cityname,areas.id,areas.areaname from areas,citys where areas.cityid = citys.id; 
==> Parameters: 
<==    Columns: cityid, cityname, id, areaname
<==        Row: 1, 北京, 1, 海淀区
<==        Row: 1, 北京, 35, 东城区
<==        Row: 1, 北京, 18, 西城区
<==        Row: 1, 北京, 37, 朝阳区
<==        Row: 2, 上海, 39, 黄浦区
<==        Row: 2, 上海, 40, 闵行区
<==        Row: 2, 上海, 41, 徐汇区
<==      Total: 7
City(id=1, cityname=北京, areaList=[Area(id=1, cityid=0, areaname=海淀区), Area(id=35, cityid=0, areaname=东城区), Area(id=18, cityid=0, areaname=西城区), Area(id=37, cityid=0, areaname=朝阳区)])
City(id=2, cityname=上海, areaList=[Area(id=39, cityid=0, areaname=黄浦区), Area(id=40, cityid=0, areaname=闵行区), Area(id=41, cityid=0, areaname=徐汇区)])
Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@229c6181]
Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@229c6181]
Returned connection 580673921 to pool.
Process finished with exit code 0

    同多对一的查询一样,mapper.xml配置中使用子查询嵌套的方法在SQL执行的时候会进行多次查询,最终查询次数和取得的行数成正比增加。而使用联表查询后将数据映射到属性中只执行一次SQL查询,所以一对多、多对一的查询推荐使用联表查询后映射数据的方式处理。还有一个需要注意的地方是xml配置文件中的 javaType和ofType配置,这两项比较重要,且相对难以把握,要多加练习了解掌握。 

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

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

相关文章

第五届光学与图像处理国际学术会议(ICOIP 2025)征稿中版面有限!

第五届光学与图像处理国际学术会议&#xff08;ICOIP 2025&#xff09; 2025 5th International Conference on Optics and Image Processing (ICOIP 2025&#xff09; 重要信息 时间地点&#xff1a;2025年4月25-27日丨中国西安 截稿日期&#xff1a;2024年12月16日23:59 …

vue3项目使用百度地图实现地图选择功能代码封装(开箱即用)

vue3项目使用百度地图实现地图选择功能代码封装方案(开箱即用) <template><div class="bmapgl">

【软件测试】JUnit

Junit 是一个用于 Java 编程语言的单元测试框架&#xff0c;Selenium是自动化测试框架&#xff0c;专门用于Web测试 本篇博客介绍 Junit5 文章目录 Junit 使用语法注解参数执行顺序断言测试套件 Junit 使用 本篇博客使用 Idea集成开发环境 首先&#xff0c;创建新项目&#…

一图解千言,了解常见的流程图类型及其作用

在企业管理、软件研发过程中&#xff0c;经常会需要进行各种业务流程梳理&#xff0c;而流程图就是梳理业务时必要的手段&#xff0c;同时也是梳理的产出。但在不同的情况下适用的流程图又不尽相同。 本文我们就一起来总结一下8 种最常见的流程图类型 数据流程图 数据流程图&…

【CTF-SHOW】Web入门 Web14 【editor泄露-详】【var/www/html目录-详】

editor泄露问题通常出现在涉及文件编辑器或脚本编辑器的题目中&#xff0c;尤其是在Web安全或Pwn&#xff08;系统漏洞挖掘&#xff09;类别中。editor泄露的本质是由于系统未能妥善处理临时文件、编辑历史或进程信息&#xff0c;导致攻击者可以通过某种途径获取正在编辑的敏感…

javaweb-mybatis之动态sql

(1).if标签 编写好方法之后&#xff0c;选中方法名&#xff0c;alt回车&#xff0c;选第一个generate statement快捷生成xml里的标签 (2).foreach标签 用于批量删除 (3)sql和include标签

架构师面试:怎样规划公司的监控架构?

大家好&#xff0c;我是君哥。 监控系统在科技公司非常重要&#xff0c;它可以让运维人员和研发人员提前发现问题、定位问题&#xff0c;进而解决问题。 在我们实际工作中&#xff0c;使用的监控往往五花八门&#xff0c;比较混乱&#xff0c;今天来聊一聊怎么规划公司的监控…

QT开发:深入掌握 QtGui 和 QtWidgets 布局管理:QVBoxLayout、QHBoxLayout 和 QGridLayout 的高级应用

目录 引言 1. QVBoxLayout&#xff1a;垂直布局管理器 基本功能 创建 QVBoxLayout 添加控件 添加控件和设置对齐方式 设置对齐方式 示例代码与详解 2. QHBoxLayout&#xff1a;水平布局管理器 基本功能 创建 QHBoxLayout 添加控件 添加控件和设置对齐方式 设置对齐…

【CTF刷题9】2024.10.19

[MoeCTF 2021]babyRCE 考点&#xff1a;关键词过滤&#xff08;绕过方法参考往期博客&#xff09; 来源&#xff1a;nssctf <?php$rce $_GET[rce]; if (isset($rce)) {if (!preg_match("/cat|more|less|head|tac|tail|nl|od|vi|vim|sort|flag| |\;|[0-9]|\*|\|\%|\&g…

京存助力北京某电力研究所数据采集

北京某电力研究所已建成了一套以光纤为主&#xff0c;卫星、载波、微波等多种通信方式共存&#xff0c;分层级的电力专用的网络通信架构体系。随着用电、配电对网络的要求提高&#xff0c;以及终端通信入网的迅速发展&#xff0c;迫切地需要高效的通信管理系统来应对大规模、复…

Kaggle竞赛——森林覆盖类型分类

目录 1. 竞赛简要2. 数据分析2.1 特征类型统计2.2 四个荒野区域数据分析2.3 连续特征分析2.4 离散特征分析2.5 特征相关性热图2.6 特征间的散点关系图 3. 特征工程3.1 特征组合3.2 连续特征标准化 4. 模型搭建4.1 模型定义4.2 绘制混淆矩阵和ROC曲线4.3 模型对比与选择 5. 测试…

python爬虫案例——selenium爬取淘宝商品信息,实现翻页抓取(14)

文章目录 1、任务目标2、网页分析3、代码编写3.1 代码分析3.2 完整代码1、任务目标 目标网站:淘宝(https://www.taobao.com/) 任务要求:通过selenium实现自动化抓取 淘宝美食 板块下的所有商品信息,并实现翻页抓取,最后以csv格式将数据保存至本地;如: 2、网页分析 首先…

Qt-系统文件相关介绍使用(61)

目录 描述 输⼊输出设备类 打开/读/写/关闭 使用 先初始化&#xff0c;创建出大致的样貌 输入框设置 绑定槽函数 保存文件 打开文件 提取文件属性 描述 在C/C Linux 中我们都接触过关于文件的操作&#xff0c;当然 Qt 也会有对应的文件操作的 ⽂件操作是应⽤程序必不…

wpf grid 的用法

WPF中的Grid是一种布局控件&#xff0c;可用于将子控件按照行和列的方式排列。 以下是Grid控件的用法&#xff1a; 在XAML文件中&#xff0c;添加一个Grid控件&#xff1a; <Grid> </Grid>在Grid控件中&#xff0c;添加行和列定义&#xff1a; <Grid><…

Spring Cloud-Nacos版 学习理解

注册中心 Nacos 下载安装包 bin目录输入 cmd 进入命令行&#xff0c;输入startup.cmd -m standalone 启动 浏览器输入 http://127.0.0.1:8848/nacos/index.html&#xff0c;进入启动页面 账号密码均默认nacos 服务提供者 NacosProvider、服务调用者 NacosConsumer 服务提…

第五届计算机、大数据与人工智能国际会议(ICCBD+AI 2024)

第五届计算机、大数据与人工智能国际会议&#xff08;ICCBDAI 2024&#xff09;将于2024年11月1日-3日在江西景德镇召开。本届会议由景德镇陶瓷大学主办&#xff0c;西安交通大学、暨南大学、南京邮电大学、长沙学院、景德镇学院、ELSP&#xff08;爱迩思出版社&#xff09;、E…

Python Django 数据库优化与性能调优

Python Django 数据库优化与性能调优 Django 是一个非常流行的 Python Web 框架&#xff0c;它的 ORM&#xff08;对象关系映射&#xff09;允许开发者以简单且直观的方式操作数据库。然而&#xff0c;随着数据量的增长&#xff0c;数据库操作的效率可能会成为瓶颈&#xff0c…

使用 PyTorch 构建 LSTM 股票价格预测模型

目录 引言准备工作1. 训练模型&#xff08;train.py&#xff09;2. 模型定义&#xff08;model.py&#xff09;3. 测试模型和可视化&#xff08;test.py&#xff09;使用说明模型调整结论 引言 在金融领域&#xff0c;股票价格预测是一个重要且具有挑战性的任务。随着深度学习…

Linux文件操作基础

目录 Linux文件操作基础 引入 回顾C语言文件操作 系统调用接口 open函数 read函数和write函数 close函数 模拟C语言接口 文件描述符 如何理解Linux下一切皆文件 文本读写与二进制读写 Linux文件操作基础 引入 在Linux第一章提到过&#xff0c;在Linux中&#xff0…

快速创建一个vue项目并运行

前期准备工作: 1.安装node 2.安装npm 3.设置淘宝镜像 4.全局安装webpack 5.webpack 4.X 开始&#xff0c;需要安装 webpack-cli 依赖 6.全局安装vue-cli 正文开始: 1.创建项目 ,回车 vue init webpack vue-svg > Project name vue-demo 项目名称 回车 > Pro…