初识Spring Data 全家族(1)

系统梳理Spring全家桶 ! Spring框架自诞生以来一直备受开发者青睐,有人亲切的称之为:Spring 全家桶。它包括SpringMVC、SpringBoot、Spring Cloud、Spring Cloud Dataflow等解决方案。 很多研发人员把spring看作心目中最好的java项目,没有之一。 所以这是重点也是难点,工作中必须会,面试时肯定考。 那么,今天花费20分钟,梳理Spring框架相关知识。 Spring系列包含非常多的项目,可以满足java开发中的方方面面。 先来看常用框架的知识点汇总,如图: 阅读详情

每天叫醒你的不是闹钟,而是姿势

1

前言

         在介绍Spring Dara Jpa之前,我们首先认识HIbernate。Hibernate是数据访问解决技术的绝对霸主,使用ORM映射技术实现数据访问,ORM映射将领域模型类和数据库的表进行映射,通过程序操作对象而实现表数据操作的能力,让数据访问操作无需关注数据库相关的技术。

           随着Hibernate的盛行,Hibernate主导了EJB3.0的JPA规范,即Java Persistence API。JPA是一个基于ORM映射的标准规范。所谓规范即只定义标准规则,不提供实现,软件提供商可以按照标准规范来实现,而使用者只需按照规范中定义的方式来使用。Spring Data JPA是Spring Data 的一个子项目,它通过提供基于JPA的Reposistory极大地减少了JPA作为数据访问方案的代码量。

2

Spring Data 家族

   Spring Data 包含的子项目

  • Commons - 提供共享的基础框架,适合各个子项目使用,支持跨数据库持久化

  • Hadoop - 基于 Spring 的 hadoop 作业配置和一个 POJO 编程模型的 MapReduce 作业

  • Key-Value  - 集成了 Redis 和 Riak ,提供多个常用场景下的简单封装

  • Document - 集成文档数据库:CouchDB 和 MongoDB 并提供基本的配置映射和资料库支持

  • Graph - 集成 Neo4j 提供强大的基于 POJO 的编程模型

  • Graph Roo AddOn - Roo support for Neo4j

  • JDBC Extensions - 支持 Oracle RAD、高级队列和高级数据类型

  • JPA - 简化创建 JPA 数据访问层和跨存储的持久层功能

  • Mapping - 基于 Grails 的提供对象映射框架,支持不同的数据库

  • Examples - 示例程序、文档和图数据库

  • Guidance - 高级文档

Spring Data Commons

         Spring Data Commons 是上述各种Spring Data项目的依赖,它是Spring Data Repository的抽象。我们翻开源码看一下Spring Data Repository抽象的根接口

Repository接口:

package org.springframework.data.repository;

import java.io.Serializable;

public interface Repository<T, ID extends Serializable> {
}

源码中看出,它接受领域类和领域类的id类型作为类型参数。

我们查看子接口CrudReposotory(IDEA快捷键ctrl + alt + B)

package org.springframework.data.repository;

import java.io.Serializable;

@NoRepositoryBean
public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> {
   <S extends T> S save(S var1);

   <S extends T> Iterable<S> save(Iterable<S> var1);

   T findOne(ID var1);

   boolean exists(ID var1);

   Iterable<T> findAll();

   Iterable<T> findAll(Iterable<ID> var1);

   long count();

   void delete(ID var1);

   void delete(T var1);

   void delete(Iterable<? extends T> var1);

   void deleteAll();
}

从源码看到该接口定义了CRUD操作相关的内容

继续查看子接口PagingAndSortingRepository

package org.springframework.data.repository;

import java.io.Serializable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID extends Serializable> extends CrudRepository<T, ID> {
   Iterable<T> findAll(Sort var1);

   Page<T> findAll(Pageable var1);
}

该接口定义了分页与排序操作相关的内容

当然,Spring Data 项目还给我们定义了一个功能,根据属性名进行计数、删除、查询等方法(这里不做详解)

3

Spring Data JPA

使用Spring Data JPA建立数据访问层十分简单,只需定义一个继承JpaRepository的接口即可。

package com.zero.spring_data_jpa.dao;

import com.zero.spring_data_jpa.entity.Person;
import org.springframework.data.jpa.repository.JpaRepository;

/**
* @Author: Zero
* @Date: 2019/4/9 23:32
*/
public interface PersonRepository extends JpaRepository<Person, Long> {
   
}

继承JpaRepository接口之后,翻开源码,我们看到我们的接口已经默认有了下面的数据访问操作方法:

package org.springframework.data.jpa.repository;

import java.io.Serializable;
import java.util.List;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.PagingAndSortingRepository;

@NoRepositoryBean
public interface JpaRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID> {
   List<T> findAll();

   List<T> findAll(Sort var1);

   List<T> findAll(Iterable<ID> var1);

   <S extends T> List<S> save(Iterable<S> var1);

   void flush();

   <S extends T> S saveAndFlush(S var1);

   void deleteInBatch(Iterable<T> var1);

   void deleteAllInBatch();

   T getOne(ID var1);
}

那么我们可以在service的实现层直接调用该接口的方法进行简单的CRUD操作。

历史文章

史上最全 | 1000G编程资料限时免费领取,打包带走

文末资源|程序员,你必须要懂的JVM结构

点击蓝字关注我们

Spring全家桶简介 Spring全家桶系列通过提供一系列相互关联、功能丰富的项目和模块,为开发人员构建企业级Java应用程序提供了全面的支持。无论是Web应用开发、数据访问层开发还是微服务架构的构建,Spring全家桶都能够提供相应的解决方案和工具,帮助开发人员提高开发效率、降低开发成本并提升应用性能。后续会持续更新分享相关内容,记得关注哦! 阅读详情

相关推荐

java 学习- spring 全家桶学习与使用教程

Spring 全家桶是一套广泛使用的Java企业级开发框架,集成了多个子项目和组件,旨在简化企业级应用的开发、部署和管理。Spring 全家桶不仅仅是一个框架,更是一个庞大的技术家族,包括Spring Framework、Spring Boot、Spring Cloud等多个子项目。这些子项目共同构成了Spring生态系统,提供了从底层框架到上层应用的全方位支持。Spring Boot是Spring框架的一个扩展,它简化了基于Spring的应用开发、配置和部署。

cesske的博客 1933

Spring Data JPA实现数据的增删改查操作

1、JPA(Java持久层API) 1.1认识Spring Data Spring Data 是Spring的一个子项目,旨在统一和简化各类型数据的持久化存储方式,而不拘泥于是关系型数据库还是NoSQL数据库。无论是哪种持久化存储方式,数据访问对象(Data Access Objects,DAO)都会提供对对象的增加、删除、修改和查询的方法,以及排序和分页方法等。 Spring Data 提...

pan_junbiao的博客 2万+

spring全家桶使用教程

Spring全家桶包含了多个用于企业级Java开发的框架和工具。还可以配置Hystrix的相关参数,如熔断器的阈值、线程池大小等。以Hystrix为例,在服务调用方项目中添加。在需要进行容错处理的方法上添加。

alankuo的专栏 966

jpa-基础到动态查询

一.七个Repository接口: Repository (org.springframework.data.repository) 这是一个标识接口 CrudRepository (org.springframework.data.repository) <S extends T> S save(S var1); <S extends T> Iterable<S> saveAll(Iterable<S> var1); Optional&

helpapa的博客 721

Spring 全家桶8大知识点详解(内含Spring相关知识图谱)

Spring框架自2002年诞生以来一直备受开发者青睐,它包括SpringMVC、SpringBoot、Spring Cloud、Spring Cloud Dataflow等解决方案。有人亲切的称之为:Spring 全家桶。 很多研发人员把spring看作心目中最好的java项目,没有之一。所以这是重点也是难点,工作中必须会,面试时肯定考。 那么,不妨花费10分钟,梳理Spring框架相关知识。 ...

Alex_lagou的博客 1760

Spring 全家桶使用教程

在当今快节奏的软件开发领域,构建高效、可靠的Java应用程序是每个开发者的追求。为了满足这一需求,Spring Framework推出了一系列衍生产品,统称为Spring全家桶。这包括了Spring Boot、Spring Cloud、Spring Data、Spring Security等工具,它们为开发者提供了丰富的功能和工具,帮助他们更高效地构建Java应用程序。本文将深入探讨这些工具的特点、用途和使用方法,帮助读者更好地理解和运用Spring全家桶,提升Java应用程序的开发效率和质量。

不迁怒,不贰过。小知识,大智慧。 4641

05 Spring Data JPA基础查询方法

Spring Data JPA基础查询方法 Spring Data Common的Repository Repository位于Spring Data Common的org/springframework/data/repository中,它是Spring Data里做数据库操作的最底层的抽象接口、最顶层的父类。 Repository源码: package org.springframework...

仙贝儿 434

ROS四旋翼无人机快速上手指南(3):工作环境文件框架与各功能包整体讲解

这一章节主要讲解无人机平台的控制文件架构和各个功能包组成和用法。

The Road of Engineer 2402

Spring Boot的数据访问

Spring Data 项目是 Spring用来解决数据访问问题的一揽子解决方案, Spring Data是一个伞形项目, 包含了大量关系型数据库及非关系型数据库的数据访问解决方案。 Spring Data使我们可以快速且简单地使用普通的数据访问技术及新的数据访问技术。 Spring Data为我们使用统一的 API来对上述的数据存储技术进行数据访问操作提供了支持。这是 Spring通过提供 S...

持之以恒! 554

python刷B站播放量

首先,我们要知道B站播放量计算方法:不同的IP只能算一次,如果点一下就关掉,会出现播放完成度很低的情况,反而不利。 所以我们要做的是:不停换IP地址打开视频播放页,最好能看完视频。 下面是实现方法: 获取某一个网页上的所有代理IP,返回一个IP列表: def get_ip_list(url, headers): web_data = requests.get(url, headers=headers) soup = BeautifulSoup(web_data.text, 'lxml

HGGshiwo的博客 1万+

STM32独立实现CANOpen主机功能:从零构建轻量级控制方案

本文详细介绍了如何在STM32上不依赖CanFestival库,从零构建一个轻量级的CANOpen主机方案。文章深入剖析了CANOpen主机的三大核心功能——NMT网络管理、SDO参数配置与PDO过程数据交换,并提供了从硬件准备、驱动层构建到协议实现的完整代码实战。该方案代码精简,资源占用低,特别适合在资源受限的STM32平台上实现工业控制、电机驱动等场景的稳定通信。

potato的博客 1072

Spring Data JPA渐进式学习--Repostory

这就是Repostory的源码,里边没有任何方法。但是只要继承了这个类,就可以实现JPA的一些默认实现方法。

老男孩的架构路 456

最小二乘拟合圆:使用拉格朗日乘子法

在本文中,我们将探讨如何使用拉格朗日乘子法来进行最小二乘拟合,并将其应用于拟合一个空间圆。首先,我们需要定义问题。给定一组二维或三维数据点,我们的目标是找到一个圆,使得这些数据点到圆的距离的平方和最小。为了找到最小值,我们需要计算拉格朗日函数的偏导数,并令其等于零。通过解决优化问题,我们可以找到最佳拟合的圆,以最小化数据点到圆的距离的平方和。其中,(x, y) 是圆心的坐标,r 是圆的半径,(xi, yi) 是数据点的坐标。其中,g(x, y, r) = 0 是约束条件,C 是常数,λ 是拉格朗日乘子。

TechProX的博客 473

Spring全家桶第一篇--认识全家桶

Spring全家桶第一篇--认识全家桶前言什么是SPRING全家桶 前言 打算更新一下这两年来接触到的SPRING WEB方面的知识,此篇开搞。不定时更新 什么是SPRING全家桶 官网:https://spring.io 很直接明确的列出来了,这里直接引用 Spring Framework 5,Spring Framework 就是我们通常所说的 Spring 框架,Spring 优势在于为...

渣男的博客 1771

ZYNQ 网络通信的四种实现方案

一,ZYNQ MIO以RGMII 接口连接外部PHY芯片实现LWIP网络通信。 二,ZYNQ PS 的 ENET0/ENET1 通过 EMIO 的方式扩展至 PL,在 PL 中通过 RGMII 接口连接扩展子卡实现 LWIP 网络通信。 在PL中搭建了1个AXI 1G/2.5G Ethernet Subsystem以及1个AXI Direct Memory Access IP 核。这两个 IP核均通过AXI 总线经S_AXI_HP0 口与PS 连接,PS 通过AXI 总线对其进行配置和控..

wangjie36的博客 1万+

Transformer实战(38)——视觉Transformer (Vision Transformer, ViT)

Transformer 在自然语言处理 (NLP) 领域取得了显著成就,在许多不同的任务中都表现出色。在本节中,我们将探索视觉 Transformer (Vision Transformer, ViT) 模型。正如 NLP 领域创建了多种模型一样,视觉领域也开发了多种模型,每种模型都为计算机视觉提供了新的视角。通过本节,将学习如何使用 ViT 等模型进行计算机视觉任务,了解基于 Transformer 的预训练计算机视觉模型的工作原理,以及如何针对特定任务进行微调。

盼小辉丶的博客 2825

Java入门必备-Spring全家桶

Spring 全家桶是围绕 Spring Framework 构建的一系列开发工具的集合,用于简化企业级 Java 应用开发。

qq_47291992的博客 2956

windows下使用Nginx搭建Rtmp流媒体服务器,实现视频直播功能

一、环境介绍 操作系统:win10 64位系统 Linux下搭建Nginx搭建Rtmp流媒体服务器方法请看这里:https://blog.youkuaiyun.com/xiaolong1126626497/article/details/105378894 二、流媒体服务器介绍 流媒体服务器的主要功能是以流式协议(RTP/RTSP、MMS、RTMP等)将视频文件传输到客户端,供用户在线观看;也可从视频采集、压缩软件接收实时视频流,再以流式协议直播给客户端。 nginx服务器是开源的高性能的http服务器,反向

1万+

从 Spring 到 Spring 全家桶,Java 开发行业的标准

从 Spring 到 Spring boot 、Spring Cloud 再到 Spring 全家桶,Spring 框架已成为 Java 开发行业的标准。笔者 多年 Java 面试经验,Spring 和 Spring boot 面试题偏向面试重点,现在面试时,会尽量把 Spring 全家桶所有知识囊括进来。

技术杂谈 4425

Midscene.js(1):Chrome 插件实战之基于 AI 驱动 WEB UI 自动化测试「喂饭教程」

Midscene.js 是一款开源的AI驱动UI自动化工具,支持自然语言交互、数据提取、断言验证等多种功能。自然语言交互。本文将以 Midscene.js Chrome 插件为例,带你从零上手,体验如何用最简单的方式实现高效、智能的UI自动化测试。

blues_C的博客 4404

深度学习工具包 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")

spring全家桶介绍

spring全家桶介绍spring frameworkspring bootspring dataspring cloudspring security总结 准备学习spring全家桶知识,今天先来做个战前动员,希望我们的学习如竹子一般节节高,活到老,学到老;走到哪,学到哪。 spring framework spring框架,包括IOC依赖注入,Context上下文,Bean管理,springMVC等等 spring boot 个人认为目前用的最多,简化spring应用和服务的创建、开发和部署,配置

weixin_43939663的博客 839

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

10分钟详解Spring全家桶7大知识点

Spring框架自诞生以来一直备受开发者青睐,有人亲切的称之为:Spring 全家桶。它包括SpringMVC、SpringBoot、Spring Cloud、Spring Cloud Dataflow等解决方案。 很多研发人员把spring看作心目中最好的java项目,没有之一。 所以这是重点也是难点,工作中必须会,面试时肯定考。 那么,今天花费10分钟,梳理Spring框架相关知识。 Spring知识点-汇总 spring系列包含非常多的项目,可以满足java开发中的方方面面。 先来看常

Moonxiyue的博客 1311

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: 从小白到职场JAVA学习线路(附带整套学习资源)
下一篇: 你的Java功底很深?Integer源码解读让你怀疑人生
新时代Java农民工
博客等级 码龄7年 16粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值