SpringBoot(十) -- Spring Data


一.Spring Data简介
  Spring Data 项目的目的是为了简化构建基于 Spring 框架应用的数据访问技术,包括非关系数据库、Map-Reduce 框架、云数据服务等等;另外也包含对关系数据库的访问支持。

二.Spring Data特点
  1.SpringData为我们提供使用统一的API来对数据访问层进行操作;这主要是Spring Data Commons项目来实现的。Spring Data Commons让我们在使用关系型或者非关系型数据访问技术时都基于Spring提供的统一标准,标准包含了CRUD(创建、获取、更新、删除)、查询、排序和分页的相关操作。
  2.统一接口:
  Repository:统一接口
  RevisionRepository>:基于乐观锁机制
  CrudRepository:基本CRUD操作
  PagingAndSortingRepository:基本CRUD及分页;
  3.提供数据访问模板类 xxxTemplate:如:MongoTemplate、RedisTemplate等;

三.SpringData JPA
  JPA即表示Java Persistence API(java持久化API);
  1.POM引入JPA模块:

 1     <dependencies>
 2         <dependency>
 3             <groupId>org.springframework.bootgroupId>
 4             <artifactId>spring-boot-starter-data-jpaartifactId>
 5         dependency>
 6         <dependency>
 7             <groupId>org.springframework.bootgroupId>
 8             <artifactId>spring-boot-starter-jdbcartifactId>
 9         dependency>
10         <dependency>
11             <groupId>org.springframework.bootgroupId>
12             <artifactId>spring-boot-starter-webartifactId>
13         dependency>
14 
15         <dependency>
16             <groupId>mysqlgroupId>
17             <artifactId>mysql-connector-javaartifactId>
18             <scope>runtimescope>
19         dependency>
20         <dependency>
21             <groupId>org.springframework.bootgroupId>
22             <artifactId>spring-boot-starter-testartifactId>
23             <scope>testscope>
24         dependency>
25         <dependency>
26             <groupId>junitgroupId>
27             <artifactId>junitartifactId>
28             <scope>testscope>
29         dependency>
30     dependencies>

  2.配置数据源信息;
  3.JPA-ORM(Object Relational Mapping) 对象关系映射:
  (1)编写一个实体类和数据表进行映射,并且配置表映射关系:

 1 package com.skykuqi.springboot.datajpa.entity;
 2 
 3 import javax.persistence.*;
 4 
 5 /**
 6  * @author : S K Y
 7  * @version :0.0.1
 8  */
 9 //使用JPA注解配置映射关系
10 @Entity     //告诉JPA这是一个实体类,和数据表映射的类
11 @Table(name = "tbl_user")   //来指定和哪个数据表对应,如果省略,默认表名就是user
12 public class User {
13     @Id         //标注这是一个主键
14     @GeneratedValue(strategy = GenerationType.IDENTITY)     //表示这个一个自增组件
15     private Integer id;
16 
17     @Column(name = "last_name")     //这是和数据表对应的一个列
18     private String lastName;
19     @Column     //省略列名就是email即属性名
20     private String email;
21 
22     public Integer getId() {
23         return id;
24     }
25 
26     public void setId(Integer id) {
27         this.id = id;
28     }
29 
30     public String getLastName() {
31         return lastName;
32     }
33 
34     public void setLastName(String lastName) {
35         this.lastName = lastName;
36     }
37 
38     public String getEmail() {
39         return email;
40     }
41 
42     public void setEmail(String email) {
43         this.email = email;
44     }
45 
46     @Override
47     public String toString() {
48         return "User{" +
49                 "id=" + id +
50                 ", lastName='" + lastName + '\'' +
51                 ", email='" + email + '\'' +
52                 '}';
53     }
54 }

  (2).编写一个Dao接口操作实体类对应的数据表:SpringData具有统一的RepRepository接口:

 1 package com.skykuqi.springboot.datajpa.repository;
 2 
 3 import com.skykuqi.springboot.datajpa.entity.User;
 4 import org.springframework.data.jpa.repository.JpaRepository;
 5 
 6 /**
 7  * @author : S K Y
 8  * @version :0.0.1
 9  */
10 //操作数据表
11 //继承JpaRepository来实现对数据库的操作
12 //其泛型表示<当前操作的实体类,主键的类型>
13 public interface UserRepository extends JpaRepository {
14 
15 }

  (3)在配置文件中配置相关的属性:

  (4)编写Controller:

 1 package com.skykuqi.springboot.datajpa.conroller;
 2 
 3 import com.skykuqi.springboot.datajpa.entity.User;
 4 import com.skykuqi.springboot.datajpa.repository.UserRepository;
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.web.bind.annotation.GetMapping;
 7 import org.springframework.web.bind.annotation.PathVariable;
 8 import org.springframework.web.bind.annotation.RestController;
 9 
10 /**
11  * @author : S K Y
12  * @version :0.0.1
13  */
14 @RestController
15 public class UserController {
16     @Autowired
17     UserRepository userRepository;
18 
19     @GetMapping("/user/{id}")
20     public User queryUserById(@PathVariable("id") Integer id) {
21         return userRepository.findOne(id);
22     }
23 
24     @GetMapping("/user")
25     public User insertUser(User user) {
26         //返回的对象中将会带有自增组件
27         return userRepository.save(user);
28     }
29 }