使用MongoDB+Jpa操作数据库

SpringData还提供了对多种NoSQL数据库的支持,包括MongoDB;neo4j和redis.他不仅支持自动化的repository,还支持基于模板的数据访问和映射注解.下面是一个Spring通过Jpa操作MongoDB数据库的小Demo:

数据的结构如图所示:

相关代码如下:

StuController:

  1. import com.demo.jpamongodb.dao.StudentRepository;
  2. import com.demo.jpamongodb.entity.Student;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RestController;
  6. import java.util.Optional;
  7. @RestController
  8. public class StuController {
  9. @Autowired
  10. private StudentRepository studentRepository;
  11. @RequestMapping("/getStuByName/{name}")
  12. public Optional<Student> getSchool1() {
  13. Optional<Student> stu = studentRepository.findById(1L);
  14. return stu;
  15. }
  16. }

SchoolReponsitory

  1. package com.demo.jpamongodb.dao;
  2. import com.demo.jpamongodb.entity.School;
  3. import org.springframework.data.mongodb.repository.MongoRepository;
  4. public interface SchoolReponsitory extends MongoRepository<School,Long> {
  5. School findSchoolByName(String name);
  6. }

StudentRepository

  1. import com.demo.jpamongodb.entity.Student;
  2. import org.springframework.data.mongodb.repository.MongoRepository;
  3. public interface StudentRepository extends MongoRepository<Student, Long> {
  4. Student findByName(String name);
  5. }

School

  1. package com.demo.jpamongodb.entity;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Builder;
  4. import lombok.Data;
  5. import lombok.ToString;
  6. import org.springframework.data.annotation.Id;
  7. import org.springframework.data.mongodb.core.mapping.Document;
  8. import java.net.Proxy;
  9. @Document
  10. public class School {
  11. @Id
  12. private Long id;
  13. private String name;
  14. private String address;
  15. public School() {
  16. }
  17. public School(Long id, String name, String address) {
  18. this.id = id;
  19. this.name = name;
  20. this.address = address;
  21. }
  22. public Long getId() {
  23. return id;
  24. }
  25. public void setId(Long id) {
  26. this.id = id;
  27. }
  28. public String getName() {
  29. return name;
  30. }
  31. public void setName(String name) {
  32. this.name = name;
  33. }
  34. public String getAddress() {
  35. return address;
  36. }
  37. public void setAddress(String address) {
  38. this.address = address;
  39. }
  40. @Override
  41. public String toString() {
  42. return "School{" +
  43. "id=" + id +
  44. ", name='" + name + '\'' +
  45. ", address='" + address + '\'' +
  46. '}';
  47. }
  48. }

Student

  1. package com.demo.jpamongodb.entity;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.ToString;
  5. import org.springframework.data.annotation.Id;
  6. import org.springframework.data.mongodb.core.mapping.Document;
  7. //@AllArgsConstructor
  8. //@Data
  9. //@ToString
  10. @Document
  11. public class Student {
  12. @Id
  13. private Long id;
  14. private String name;
  15. private Integer age;
  16. private School shool;
  17. public Student() {
  18. }
  19. public Student(Long id, String name, Integer age, School shool) {
  20. this.id = id;
  21. this.name = name;
  22. this.age = age;
  23. this.shool = shool;
  24. }
  25. public Long getId() {
  26. return id;
  27. }
  28. public void setId(Long id) {
  29. this.id = id;
  30. }
  31. public String getName() {
  32. return name;
  33. }
  34. public void setName(String name) {
  35. this.name = name;
  36. }
  37. public Integer getAge() {
  38. return age;
  39. }
  40. public void setAge(Integer age) {
  41. this.age = age;
  42. }
  43. public School getShool() {
  44. return shool;
  45. }
  46. public void setShool(School shool) {
  47. this.shool = shool;
  48. }
  49. @Override
  50. public String toString() {
  51. return "Student{" +
  52. "id=" + id +
  53. ", name='" + name + '\'' +
  54. ", age=" + age +
  55. ", shool=" + shool +
  56. '}';
  57. }
  58. }

application.properties

  1. spring.data.mongodb.host=127.0.0.1
  2. spring.data.mongodb.port=27017
  3. spring.data.mongodb.database=test
  4. spring.data.mongodb.username=test
  5. spring.data.mongodb.password=123456
  6. server.port=8787

JpaMongodbApplicationTests

  1. package com.demo.jpamongodb;
  2. import com.demo.jpamongodb.dao.SchoolReponsitory;
  3. import com.demo.jpamongodb.dao.StudentRepository;
  4. import com.demo.jpamongodb.entity.School;
  5. import com.demo.jpamongodb.entity.Student;
  6. import org.junit.Test;
  7. import org.junit.runner.RunWith;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.boot.test.context.SpringBootTest;
  10. import org.springframework.test.context.junit4.SpringRunner;
  11. import java.util.List;
  12. @RunWith(SpringRunner.class)
  13. @SpringBootTest
  14. public class JpaMongodbApplicationTests {
  15. @Autowired
  16. private StudentRepository studentRepository;
  17. @Autowired
  18. private SchoolReponsitory schoolReponsitory;
  19. @Test
  20. public void contextLoads() {
  21. }
  22. /**
  23. * 第一次单元测试
  24. * - student实体没有加home属性
  25. *
  26. * @throws Exception
  27. */
  28. @Test
  29. public void insertStudentWithoutHome() throws Exception {
  30. School school1 = schoolReponsitory.findSchoolByName("南京路中学");
  31. School school2 = schoolReponsitory.findSchoolByName("北京路中学");
  32. System.out.println(school1);
  33. System.out.println(school2);
  34. // schoolReponsitory.save(new School(1L,"南京路中学","南京路"));
  35. studentRepository.save(new Student(1L, "小明", 30,school1));
  36. // studentRepository.save(new Student(2L, "小红", 40,school1));
  37. // studentRepository.save(new Student(3L, "小王", 50,school2));
  38. }
  39. /**
  40. * 第二次单元测试
  41. * - student实体加home属性
  42. *
  43. * @throws Exception
  44. */
  45. @Test
  46. public void insertStudentWitHome() throws Exception {
  47. School school1 = schoolReponsitory.findSchoolByName("南京路中学");
  48. School school2 = schoolReponsitory.findSchoolByName("北京路中学");
  49. // studentRepository.save(new Student(4L, "tom", 30,school1,"1小区"));
  50. // studentRepository.save(new Student(5L, "peter", 40,school1,"2小区"));
  51. // studentRepository.save(new Student(6L, "joy", 50,school2,"3小区"));
  52. }
  53. /**
  54. * 对查询结果打印
  55. */
  56. @Test
  57. public void findAll() {
  58. List<Student> students = studentRepository.findAll();
  59. students.forEach(student -> {
  60. System.out.println(student);
  61. });
  62. }
  63. // @Test
  64. // public void insertSchool(){
  65. // School school1 = School.builder().address("南京路").name("南京路中学").id(1L).build();
  66. // School school2 = School.builder().address("北京路").name("北京路中学").id(2L).build();
  67. //new School(1L,"南京路中学","南京路");
  68. //
  69. // schoolReponsitory.save(new School(1L,"南京路中学","南京路"));
  70. // schoolReponsitory.save(school2);
  71. //
  72. // School school = schoolReponsitory.findSchoolByName("南京路中学");
  73. // System.out.println(school);
  74. // }
  75. }

pom.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.beacon</groupId>
  6. <artifactId>jpa-mongodb</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <packaging>jar</packaging>
  9. <description>Demo project for Spring Boot</description>
  10. <parent>
  11. <groupId>org.springframework.boot</groupId>
  12. <artifactId>spring-boot-starter-parent</artifactId>
  13. <version>2.0.3.RELEASE</version>
  14. <relativePath/> <!-- lookup parent from repository -->
  15. </parent>
  16. <properties>
  17. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  18. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  19. <java.version>1.8</java.version>
  20. </properties>
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot-starter-web</artifactId>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.springframework.boot</groupId>
  28. <artifactId>spring-boot-starter-test</artifactId>
  29. <scope>test</scope>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.springframework.boot</groupId>
  33. <artifactId>spring-boot-configuration-processor</artifactId>
  34. <optional>true</optional>
  35. </dependency>
  36. <!--数据库组件-->
  37. <!--<dependency>-->
  38. <!--<groupId>org.springframework.boot</groupId>-->
  39. <!--<artifactId>spring-boot-starter-data-jpa</artifactId>-->
  40. <!--</dependency>-->
  41. <!--数据库组件-->
  42. <!--<dependency>-->
  43. <!--<groupId>mysql</groupId>-->
  44. <!--<artifactId>mysql-connector-java</artifactId>-->
  45. <!--</dependency>-->
  46. <!--<dependency>-->
  47. <!--<groupId>com.alibaba</groupId>-->
  48. <!--<artifactId>druid</artifactId>-->
  49. <!--<version>1.1.10</version>-->
  50. <!--</dependency>-->
  51. <!--//添加AOP-->
  52. <dependency>
  53. <groupId>org.springframework.boot</groupId>
  54. <artifactId>spring-boot-starter-aop</artifactId>
  55. </dependency>
  56. <!-- Spring boot 引用Thymeleaf模板依赖包(Thymeleaf模板如果不适用,这里也可以不添加这段配置,Thymeleaf模板使用在下面会讲到) -->
  57. <dependency>
  58. <groupId>org.springframework.boot</groupId>
  59. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  60. </dependency>
  61. <!--mongodb-->
  62. <!--<dependency>
  63. <groupId>org.mongodb</groupId>
  64. <artifactId>mongodb-driver</artifactId>
  65. <version>3.6.4</version>
  66. </dependency>-->
  67. <!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver -->
  68. <dependency>
  69. <groupId>org.mongodb</groupId>
  70. <artifactId>mongo-java-driver</artifactId>
  71. <version>3.8.0</version>
  72. </dependency>
  73. <dependency>
  74. <groupId>org.springframework.boot</groupId>
  75. <artifactId>spring-boot-starter-data-mongodb</artifactId>
  76. </dependency>
  77. <dependency>
  78. <groupId>org.projectlombok</groupId>
  79. <artifactId>lombok</artifactId>
  80. <version>1.16.22</version>
  81. </dependency>
  82. </dependencies>
  83. <build>
  84. <plugins>
  85. <plugin>
  86. <groupId>org.springframework.boot</groupId>
  87. <artifactId>spring-boot-maven-plugin</artifactId>
  88. </plugin>
  89. </plugins>
  90. </build>
  91. </project>

演示效果为:(注意我们需要先往MongoDB中添加数据)

第12章—使用NoSQL数据库—使用MongoDB+Jpa操作数据库的更多相关文章

  1. JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

  2. 170622、springboot编程之JPA操作数据库

    JPA操作数据库 什么事JAP?JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. 1.在pom ...

  3. 一篇搞定spring Jpa操作数据库

    开始之前你必须在项目配置好数据库,本文使用的spring boot,相比spring,spring boot省去了很多各种对以来组件复杂的配置,直接在pom配置组件,完后会自动帮我们导入组件 < ...

  4. NoSql数据库初探-mongoDB读操作

    MongoDB以文档的形式来存储数据,此结果类似于JSON键值对.文档类似于编程语言中将键和值关联起来的结构(比如:字典.Map.哈希表.关联数组).MongoDB文档是以BOSN文档的形式存在的.B ...

  5. MongoDB常用操作--数据库

    1.查看所有数据库,使用命令 show dbs 2.查看当前所在数据库,使用命令 db 3. 查看当前数据库中所有的集合,使用命令 show collections 或使用show tables 4. ...

  6. 使用spring boot中的JPA操作数据库

    前言 Spring boot中的JPA 使用的同学都会感觉到他的强大,简直就是神器一般,通俗的说,根本不需要你写sql,这就帮你节省了很多时间,那么下面我们来一起来体验下这款神器吧. 一.在pom中添 ...

  7. spring-boot-route(九)整合JPA操作数据库

    单调的增删改查让越来越多的程序员感到乏味,这时候就出现了很多优秀的框架,完成了对增删改查操作的封装,只需要简单配置,无需书写任何sql,就可以完成增删改查.这里比较推荐的是Spring Data Jp ...

  8. 02-2--数据库MySQL:DDL(Data Definition Language:数据库定义语言)操作数据库中的表(二)

    DDL对数据库的操作:http://blog.csdn.net/baidu_37107022/article/details/72334560 DDL对数据库中表的操作 1)方法概览 2)演示 //创 ...

  9. MongoDB学习day04--NodeJs操作数据库增删改查

    一.在Nodejs中使用Mongodb Nodejs需要引入的包 npm install mongodb --save -dev 或者使用镜像 cnpm install mongodb --save ...

随机推荐

  1. 8b10b

    目的:保持直流平衡DC Balance). running disparity() 8bit原始数据会分成两部分,其低5位会进行5B/6B编码,高3位则进行3B/4B编码,这两种映射关系在当时已经成为 ...

  2. SPSS—非线性回归(模型表达式)案例解析

    非线性回归过程是用来建立因变量与一组自变量之间的非线性关系,它不像线性模型那样有众多的假设条件,可以在自变量和因变量之间建立任何形式的模型    非线性,能够通过变量转换成为线性模型——称之为本质线性 ...

  3. MySQL性能调优与架构设计——第 18 章 高可用设计之 MySQL 监控

    第 18 章 高可用设计之 MySQL 监控 前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一 ...

  4. Andfix热修复技术使用

    AndFix,全称是Android hot-fix.是阿里开源的一个Android热补丁框架,允许APP在不重新发版本的情况下修复线上的bug.支持Android 2.3 到 6.0. andfix的 ...

  5. Example11(June 9,2015)

    %--------------sort------------------------------- >> A=[ ; ; ] A = >> B=sort(A,)%A(:,)& ...

  6. 【TypeScript】TypeScript 学习 3——类

    在 EcmaScript 6 中,我们将会拥有原生的类,而不是像现在通过原型链来实现.使用 TypeScript 我们能提前体验这一特性. 首先来看看一个简单的例子: class Greeter { ...

  7. MVC2 阻止公共方法被调用

    阻止公共方法被调用 using System.Web.Mvc; namespace MvcApplication1.Controllers { public class WorkController ...

  8. Unity3d ugui 实现image代码换图

    核心脚本代码 Image IMGE = transform.Find("IMGE").GetComponent<Image>();Sprite sprite1 = Re ...

  9. 【转】4G18的低成本NA玩法

    首先是要再次强调一次,4G18的缸径是76MM,冲程是87.5MM.属于典型的长冲程低转发动机! 这种设计的优点是比较适合市区走停的工作状况,省油. 如果要针对改装方案而言因为这种低转时便可输出大扭矩 ...

  10. 手写数字识别---demo

    数据准备 课程中获取数据的方法是从库中直接load_data from keras.datasets import mnist (x_train, y_train), (x_test, y_test) ...