MyBatis的基本入门及Idea搭建MyBatis坏境且如何实现简单的增删改查(CRUD)---详细介绍

news2024/9/28 4:59:58

一,MaBatis是什么?

   首先是一个开源的Java持久化框架,它可以帮助开发人员简化数据库访问的过程并提供了一种将SQL语句与Java代码进行解耦的方式,使得开发人员可以更加灵活地进行数据库操作。

1.1 Mabatis 受欢迎的点

MyBatis不仅是开源框架,也给我们带来了许多好处的点,如下:

1.1.1简化数据库操作

   MyBatis提供了一种简单而直观的方式来执行数据库操作,开发人员只需要编写SQL语句,并通过映射文件将SQL语句与Java对象进行映射,就可以完成数据库的增删改查操作。

1.1.2灵活性:

     MyBatis允许开发人员编写原生的SQL语句,这意味着你可以完全控制SQL语句的编写和执行过程。这种灵活性使得开发人员可以根据具体的需求进行优化和调整,从而提高数据库操作的性能

1.1.3易于集成:

    MyBatis可以与各种主流的Java框架(如Spring)进行集成,使得开发人员可以更加方便地使用MyBatis进行数据库操作

1.2 优缺点

一个框架当然也有优点和缺点,以下几点大家可以自行理解

优点:

提高开发效率:

    MyBatis简化了数据库操作的过程,使得开发人员可以更加专注于业务逻辑的实现,从而提高开发效率。

灵活性和可维护性:

   MyBatis允许开发人员编写原生的SQL语句,这使得数据库操作更加灵活,并且易于维护和调试。

性能优化:

  MyBatis允许开发人员对SQL语句进行优化,从而提高数据库操作的性能。

缺点:

学习曲线较陡:

    相对于其他ORM框架,MyBatis 的学习曲线可能较陡峭。使用 MyBatis 需要熟悉 SQL 语句的编写和数据库操作的细节,对于没有相关经验的开发人员来说可能需要一些时间来适应。

配置复杂:

   MyBatis 的配置文件相对较为复杂,需要开发人员手动编写和维护。这可能增加了一些额外的工作量和出错的可能性。

缺乏自动化功能:

    相对于一些全自动化的 ORM 框架,MyBatis 需要开发人员手动编写 SQL 语句和映射文件。这意味着开发人员需要更多地关注数据库操作的细节,可能会增加一些开发工作量。

不适合简单的 CRUD 操作:

 对于一些简单的 CRUD(增删改查)操作,MyBatis 可能显得有些繁琐。相比之下,一些全自动化的 ORM 框架可能更适合处理这些简单的操作

二,搭建MyBatis的坏境

2.1 创建maven工程

注意:一定要联网,因为创建Maven项目要下载相关的插件

 

 

2.2 导入相关pom依赖

 1 将properties及dependencies标签 替换成以下xml代码

 <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <!-- ********************** junit单元测试依赖 ********************** -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

    <!-- ********************** Java Servlet API  ********************** -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.0</version>
      <scope>provided</scope>
    </dependency>

    <!-- ********************** Mybatis依赖 ********************** -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.5</version>
    </dependency>

    <!-- ********************** Mysql JDBC驱动 ********************** -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.44</version>
    </dependency>

    <!-- **********************  日志配置  ********************** -->
    <!--记得修改mybatis.cfg.xml添加如下内容-->
    <!--<setting name="logImpl" value="LOG4J2"/>-->
    <!--核心log4j2jar包-->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.9.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.9.1</version>
    </dependency>
    <!--web工程需要包含log4j-web,非web工程不需要-->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-web</artifactId>
      <version>2.9.1</version>
    </dependency>
  </dependencies>

2 将<build>标签中的</pluginManagement>给删掉或注释掉(解除版本锁定)

3 在<build>标签中添加下述代码xml

   <resources>
            <!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题-->
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>jdbc.properties</include>
                    <include>*.xml</include>
                </includes>
            </resource>
        </resources>

4 将 <plugins>标签下的<plugin>标签换成一下xml代码

  <groupId>org.mybatis.generator</groupId>
          <artifactId>mybatis-generator-maven-plugin</artifactId>
          <version>1.3.2</version>
          <dependencies>
            <!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 -->
            <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>5.1.44</version>
            </dependency>
          </dependencies>
          <configuration>
            <overwrite>true</overwrite>
          </configuration>
        </plugin>

2.3 Mybatis相关插件安装

我们知道Mybatis是一款有关于数据库的框架,所以我们还需要导入关于数据库连接的配置文件

在resources包中创建File文件,将以下代码copy上去

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis_ssm?useUnicode=true&characterEncoding=UTF-8
jdbc.username=mybatis_ssm
jdbc.password=123456

修改web.xml中的文件配置

<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_3_1.xsd"
         version="3.1">
  <display-name>Archetype Created Web Application</display-name>
</web-app>

安装四款插件:

1 MaBatisX

 2 Mybatia Generator

 

  3 Mybatis Tools

 

4 Maven helper

安装完毕插件,接下来就是Mytatis的相关配置

2.4 Mybatis.cfg.xml配置

众所周知,一款框架必定有自己的配置文件,Mybatis也是一样有配置文件

  Mybatis.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 引入外部配置文件 -->
    <properties resource="jdbc.properties"/>

    <settings>
        <setting name="logImpl" value="LOG4J2"/>
    </settings>

    <!-- 别名 -->
    <typeAliases>
        <!--<typeAlias type="com.javaxl.model.Book" alias="Book"/>-->
    </typeAliases>


    <!-- 配置mybatis运行环境 -->
    <environments default="development">
        <environment id="development">
            <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
            <transactionManager type="jdbc"/>

            <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
            <!-- POOLED 表示支持JDBC数据源连接池 -->
            <!-- UNPOOLED 表示不支持数据源连接池 -->
            <!-- JNDI 表示支持外部数据源连接池 -->
            <dataSource type="POOLED">
                <property name="driver"
                          value="${jdbc.driver}"/>
                <property name="url"
                          value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
<!--        <mapper resource="com/javaxl/mapper/BookMapper.xml"/>-->
    </mappers>
</configuration>

 创建 generatorConfig.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>
    <!-- 引入配置文件 -->
    <properties resource="jdbc.properties"/>

    <!--指定数据库jdbc驱动jar包的位置-->
    <classPathEntry location="D:\\initPath\\mvn_repository\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar"/>

    <!-- 一个数据库一个context -->
    <context id="infoGuardian">
        <!-- 注释 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/><!-- 是否取消注释 -->
            <property name="suppressDate" value="true"/> <!-- 是否生成注释代时间戳 -->
        </commentGenerator>

        <!-- jdbc连接 -->
        <jdbcConnection driverClass="${jdbc.driver}"
                        connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>

        <!-- 类型转换 -->
        <javaTypeResolver>
            <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- 01 指定javaBean生成的位置 -->
        <!-- targetPackage:指定生成的model生成所在的包名 -->
        <!-- targetProject:指定在该项目下所在的路径  -->
        <javaModelGenerator targetPackage="com.javaxl.model"
                            targetProject="src/main/java">
            <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="false"/>
            <!-- 是否对model添加构造函数 -->
            <property name="constructorBased" value="true"/>
            <!-- 是否针对string类型的字段在set的时候进行trim调用 -->
            <property name="trimStrings" value="false"/>
            <!-- 建立的Model对象是否 不可改变  即生成的Model对象不会有 setter方法,只有构造方法 -->
            <property name="immutable" value="false"/>
        </javaModelGenerator>

        <!-- 02 指定sql映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="com.javaxl.mapper"
                         targetProject="src/main/java">
            <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!-- 03 生成XxxMapper接口 -->
        <!-- type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象 -->
        <!-- type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象 -->
        <!-- type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口 -->
        <javaClientGenerator targetPackage="com.javaxl.mapper"
                             targetProject="src/main/java" type="XMLMAPPER">
            <!-- 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] -->
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>

        <!-- 配置表信息 -->
        <!-- schema即为数据库名 -->
        <!-- tableName为对应的数据库表 -->
        <!-- domainObjectName是要生成的实体类 -->
        <!-- enable*ByExample是否生成 example类 -->
        <!--<table schema="" tableName="t_book" domainObjectName="Book"-->
               <!--enableCountByExample="false" enableDeleteByExample="false"-->
               <!--enableSelectByExample="false" enableUpdateByExample="false">-->
            <!--&lt;!&ndash; 忽略列,不生成bean 字段 &ndash;&gt;-->
            <!--&lt;!&ndash; <ignoreColumn column="FRED" /> &ndash;&gt;-->
            <!--&lt;!&ndash; 指定列的java数据类型 &ndash;&gt;-->
            <!--&lt;!&ndash; <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> &ndash;&gt;-->
        <!--</table>-->

        <table schema="" tableName="t_mvc_Book" domainObjectName="Book"
               enableCountByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" enableUpdateByExample="false">
            <!-- 忽略列,不生成bean 字段 -->
            <!-- <ignoreColumn column="FRED" /> -->
            <!-- 指定列的java数据类型 -->
            <!-- <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> -->
        </table>

    </context>
</generatorConfiguration>

修改 generatorConfig.xml文件

①修改Mysql驱动的位置

找到 指定数据库jdbc驱动jar包的位置 mysql-connector-java\5.1.44 该jar

 

复制上面jar路径,修改generatorConfig.xml中的文件的路径 <classPathEntry>标签,复制上去之后要在每个 \斜杠多打一个斜杠,如果这个路径错了不会给你生成相对应的代码

 

 ②修改JavaBean生成的位置

 ③修改SQL对应的配置文件的生成地址 

 ④修改Dao层代码地址的生成地址 

⑤修改指定需要生成增删改查代码对应的表 

 

 如果你想一次性生成多个那么你就复制多个table出来,修改对应的sql脚本名即可

双击我们下载好的插件执行生成代码即可

双击之后等待自动创建所需要的包和类,自动生成如下:

 

三、结合Mybatis生成代码完成增删改查

①创建一个util包和一个SessionUtil

SessionUtil类:

package com.Bing.util;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/**
 * @author 小李飞刀
 * @site www.javaxl.com
 * @company xxx公司
 * @create  2023-8-21
 */
public class SessionUtil {
    private static SqlSessionFactory sessionFactory;
    private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
    static {
        sessionFactory = new SqlSessionFactoryBuilder().build(SessionUtil.class.getResourceAsStream("/mybatis.cfg.xml"));
    }

    public static SqlSession openSession() {
        SqlSession session = threadLocal.get();
        if (null == session) {
            session = sessionFactory.openSession();
            threadLocal.set(session);
        }
        return session;
    }

    public static void main(String[] args) {
        SqlSession session = openSession();
        System.out.println(session.getConnection());
        session.close();
//        System.out.println(session.getConnection());
    }
}

②创建biz层和BookBiz接口(直接拷贝mapper生成的即可)

package com.Bing.biz;

import com.Bing.model.Book;

public interface BookBiz {
    int deleteByPrimaryKey(Integer bid);

    int insert(Book record);

    int insertSelective(Book record);

    Book selectByPrimaryKey(Integer bid);

    int updateByPrimaryKeySelective(Book record);

    int updateByPrimaryKey(Book record);
}

③创建impl层用bookbizimpl实现BookBiz

package com.Bing.biz.impl;

import com.Bing.biz.BookBiz;
import com.Bing.mapper.BookMapper;
import com.Bing.model.Book;

/**
 * @Name BingBing
 * @company zking cy
 * @create 2023-08-21-11:30
 */
public class BookBizImpl implements BookBiz {
    private BookMapper bookMapper;
    @Override
    public int deleteByPrimaryKey(Integer bid) {
       return  bookMapper.deleteByPrimaryKey(bid);
    }

    @Override
    public int insert(Book record) {
        return bookMapper.insert(record);
    }

    @Override
    public int insertSelective(Book record) {
        return bookMapper.insertSelective(record);
    }

    @Override
    public Book selectByPrimaryKey(Integer bid) {
        return bookMapper.selectByPrimaryKey(bid);
    }

    @Override
    public int updateByPrimaryKeySelective(Book record) {
        return bookMapper.updateByPrimaryKeySelective(record);
    }

    @Override
    public int updateByPrimaryKey(Book record) {
        return bookMapper.updateByPrimaryKey(record);
    }
}

④测试

注释Junit的<scope>标签用于指定依赖的范围表示该依赖在编译、测试和运行时都有效。

 测试类:

package com.Bing.Demo;

import com.Bing.biz.BookBiz;
import com.Bing.biz.impl.BookBizImpl;
import com.Bing.mapper.BookMapper;
import com.Bing.util.SessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
 * @Name BingBing
 * @company zking cy
 * @create 2023-08-21-11:37
 */
public class demo1 {
 private SqlSession sqlSession;
 private BookBiz bookBiz;


    @Before
    public void setUp() throws Exception {
        BookBizImpl bookBiz= new BookBizImpl();//实例化
        System.out.println("初始化方法...");
        //工具类中获取session对象
        sqlSession = SessionUtil.openSession();

        //从session对象中获取mapper对象
        BookMapper mapper = sqlSession.getMapper(BookMapper.class);
        bookBiz.setBookMapper(mapper);
        this.bookBiz=bookBiz;
    }

    @After
    public void tearDown() throws Exception {
        System.out.println("方法测试结束。。");
        sqlSession.commit();
    }

    @Test
    public void deleteByPrimaryKey() {
        System.out.println("测试删除业务方法");
          bookBiz.deleteByPrimaryKey(32);
    }
    @Test
    public void selectByPrimaryKey() {

        System.out.println("测试的查询业务方法。。。");
        //System.out.println(bookBiz.getBookMapper());
        System.out.println(bookBiz.selectByPrimaryKey(45));
    }


}

这样会运行报错,是getMapper没有值,这时候我们想起来,前面因为还没生成代码,为了防止报错我们将<mappers>里面的配置映射文件内容注释掉了,现在我们更改回来。

 

现在我们来操作将编号为38删除

 

运行 deleteByPrimaryKey 方法

数据库结果:

 

运行 selectByPrimaryKey 查询方法

查询结果:

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

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

相关文章

玄而又玄——我亲历的三大总线

总线是计算机系统中的桥梁和公路。对于要学习计算机系统的人来说&#xff0c;如果不理解总线&#xff0c;那么很多认知就没办法落到实处&#xff0c;想不清两样东西是如何连接起来&#xff0c;数据是如何从一点到另一点的。 最近两三年&#xff0c;做了比较多的底层开发&#x…

Scratch 之 创作小技巧 -- 让触碰效果更丝滑

今天小技巧的主题是——丝滑 a.让触碰效果更丝滑 ——非线性放大 相信大家&#xff0c;做游戏时都会有一开始按键吧&#xff0c;把鼠标放上去&#xff0c;这个按键就会有相应的变化&#xff0c;如放大&#xff0c;作为初学者&#xff0c;这段的代码可能是这样↓ 虽然看起来挺…

解析大规模开发:提升企业级开发效率与质量,加速创新

在数字化转型的大环境下&#xff0c;越来越多的企业依赖软件来驱动业务和创新。然而&#xff0c;随着开发规模日益庞大&#xff0c;如何更好地提升研发效能&#xff0c;从而塑造更强大的竞争力&#xff0c;已然成为众多企业亟待解决的共同难题。 作为国内领先的DevSecOps提供商…

凉而不冷 柔而不弱 三菱重工海尔舒适风科技助您整夜安眠

古人云&#xff1a;安寝乃人生乐事。可随着夏天的到来&#xff0c;昼长夜短&#xff0c;家里的老人、儿童、父母都存在不同的入睡苦恼。对于儿童来说&#xff0c;空调温度调的太低容易踢被子着凉&#xff0c;温度调的高又怕孩子满头大汗&#xff1b;父母自身也会因为半夜帮孩子…

盛元广通高校实验室开放预约与综合管理系统LIMS

系统概述&#xff1a; 高校实验室涉及到的课程、老师、学生多&#xff0c;管理起来费时费力&#xff0c;盛元广通高校实验室开放预约与综合管理系统LIMS提供简单易用的账号管理、实验室管理、课程管理、实验项目管理、实验时间设定&#xff1b;为学生提供简单易用的自主实验选…

使用 NBAR(基于网络的应用程序识别) 进行应用流量分析

识别和分类网络应用程序是有效管理网络带宽的关键。通过对网络流量进行分类&#xff0c;管理员可以根据企业的需要可视化、组织和确定网络流量的优先级。通过识别和分类网络流量&#xff0c;网络管理员可以有效地应用 QoS 策略&#xff0c;从而实现优化的网络带宽性能。 什么是…

docker 安装oracle19c linux命令执行sql

docker安装oracle # 下载镜像 19.3.0.0.0 docker pull registry.cn-hangzhou.aliyuncs.com/laowu/oracle:19c # 创建文件 mkdir -p /home/mymount/oracle19c/oradata # 授权&#xff0c;不授权会导致后面安装失败 chmod 777 /home/mymount/oracle19c/oradatadocker run -d \ …

0基础学习VR全景平台篇 第88篇:智慧眼-成员管理

一、功能说明 成员管理&#xff0c;是指管理智慧眼项目的成员&#xff0c;拥有相关权限的人可以进行添加成员、分配成员角色、设置成员分类、修改成员以及删除成员五项操作。但是仅限于管理自己的下级成员&#xff0c;上级成员无权管理。 二、前台操作页面 登录智慧眼后台操…

JS中如何区分变量是数组还是对象

总结&#xff1a; 这里提供三种方法&#xff1a; var arr[] var arr2{}1、constructor:数组的constructor是function Array(){};对象的constructor是function Object(){}2、instanceof&#xff1a;数组 instanceof Array&#xff1a;为true;对象 instanceof Array: 为false;3、…

ICASSP 2023说话人识别方向论文合集

今年入选 ICASSP 2023 的论文中&#xff0c;说话人识别&#xff08;声纹识别&#xff09;方向约有64篇&#xff0c;初步划分为Speaker Verification&#xff08;31篇&#xff09;、Speaker Recognition&#xff08;9篇&#xff09;、Speaker Diarization&#xff08;17篇&#…

GuLi商城-前端基础Vue指令-单向绑定双向绑定

什么是指令? 指令 (Directives) 是带有 v- 前缀的特殊特性。 指令特性的预期值是:单个 JavaScript 表达式。 指令的职责是&#xff0c;当表达式的值改变时&#xff0c;将其产生的连带影响&#xff0c;响应式地作用于DOM 例如我们在入门案例中的 v-on&#xff0c;代表绑定事…

IO多路复用(poll:与select类似,当监测的文件描述符有一个或多个就绪时,执行对应的IO操作

使用poll实现TCP循环服务器接收客户端消息并打印 服务器 客户端 写一个makefile方便使用 结果 笔记

611. 有效三角形的个数

611. 有效三角形的个数 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a; 原题链接&#xff1a; 611. 有效三角形的个数 https://leetcode.cn/problems/valid-triangle-number/description/ 完成情况&#xff1a; 解题思路&#xff1a; …

第一篇:编写 Hello World 程序

编写 Hello World 程序 Hello World 程序就是让应用程序显示 Hello World 字符串。这是最简单的应用&#xff0c;但却包含了一个应用程序的基本要素&#xff0c;所以一般使用它来演示程序的创建过程。本章要讲的就是在Qt Creator 中创建一个图形用户界面的项目&#xff0c;从而…

什么是数字化?什么是数字化转型?为什么企业选择数字化转型?

数字化&#xff1a; 数字化是指将模拟信息或物理对象转换为数字格式的过程。这涉及将数据、文档、图像、视频和其他形式的信息转换为可以以电子方式处理、存储和传输的二进制代码。与传统的模拟方法相比&#xff0c;数字化可以更有效地存储、检索和操作数据。 数字化转型&…

3D医学教学虚拟仿真系统:身临其境感受人体结构和功能

3D医学教学虚拟仿真系统是一种基于虚拟现实技术的教学工具&#xff0c;它可以帮助学生更好地理解和掌握医学知识。这种课件通常包括人体解剖学、生理学、病理学等方面的教学内容&#xff0c;通过三维立体的图像和动画展示&#xff0c;让学生更加直观地了解人体结构和功能。 与传…

.IFC文件如何打开【在线工具】

IFC文件是以工业基础类&#xff08;IFC&#xff09;格式创建的模型文件&#xff0c;这是建筑信息模型&#xff08;BIM&#xff09;程序使用的开放文件格式。它包含建筑物或设施模型&#xff0c;包括空间元素、材料和形状。 IFC&#xff08;工业基础类&#xff09;数据格式是建…

长胜证券:市场持续震荡 低位布局时机或已来临

业内人士表明&#xff0c;出资者心情的动摇起伏会大于商场价格&#xff0c;同时出资者心情的最高点和最低点往往滞后于商场价格的最高点和最低点&#xff0c;所以当商场动摇较大时&#xff0c;从心情动身去做决策往往不可能收到很好的出资效果。而当咱们以长期的心态参加出资&a…

学习开发振弦采集模块的注意事项

学习开发振弦采集模块的注意事项 &#xff08;三河凡科科技/飞讯教学&#xff09;振弦采集模块是一种用来实时采集和处理振弦信号的电子设备&#xff0c;在工业、航空、医疗等领域都有广泛应用。学习开发振弦采集模块需要注意以下几点&#xff1a; 一、硬件选择 首先需要选择…

汽车行业必读:ISO 26262和ASIL安全等级解读与攻略

ISO 26262&#xff0c;名称为“道路车辆——功能安全”&#xff0c;是汽车行业中使用的功能安全标准。而ASIL/ASIL级别则是确定软件开发安全要求的关键组成部分。 遵守这一标准对于汽车产品的开发来说至关重要。原始设备制造商、供应商和汽车零部件开发商们都需要遵守这一标准…