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<T, ID extends Serializable>:统一接口
RevisionRepository<T, ID extends Serializable, N extends Number & Comparable<N>>:基于乐观锁机制
CrudRepository<T, ID extends Serializable>:基本CRUD操作
PagingAndSortingRepository<T, ID extends Serializable>:基本CRUD及分页;
3.提供数据访问模板类 xxxTemplate:如:MongoTemplate、RedisTemplate等;
三.SpringData JPA
JPA即表示Java Persistence API(java持久化API);
1.POM引入JPA模块:
1 <dependencies>
2 <dependency>
3 <groupId>org.springframework.boot</groupId>
4 <artifactId>spring-boot-starter-data-jpa</artifactId>
5 </dependency>
6 <dependency>
7 <groupId>org.springframework.boot</groupId>
8 <artifactId>spring-boot-starter-jdbc</artifactId>
9 </dependency>
10 <dependency>
11 <groupId>org.springframework.boot</groupId>
12 <artifactId>spring-boot-starter-web</artifactId>
13 </dependency>
14
15 <dependency>
16 <groupId>mysql</groupId>
17 <artifactId>mysql-connector-java</artifactId>
18 <scope>runtime</scope>
19 </dependency>
20 <dependency>
21 <groupId>org.springframework.boot</groupId>
22 <artifactId>spring-boot-starter-test</artifactId>
23 <scope>test</scope>
24 </dependency>
25 <dependency>
26 <groupId>junit</groupId>
27 <artifactId>junit</artifactId>
28 <scope>test</scope>
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<User, Integer> {
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 }