SpringBoot学习笔记(14)-整合Spring Data JPA

Spring Data JPA用法详解 Spring Data JPA: JPA(Java Persistence API)即java持久化API,它的出现主要是为了简化持久层开发以及整合ORM技术,结束Hibernate、TopLink、JDO等ORM框架各自为营的局面。JPA是在吸收现有ORM框架的基础上发展而来,易于使用,伸缩性强。总的来说,JPA包括以下三方面的技术: ORM映射元数据:支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系 API:操作实体对象来执行CRUD操作 查询语言:通过面向对象而非面向数据库的 阅读详情


Spring Data Jpa是Spring Data中的一员,Jpa的全称是Java Persistence API,可以通过注解或者XML描述【对象-关系表】之间的映射关系,并将实体对象持久化到数据库中。而Spring Data Jpa则是spring提供的一套简化JPA开发的框架,按照约定好的【方法命名规则】写dao层接口,就可以在不写接口实现的情况下,实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能,如分页、排序、复杂查询等等。

更多关于SpringBoot的总结请点击:SpringBoot使用总结

一、添加依赖

本次用的是Maven作为构建工具,所有在pom.xml中添加Spring Data Jpa的依赖:

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>

二、在application.properties中添加配置信息

##### datasource配置
# 数据库连接名
spring.datasource.username=root
# 数据库连接密码
spring.datasource.password=123
#数据库连接驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 数据库名称以及编码表
spring.datasource.url=jdbc:mysql:///mybatis?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8

#### spring.data的配置
# 数据库选择
spring.jpa.database = MYSQL
# 打印sql
spring.jpa.show-sql = true
# hibernate的启动策略 (create, create-drop, update, validate, none)
spring.jpa.hibernate.ddl-auto = none
# hibernate命名策略
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# hibernate方言
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect


三、为实体类添加注解

要使用Spring Data Jpa,首先要为实体类添加相应的注解,如果不添加这些注解则无法识别与数据库表的对应关系,或报错。

  • User
@Entity //标记为实体类
@Table(name="user") //对应的表
public class User implements Serializable {
    @Id //主键注解
    private Integer id;

    private String name;
  
    private String school;

    private static final long serialVersionUID = 1L;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    public String getSchool() {
        return school;
    }

    public void setSchool(String school) {
        this.school = school == null ? null : school.trim();
    }
}

四、创建自定义的Respository接口

  • UserRespository
/**
 * @Auther: ARong
 * @Date: 2019/1/10 15:48
 * @Description: DATA JAP的使用
 */
@Repository
public interface UserRespository extends JpaRepository<User,Long>{
    /**
     * @auther: Arong
     * @description: 通过name查询User的List
     * @param name
     * @return:  List<User>
     * @date: 2019/1/10 15:52
     */
    List<User> findByName(String name);

    /**
     * @auther: Arong
     * @description: 通过name删除
     * @param name
     * @return:
     * @date: 2019/1/10 19:52
     */
    @Modifying //update、delete一定要加这两个注解,不然报错
    @Transactional
    void deleteByName(String name);

}

五、创建JPA配置类

/**
 * @Auther: ARong
 * @Date: 2019/1/10 16:05
 * @Description: Jpa的配置类
 */
@Order(Ordered.HIGHEST_PRECEDENCE)
@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
@EntityScan(basePackages = {"com.iteason.springbootdatajpa.entity"}) //实体包扫描
@EnableJpaRepositories(basePackages = {"com.iteason.springbootdatajpa.dao"})//Respository包扫描

@EnableAutoConfiguration
public class JpaConfiguration {

    @Bean
    PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor() {
        return new PersistenceExceptionTranslationPostProcessor();
    }
}

六、单元测试

  • DataJpaTest
/**
 * @Auther: ARong
 * @Date: 2019/1/10 15:54
 * @Description: 测试Data Jpa
 */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@ContextConfiguration(classes = JpaConfiguration.class)
public class DataJpaTest {

    @Autowired
    private UserRespository userRespository;

    @Test
   public void fun1(){
        //调用User的Jpa接口
        List<User> userList = userRespository.findByName("arong1");
        //流式遍历
        userList.stream().forEach(n-> System.out.println(n.getName()));
    }

    @Test
    public void fun2(){
       userRespository.deleteByName("arong666");
    }

}

七、查询关键字定义

在这里插入图片描述

Java框架_SpringBoot整合Spring Data JPA 111 阅读详情

相关推荐

SpringBoot整合Spring Data JPA

大家好,我是Leo哥🫣🫣🫣,今天给大家带来关于精品SpringBoot专栏,暂且就给他起名为循序渐进学SpringBoot,这里我参考了我上一个专栏:循序渐进学SpringSecurity6。有需要的朋友可以抓紧学习来哈,带你从SpringSecurity从零到实战项目。

分享思想,留下痕迹。 582

springBoot自定义Respository实现(结合docker)

工程结构 需求: 现实现一个自定义模糊查询,对任意实体对象进行查询,值为字符串类型时就模糊查询,其他类型等于查询。1.安装docker安装步骤:略。 本例安装在windows环境下。2.下载oracle-xe镜像命令:docker pull wnameless/oracle-xe-11g下载后进行查看 命令:docker images3.启动oracle-xe镜像docker run -d

椭圆的博客 911

SpringBoot开发——整合Spring Data JPA

SpringBoot开发整合Spring Data JPA

bjzhang75的博客 1550

SpringBoot 九 创建数据仓库层Repository(接口层)

一 1.创建的数据仓库类是一个接口(不是抽象类、也不是普通类),针对这个接口添加注解@Repository。(表明是用于底层数据存取的) 2.三层架构 为了符合“高内聚,低耦合”思想,把各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构,各层之间采用接口相互访问,并通过对象模型的实体类(Model)作为数据传递的载体,不同的对象模型的实体类一般对应于数据库的不同表,实体类的属性与数据库表的字段名一致(上一节即是创建实体类)。 3.数据仓库接口的作用:Repository原意

weixin_38628400的博客 1万+

SpringBoot整合Spring Data JPA:从搭建到实践

Spring Boot作为Spring的延伸,其核心设计目标之一就是简化Spring应用的配置与部署。它提供了一种快速构建项目的方式,让开发者能够在极短的时间内启动并运行一个Spring应用。在Spring Data JPA中,实体类通常通过@Entity注解来标记,表示这是一个JPA实体。@Entity@Id数据库连接池的性能对应用的响应速度有直接影响。可以通过调整连接池的参数来优化性能。在Spring Boot应用中,或中的自定义配置项会覆盖默认配置。

weixin_35757191的博客 653

springBoot整合springData JPA

一个项目包含了常用查询场景,包含单表查询部分字段,联合查询映射自定义对象,动态sql。一个项目零基础到开发,只需要三小时学习。

springboot整合springdata jpa全能书

springboot整合springdatajpa

hotpots--火锅技术栈 917

SpringBoot-SpringData-jpa集成

博文地址:http://blog.youkuaiyun.com/abap_brave/article/details/52804782

SpringBoot整合SpringDataJPA

目录1 SpringBootData JPA介绍2 SpringBoot整合SpringData JPA3 SpringBoot JPA提供的核心接口4 Repository接口的使用5 CrudRepository接口的使用6 PagingAndSortingRepository接口的使用7 JpaRepository接口8 JPASpecificationExecutor接口9 实际开发遇到的问题9.1 org.springframework.data.mapping.PropertyReference

赵广陆 4354

Spring Boot整合SpringDataJPA

该案例使用SpringBoot 整合了SPringData JPA,使用SpringData 开发简化了Dao层的开发量,简化了数据访问,使得持久化更加简单 !

工业级以太网通信实战:用FPGA驱动YT8531 PHY芯片的完整避坑指南

本文是一份针对工业级以太网通信的实战指南,详细讲解了如何使用FPGA驱动YT8531 PHY芯片。内容涵盖从硬件设计(电源、时钟、复位)到MDIO接口驱动开发、PHY配置与链路管理的全流程,并重点剖析了十个常见的开发“陷阱”及其解决方案,旨在帮助工程师在复杂的工业环境中实现稳定可靠的以太网通信连接。

weixin_29191669的博客 147

74、SpringBoot 整合 Spring Data JDBC

SpringBoot 整合 Spring Data JDBC

Java 领域技术分享 1355

【小程序】支付宝直付通解决方案

支付宝直付通是支付宝为小程序提供的一种支付解决方案,可以实现小程序中直接使用支付宝进行支付。以上是一个简单的支付宝直付通解决方案及相关代码示例。具体的使用还需要根据自己的业务需求进行定制化开发和调整。

qq_31532979的贺公子之数据科学与艺术博客,致力于科技向善,拥抱开源,要用技术的影响力来领导团队,而不是威权和职位! 1281

七、 SpringBoot整合Spring Data JPA

顾名思义,方法命名规则查询就是根据方法的名字,就能创建查询。只需要按照Spring Data JPA提供的方法命名规则定义方法的名称,就可以完成查询工作。Spring Data JPA在程序执行的时候会根据方法名称进行解析,并自动生成查询语句进行查询。按照Spring Data JPA 定义的规则,查询方法以findBy开头,涉及条件查询时,条件的属性用条件关键字连接,关键字后面连接的就是实体类的属性名。要注意的是:条件属性首字母需大写。

weixin_51996255的博客 1335

理想汽车智驾方案介绍 4 World model + 强化学习重建自动驾驶交互环境

本帖将以 DrivingSphere 为例来解析这个过程。

地平线开发者 1921

论文必备 - YOLOv11热力图可视化,支持指定模型,指定显示层,设置置信度,以及10种可视化实现方式

本文带来的是YOLOv11热力图可视化功能,支持,以及。我们经常看到一些论文里绘制了不同的热力图,一方面能够直观的感受其模型的有效性,另一方面也丰富了论文内容。特别是在使用了注意力模块的网络中,热力图就可以验证注意力机制是否真正聚焦到了预期的重要特征上,以便对模型的有效性和合理性进行评估。例如这篇文章中展示的,就很能够表达作者改进后的模型相比之前模型的优越性。

Limiiiing的博客 5505

《SpringBoot篇》09.Spring Data JPA简介与SpringBoot整合超详细教学

(1.)说明:经过一星期的培训,这周正式入职了,接触很多新的技术栈,第一个就是Spring Data JPA;spirng data jpa是spring提供的一套简化JPA开发的框架,按照约定好的规则进行【方法命名】去写dao层接口,就可以 在不写接口实现的情况下,实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能,如分页、排序、复杂查 询等等。

陈老老老板的博客 1万+

LeRobot 机器人学习(Robot Learning)入门教程(一)

本文介绍了现代机器人学习领域的发展现状与关键技术。随着机器学习进步和大规模机器人数据的普及,机器人技术正从传统基于模型的方法转向数据驱动的学习范式。HuggingFace开发的开源库lerobot实现了端到端集成,支持多种机器人平台和先进算法(强化学习、行为克隆等)。核心创新包括LeRobotDataset标准化格式,统一处理多模态时间序列数据,并支持高效批处理和流式访问。教程涵盖经典机器人学基础、强化学习原理、模仿学习技术和通用模型开发,结合代码示例展示如何构建适应多样化任务的机器人系统。该资源旨在为研究

2506_90492529的博客 1997

Springboot整合Spring Data JPA

1 Spring Data JPA 1.Spring Data JPA的概念 在介绍Spring Data JPA的时候,我们首先认识下Hibernate。Hibernate是数据访问解决技术的绝对霸主,使用O/R映射(Object-Relational Mapping)技术实现数据访问,O/R映射即将领域模型类和数据库的表进行映射,通过程序操作对象而实现表数据操作的能力,让数据访问操作无须关注数据库相关的技术。 随着Hibernate的盛行,Hibernate主导了EJB 3.0的JPA规范,JPA

zhangxl123liang的博客 4298

【Burp入门第二十二篇】BurpSuite配置Hea插件教程+添加配置项

HaE是一个基于BurpSuite Java插件API开发的辅助型框架式插件,旨在实现对HTTP消息的高亮标记和信息提取。该插件通过自定义正则表达式匹配响应报文或请求报文,并对匹配成功的报文进行标记和提取。

等风来 9635

Qt实现窗口等比例缩放

在Qt中,实现窗口的等比例缩放是一个常见的需求。通过对窗口的尺寸进行调整,使得窗口的内容在缩放过程中保持相同的比例,可以提供更好的用户体验。通过以上的代码,我们实现了一个可以等比例缩放的Qt窗口。在调整窗口大小时,窗口中的标签和按钮将按比例缩放,保持内容的比例不变。首先,我们需要在Qt中创建一个窗口,并设置其内容。在该事件中,我们将根据窗口的新尺寸计算出合适的比例因子,并将其应用到窗口的内容上。现在,我们将添加功能,使得窗口可以等比例缩放。最后,我们将缩放因子应用到窗口中的标签和按钮上,调整它们的尺寸。

2301_79330511的博客 3959

springboot干货——(七)springboot整合Spring Data JPA

前言Spring Data JPA对大家来说相对比较陌生,尤其是在一些传统互联网行业工作的人。一方面现在mybatis整合Spring和SpringMVC如火如荼,遮盖住了Spring Data的锋芒,另一方面不少公司的管理层为了项目稳定不太喜欢用不熟悉的工具,就这样Spring Data变得有些悲剧,不过用过Spring Data的人一定会深深的爱上他的,因为他真的实在是太方便了,尤其是在Spr...

东天里的冬天 5245

基于PPT的三维光路结构示意图绘制实例演示-技术细节

基于PPT的三维光路结构示意图绘制实例演示-技术细节

简单光学 7480

Spring Boot 整合 Spring Data JPA、strategy 的策略区别、什么是 Spring Data JPA

Spring Boot 整合 Spring Data JPA、strategy 的策略区别、什么是 Spring Data JPA

hutao8896的博客 1113

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

SpringBoot专题学习Part22:SpringBoot整合JPA - Spring Data JPA

一、概念 1、什么是Spring Data Spring Data的目的是为了简化构建基于Spring框架应用的数据访问 其包括了非关系数据库 Map-Reduce 框架 云数据服务等等 另外也包含对关系数据库的访问支持 Spring Data的下面有很多子项目: – Spring Data Commons – Spring Data JPA – Spring Data KeyValue – Sp...

"✧treasure mountain✧" 8066

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

​ Spring Data JPA

​ 创建一个普通的Maven项目。

埃泽漫笔 1344

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: Java基础(4)-Java8函数式编程
下一篇: 配置Nginx端口转发时的问题
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值