初级 - 若依框架 - Java Spring/Spring Boot 项目理解记录

1、@Autowired 自动装配的理解

一般情况下,我们创建对象都是 类名 + 类引用名 = new 类名()

但是如果是不想要 等于号后面的对象实例化操作,那么可以使用 @Autowired 注解,当然这是在使用 Spring 时,才能这样,不然一般情况下,也没法用这个注解。用了这个 @Autowired 注解,会让 Spring 自动帮你托管这个对象实例,从而实现一种为某个类新增成员变量的想法。

  1. bean管理是指(1)spring创建对象 (2)spring注入属性。当我们在将一个类上标注@Service或者@Controller@Component@Repository注解之后,spring的组件扫描就会自动发现它,并且会将其初始化为spring应用上下文中的bean。 当需要使用这个bean的时候,例如加上@Autowired注解的时候,这个bean就会被创建。而且初始化是根据无参构造函数。
  2. 我们开启Spring服务的时候,它会根据声明先扫描配置文件中的bean(注解配置同理), 再根据bean中类的全限定名去寻找它,一般为我们自己声明的pojo(实体类), 然后这时如果有@Autowired注解则会根据类型寻找其它的被Spring托管的bean进行自动注入, 调用默认的构造函数。(这句话的意思是用查找对应的类,然后将这个类作为组件,实例化该类对象,即返回值类型如果是类,那么就会去查找这个类,将这个类作为组件,实例化该类,将其作为当前类的成员变量,这里是一个类作为某个类的成员变量,比如只定义了类的引用,但是实例化对象并没有创建,那么就会由 Spring 帮你创建实例化对象并帮你托管该实例化对象。
  1. 类不用new实例化,通过@Autowired 方式,将这个类引入实例化即可,交由 Spring 管理。
  2. 不能使用static的属性

参考链接

1. Spring @AutoWired注解用法解释(超级易懂)

2. @Autowired注解详解——超详细易懂

3. ★spring@Autowired注解原理,通俗易懂(笔记)

4. Java常用 @注解

2、Java 泛型的理解

泛型 —— 可以存储广泛的类型的类型 (集合,数组)

1、泛型传参类型检查:

传参时,如果类参数内存在泛型参数,那么会为你设置自动检查参数类型,即当给类对象传递参数时,该参数是否符合该类此前设置的泛型参数类型,不符合则编译时会报错。

2.、泛型返回值类型检查:

赋值给对象引用时,强制检查对象引用是否符合对象实例化后返回的数据类型;

Object 类型是一个挺好用的类型,会自己分配类型。

常用数组方法:当然最好是指定泛型,没办法时才用 Object 类型

List<Object> = new Array<Object>()

常用集合方法:

Map<String, Object> = new HashMap<>();

3、Java 与 MongoDB

3.1 MongoDB 的数据初始化

1、为SpringBoot项目创建实体类(即序列化字段),但真实且正确的理解,你应该理解为序列化字段 Fields
我们通过创建一个实体类来序列化数据,从而传回给前端所需的数据,数据格式为 Json 格式

MongoDB 有点特别,这里是用文档来作为一个数据项,文档的数据存储格式是以对象类型,类似字典形式 {键: 值} 格式存储的,不用定义类似关系型数据库那样需要在创建表的时候,要定义好字段的类型(如 某字段名 VARCHAR(30) NOT NULL ),MongoDB 只需要注意调用键时,键的类型必须永远是字符串类型,值可以是任意类型的(字典、数组、数字、字符串、二进制(即字节码类型,可以存储视频或图片),各种前面提到的数据类型的嵌套等等)

2、集合(MongoDB的表) ——> 文档(MongoDB的行数据,即数据项(@Document))—— 对象数据 / 属性 (对象(字典)类型)
这里的对象类型数据,其实就是类似关系型数据库,以MySQL 数据库为例,表内的一行一行数据,只不过现在不用去固定数据项内字段的数据格式了(比如什么字符串 VARCHAR、Double、datetime 等等数据类型),但是我们一定要清楚的是,文档存储了一个对象的数据,该数据项一定会有个类似关系型数据库表那样的唯一标识 id 字段的,所以我们通过这个可以定位到某一份文档数据,当然这只是 MongoDB 其中的一种查询方法(精确查询 Where().is() )。

以测试表 Test 为例,表内定义了字段,testid 和 testcontent,那么查询时会返回如下类型的数据:

Test(testid=9567,testcontent='这是测试数据项'

这里省略了一步,那就是 for 循环输出 MongoDB的查询对象数组

Criteria criteria = Criteria.where("testid").is(9567)
Query query = Query.query(criteria);
List<Test> list = mongoTemplate.find(query, Test.class,"Test");
for (Test test : list){System.out.println("测试:" + test)
}

3、类注释
@Document(MongoDB的表名) 定义当前类为MongoDB内某个集合的文档,即一张表,比如
@Document(test) 那么就是指定当前的实体类文档属于一个叫 test 的集合

@Field(字段别名转换) 如果在类内字段,添加该注释,那么会为这个字段添加一个别名,然后在其他位置调用这个字段时,可以使用这个别名去查询当前对象内的原始键({键: 值}),而且该别名真实对应数据库的字段名,笔者也不清楚,为什么需要这样,笔者遇到过 No property xxx found for type 类名 的问题报错,需要额外转换该字段,否则会报该错误,笔者猜测应该是与 Mongo 数据库内部的 _id 字段冲突了,注意这里使用的数据库是 Mongo数据库

传送门:Java 与 MongoTemplate 报错 - No property xxx found for type 某个实体类名

4、文档的唯一标识 _id

MongoDB中存储的文档必须有一个"_id"键。这个键的值可以是任何类型的,默认是个ObjectId对象。
在一个集合里面,每个文档都有唯一的"_id"值,来确保集合里面每个文档都能被唯一标识。
MongoDB采用ObjectId,而不是其他比较常规的做法(比如自动增加的主键)的主要原因,因为在多个服务器上同步自动增加主键值既费力还费时。

3.2 Java 调用 MongoDB

Criteria 是一个条件查询的设置步骤

query 是一个 sql 语句条件拼接步骤,比如可以拼接排序的 sql 条件语句或分页查询的条件语句。

1、精准查询 —— 关键字 where(键).is(查询键) 相当于关系型数据库的 WHERE key=‘’

只不过我们通过的是查询每一份文档内,存在的该键值的所有文档,所以返回的是一个数组类型的数据,当然也可以通过查询唯一标识对其进行更加精准的查询,直接定位一份文档数据,而不是返回若干份文档数据。

Criteria criteria = Criteria.where("name").is("zs")
Query query = Query.query(criteria);
mongoTemplate.find(query,User.class);
mongoTemplate.find(query,User.class,"mongodb_user");

2、模糊查询:—— 关键字 regex

利用了 MongoDB 内部的正则匹配机制(MongoDB 它有提供内部的正则表达式功能)所以对应的 Java 接口就是 regex 方法接口了,通过这个方法可以让我们调用 MongoDB 内部的正则表达式功能对指定集合内的文档进行模糊查询,即正则表达式匹配。

// 创建控制器类,继承基类 —— 基础控制器类(有一些必要的序列化字段和数据返回方法可以继承)
public class ConditionController extends BaseController {@Autowiredprivate MongoTemplate mongoTemplate; // 加载 MongoDB 的访问接口对象,即实例化该对象@GetMapping("/datalist")public TableDataInfo List(Condition conditions) {Query query = new Query(); // 拼接 sql 语句if (conditions != null && conditions.size() > 0) { for (Condition condition : conditions) { // for 循环多次拼接 sql 条件语句query.addCriteria(Criteria.where(condition.getKey()).regex(".*" +condition.getValue().toString()+ ".*")); } }List<Condition> list = mongoTemplate.find(query, Condition.class, "condition");long count = this.mongoTemplate.count(query, Condition.class, "condition"); return getDataTable(list, count);
}

关键句在于 Criteria.where(condition.getKey()).regex(".*" +condition.getValue().toString()+ ".*"));

condition.getKey() 获取关键词(实体类 Condition 内部定义成员变量 —— 关键字 key)

Criteria.where(键名).regex(".*"+condition.getValue().toString()+".*")

正则匹配所有类似 condition.getValue().toString() 的文档,并返回文档数据

参考链接

1. 如何在Java中使用MongoDb

2. spring data mongodb 操作

3. MongoTemplate的基本使用方法

4. MongoTemplate增删改查(聚合查询)使用

5. Java操作mongodb的模糊查询和精确查询(转)

6. MongoDB 教程

7. Spring整合MongoDB实现多个or的范围查询

8. springboot 整合mongoTemplate的 Query Criteria 用法

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

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

相关文章

Profibus DP主站转Modbus TCP网关profibus从站地址范围

远创智控YC-DPM-TCP网关。这款产品在Profibus总线侧实现了主站功能&#xff0c;在以太网侧实现了ModbusTcp服务器功能&#xff0c;为我们的工业自动化网络带来了全新的可能。 远创智控YC-DPM-TCP网关是如何实现这些功能的呢&#xff1f;首先&#xff0c;让我们来看看它的Profib…

【新版系统架构】第十七章-通信系统架构设计理论与实践

软考-系统架构设计师知识点提炼-系统架构设计师教程&#xff08;第2版&#xff09; 第一章-绪论第二章-计算机系统基础知识&#xff08;一&#xff09;第二章-计算机系统基础知识&#xff08;二&#xff09;第三章-信息系统基础知识第四章-信息安全技术基础知识第五章-软件工程…

Redis---缓存双写一致性

目录 一、什么是缓存双写一致性呢&#xff1f; 1.1 双检加锁机制 二、数据库和缓存一致性的更新策略 2.1、先更新数据库&#xff0c;后更新缓存 2.2 、先更新缓存&#xff0c;后更新数据库 2.3、先删除缓存&#xff0c;在更新数据库 延时双删的策略&#xff1a; 2.4.先更新数…

Matplotlib---3D图

1. 3D图 # 3D引擎 from mpl_toolkits.mplot3d.axes3d import Axes3D fig plt.figure(figsize(8, 5)) x np.linspace(0, 100, 400) y np.sin(x) z np.cos(x)# 三维折线图 axes Axes3D(fig, auto_add_to_figureFalse) fig.add_axes(axes) axes.plot(x,y,z) plt.savefi…

Runner 介绍

Runner 介绍 概述 Runner是用来批量调用collection里某个文件夹里的全部接口的。 (注意&#xff0c;我说的是文件夹内所有接口,可以是一级文件夹&#xff0c;也可是二级文件夹) 示意图 打开runner&#xff0c;如图所示 说明 历史记录 历史执行记录 2.导入 导入别人或之…

h5页面如何与原生交互

本文讲述h5页面跟原生通信&#xff0c;比如在app内&#xff0c;调用相机&#xff0c;获取相册内的图片&#xff0c;在app内拉起微信小程序等等&#xff0c;h5页面没有这么多权限能够直接调用移动端的原生能力&#xff0c;这个时候就需要与原生进行通讯&#xff0c;传递一个信号…

Go实现在线词典翻译(三种翻译接口,结合sync)

火山翻译 首先介绍用火山翻译英译汉。 package mainimport ("bufio""bytes""encoding/json""fmt""io""log""net/http""os""strings""unicode" )type DictRequestHS st…

Python在Excel中,如何按行求平均值

首先&#xff0c;我们需要使用Python中的第三方库openpyxl来读取和写入Excel文件。如果您还没有安装该库&#xff0c;可以通过运行命令pip install openpyxl来进行安装。 接下来&#xff0c;我们需要打开Excel文件&#xff0c;并选择要进行操作的工作表。请确保您已将Excel文件…

单片机第一季:零基础6——按键

目录 1&#xff0c;独立按键 2&#xff0c;矩阵按键 &#xff08;注意&#xff1a;文章中的代码仅供参考学习&#xff0c;实际使用时要根据需要修改&#xff09; 1&#xff0c;独立按键 按键管脚两端距离长的表示默认是导通状态&#xff0c;距离短的默认是断开状态&#xf…

Rust学习-生命周期

Rust 最与众不同的功能 之前学习中&#xff0c;有多种可能类型时必须注明类型&#xff1b;同理&#xff0c;引用的生命周期以一些不同方式相关联时&#xff0c;需要使用泛型生命周期参数来注明关系&#xff0c;这样就能确保运行时实际使用的引用有效 避免悬垂引用 {// 声明了…

Web APIs

文章目录 1.Web APIs 和 JS 基础关联性1.1 JS 的组成 2. API 和 Web API2.1 API2.2 Web API 1.Web APIs 和 JS 基础关联性 1.1 JS 的组成 2. API 和 Web API 2.1 API **API&#xff08;Application Programming Interface,应用程序编程接口&#xff09;**是一些预先定义的函…

观察者模式(下):如何实现一个异步非阻塞的EventBus框架?

上一节课中&#xff0c;我们学习了观察者模式的原理、实现、应用场景&#xff0c;重点介绍了不同应用场景下&#xff0c;几种不同的实现方式&#xff0c;包括&#xff1a;同步阻塞、异步非阻塞、进程内、进程间的实现方式。 同步阻塞是最经典的实现方式&#xff0c;主要是为了…

SSH框架简介篇

文章目录 概述目录结构 strutsSpringHibernate总结 概述 SSH框架&#xff08;Struts Spring Hibernate&#xff09;是一种广泛应用的Java企业级开发框架组合&#xff0c;它将Struts、Spring和Hibernate三个优秀的框架有机地结合在一起&#xff0c;提供了一套完整的解决方案&…

Linux系统编程:文件系统和inode

目录 一. 磁盘的结构和读写数据的方式 1.1 磁盘级文件和内存级文件 1.2 磁盘的物理结构 1.3 访问磁盘数据的方式 二. 磁盘文件系统 2.1 磁盘的分区管理方法 2.2 文件名和inode的关系 三. 结合文件系统对文件创建和删除的相关问题的理解 3.1 文件创建时操作系统进行的工…

Mysql8.0的bin log日志

文章目录 一、 Mysql8.0 的bin log 日志关闭1.1、查看是否已开启 bin log 日志1.2、关闭 bin log 日志1.3、 设置 bin log 日志的时长1.3.1、第一种设置方式&#xff1a;1.3.2、第二种设置方式 一、 Mysql8.0 的bin log 日志关闭 Mysql8.0默认开启 binlog 记录功能&#xff0c…

如何配置Git工具

①安装Git&#xff1a;首先确保你已经在计算机上安装了Git。你可以从Git官方网站&#xff08;https://git-scm.com/&#xff09;下载适合你操作系统的安装程序&#xff0c;并按照提示进行安装。 ② 配置用户信息&#xff1a;在命令行终端中&#xff0c;使用下面的命令来配置你…

51单片机--DS1302时钟

文章目录 DS1302引脚定义和应用电路内部结构框图寄存器的定义时序定义BCD码DS1302时钟代码 DS1302 DS1302是美国DALLAS公司推出的一款实时时钟电路芯片。它具有高性能和低功耗的特点&#xff0c;可以通过SPI三线接口与CPU进行同步通信。DS1302能够提供秒、分、时、日、星期、月…

【SQL应知应会】表分区(一)• MySQL版

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 分区表 • MySQL版 一、分区表1.非分区表2.分区表2…

Autograd:自动求导

Autograd&#xff1a;自动求导 PyTorch中&#xff0c;所有神经网络的核心是 autograd 包。先简单介绍一下这个包&#xff0c;然后训练我们的第一个的神经网络。 autograd 包为张量上的所有操作提供了自动求导机制。它是一个在运行时定义(define-by-run&#xff09;的框架&…

利用集合框架实现-超市会员管理系统

借助集合框架来实现超市会员管理系统&#xff0c;实现以下功能&#xff1a; 1.开卡 2.积分累计 3.查询剩余积分 4.积分兑换 5.修改密码 6.退出 -------------------------------------------------------------------------------------------------- 展示&#x…