Spring boot集成mongodb,Java-SSM框架相关面试题整理

org.springframework.boot

spring-boot-starter

org.springframework.boot

spring-boot-starter-data-mongodb

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

test

org.projectlombok

lombok

joda-time

joda-time

2.10.1

org.springframework.boot

spring-boot-starter-test

test

org.junit.vintage

junit-vintage-engine

2.3、添加配置


在application.properties文件添加MongoDB配置

spring.data.mongodb.uri=mongodb://127.0.0.1:27017/test

3、基于MongoTemplate 开发CRUD

=======================================================================================

3.1、MongoTemplate常用方法


mongoTemplate.findAll(User.class): 查询User文档的全部数据

mongoTemplate.findById(, User.class): 查询User文档id为id的数据

mongoTemplate.find(query, User.class);: 根据query内的查询条件查询

mongoTemplate.upsert(query, update, User.class): 修改

mongoTemplate.remove(query, User.class): 删除

mongoTemplate.insert(User): 新增

Query对象

1、创建一个query对象(用来封装所有条件对象),再创建一个criteria对象(用来构建条件)

2、 精准条件:criteria.and(“key”).is(“条件”)

模糊条件:criteria.and(“key”).regex(“条件”)

3、封装条件:query.addCriteria(criteria)

4、大于(创建新的criteria):Criteria gt = Criteria.where(“key”).gt(“条件”)

小于(创建新的criteria):Criteria lt = Criteria.where(“key”).lt(“条件”)

5、Query.addCriteria(new Criteria().andOperator(gt,lt));

6、一个query中只能有一个andOperator()。其参数也可以是Criteria数组。

7、排序 :query.with(new Sort(Sort.Direction.ASC, “age”). and(new Sort(Sort.Direction.DESC, “date”)))

3.2、创建实体类


@Data

@Document(“User”)

public class User {

@Id

private String id;

private String name;

private Integer age;

private String email;

private String createDate;

}

3.3、编写测试类,测试基于MongoTemplate 开发的增删改查


3.3.1、新增数据

在这里插入图片描述

@Autowired

private MongoTemplate mongoTemplate;

//添加操作

@Test

void contextLoads() {

User user = new User();

user.setAge(20);

user.setName(“test”);

user.setEmail(“123@qq.com”);

User user1 = mongoTemplate.insert(user);

System.out.println(user1);

}

控制台输出

在这里插入图片描述

3.3.2、查询集合(表)全部

在这里插入图片描述

//查询所有记录

@Test

public void findAll(){

List all = mongoTemplate.findAll(User.class);

System.out.println(all);

}

在这里插入图片描述

3.3.3、根据id查询

在这里插入图片描述

//根据id查询

@Test

public void findId(){

User user = mongoTemplate.findById(“60b4b3ca861699233d33f3e2”, User.class);

System.out.println(user);

}

在这里插入图片描述

3.3.4、条件查询

在这里插入图片描述

//条件查询

@Test

public void findUserList(){

Query query = new Query(Criteria.where(“name”).is(“test”).and(“age”).is(20));

List users = mongoTemplate.find(query, User.class);

System.out.println(users);

}

在这里插入图片描述

3.3.5、模糊查询

Pattern.compile函数用法

//模糊条件查询

@Test

public void findLikeUserList(){

// name like test

String name = “est”;

String regex = String.format(“%s%s%s”, “^.", name, ".$”);

/*1、在使用Pattern.compile函数时,可以加入控制正则表达式的匹配行为的参数:

Pattern Pattern.compile(String regex, int flag)

2、regex设置匹配规则

3、Pattern.CASE_INSENSITIVE,这个标志能让表达式忽略大小写进行匹配。*/

Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);

//创建一个query对象(用来封装所有条件对象),再创建一个criteria对象(用来构建条件)

Query query = new Query(//构建查询条件

Criteria.where(“name”).regex(pattern));

List users = mongoTemplate.find(query, User.class);

System.out.println(users);

}

查询结果:查询出来了名字里包好est的用户

在这里插入图片描述

3.3.6、分页查询带条件

//分页查询(带条件)

@Test

public void pageLikeUserList(){

int pageNo = 1;//设置当前页

int pageSize = 3;//设置每页显示的记录数

//条件构建

String name = “est”;

String regex = String.format(“%s%s%s”, “^.", name, ".$”);

/*1、在使用Pattern.compile函数时,可以加入控制正则表达式的匹配行为的参数:

Pattern Pattern.compile(String regex, int flag)

2、regex设置匹配规则

3、Pattern.CASE_INSENSITIVE,这个标志能让表达式忽略大小写进行匹配。*/

Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);

//创建一个query对象(用来封装所有条件对象),再创建一个criteria对象(用来构建条件)

Query query = new Query(//构建查询条件

Criteria.where(“name”).regex(pattern));

//分页构建

//查询数来集合(表)中的总记录数

long count = mongoTemplate.count(query, User.class);

List users = mongoTemplate.find(

query.skip((pageNo - 1) * pageSize).limit(pageSize), User.class);

System.out.println(count);

System.out.println(users);

}

在这里插入图片描述

3.3.7、修改操作

在这里插入图片描述

//修改操作

@Test

public void updateUser(){

//根据id查询

User user = mongoTemplate.findById(“60b4f89db925b61fbf529591”, User.class);

//修改值

user.setName(“test_02”);

user.setAge(2);

user.setEmail(“test_02@qq.com”);

//调用方法实现修改

Query query = new Query(Criteria.where(“_id”).is(user.getId()));

Update update = new Update();

update.set(“name”,user.getName());

update.set(“age”,user.getAge());

update.set(“email”,user.getEmail());

//调用mongoTemplate的修改方法实现修改

UpdateResult upsert = mongoTemplate.upsert(query, update, User.class);

long modifiedCount = upsert.getModifiedCount();//获取到修改受影响的行数

System.out.println(“受影响的条数:”+modifiedCount);

}

在这里插入图片描述

3.3.8、删除操作

在这里插入图片描述

//删除条件

@Test

public void deleteUser(){

Query query = new Query(Criteria.where(“_id”).is(“60b4b3ca861699233d33f3e2”));

DeleteResult remove = mongoTemplate.remove(query, User.class);

long deletedCount = remove.getDeletedCount();

System.out.println(“删除的条数:”+deletedCount);

}//删除条件

@Test

public void deleteUser(){

Query query = new Query(Criteria.where(“_id”).is(“60b4b3ca861699233d33f3e2”));

DeleteResult remove = mongoTemplate.remove(query, User.class);

long deletedCount = remove.getDeletedCount();

System.out.println(“删除的条数:”+deletedCount);

}

控制台输出:

在这里插入图片描述

查看mongoDB,已经删除了该条数据

在这里插入图片描述

4、 基于MongoRepository开发CRUD

=========================================================================================

Spring Data提供了对mongodb数据访问的支持,我们只需要继承MongoRepository类,按照Spring Data规范就可以了。

4.1、SpringData 方法定义规范


在这里插入图片描述在这里插入图片描述

1、不是随便声明的,而需要符合一定的规范

2、 查询方法以find | read | get开头

3、 涉及条件查询时,条件的属性用条件关键字连接

4、 要注意的是:条件属性首字母需要大写

5、 支持属性的级联查询,但若当前类有符合条件的属性则优先使用,而不使用级联属性,若需要使用级联属性,则属性之间使用_强制进行连接

4.2、添加Repository接口


在这里插入图片描述

import com.demomongodb.entity.User;

import org.springframework.data.mongodb.repository.MongoRepository;

import org.springframework.stereotype.Repository;

/**

  • @Description :

  • @Author :lenovo

  • @Date :2021/6/1 10:54

*/

@Repository

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

新鲜出炉的蚂蚁金服面经,熬夜整理出来的答案,已有千人收藏

还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。

新鲜出炉的蚂蚁金服面经,熬夜整理出来的答案,已有千人收藏

uda0AW0k-1711956372639)]
[外链图片转存中…(img-yWNzBkCE-1711956372640)]
[外链图片转存中…(img-XLHLMlme-1711956372640)]
[外链图片转存中…(img-E09KdauD-1711956372640)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-tPqNsX1b-1711956372640)]

最后

我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

[外链图片转存中…(img-HiyTf9ii-1711956372641)]

还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。

[外链图片转存中…(img-tuzmtue9-1711956372641)]

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值