第十篇:Spring Boot整合Spring Data JPA

一、JPA是什么?

JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。


二、Spring Data JPA
是Spring基于ORM框架、JPA规范封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作,它提供了包括增删改查等在内的常用功能,且易于扩展。

它提供了许多编程接口:
Repository:最顶层的接口,是一个空接口,目的是为了统一所有的Repository的类型,且能让组件扫描的时候自动识别;
CrudRepository:Repository的子接口,提供增删改查CRUD的功能;
PagingAndSortingRepository:CrudRepository的子接口,添加分页排序的功能;
JpaRepository:PagingAndSortingRepository的子接口,增加批量操作等功能;
JpaSpeccificationExecutor:用来做复杂查询的接口。

三、示例

1. 添加spring-boot-starter-data-jpa依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

2. 添加mysql依赖:
    <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <scope>runtime</scope>
    </dependency> 


3. 配置数据源,在application.properties文件配置:
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?zeroDateTimeBehavior=convertToNull&amp;useUnicode=true&amp;connectTimeout=5000&amp;socketTimeout=5000&amp;characterEncoding=UTF-8&amp;useConfigs=maxPerformance&amp;prepStmtCacheSqlLimit=1024
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect

注意,如果通过jpa在数据库中建表,将jpa.hibernate,ddl-auto改为create,建完表之后,要改为update,要不然每次重启工程会删除表并新建。


创建实体类

通过@Entity 表明是一个映射的实体类, @Id表明id, @GeneratedValue 字段自动生成


package sample.data.jpa.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "t_user")
public class User {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;

	@Column
	private String name;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + "]";
	}

	public User(Long id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	public User() {
	}
}

Dao层

数据访问层,通过编写一个继承自 JpaRepository 的接口就能完成数据访问,其中包含了几本的单表查询的方法,非常的方便。值得注意的是,这个User对象名,而不是具体的表名,另外Interger是主键的类型,一般为Integer或者Long

package sample.data.jpa.service;

import org.springframework.data.repository.CrudRepository;

import sample.data.jpa.domain.User;

public interface UserRepository extends CrudRepository<User, Long> {

    User findByName(String name);  
  
}

Controller层

在这个例子中我简略了service层的书写,在实际开发中,不可省略。新写一个controller,示例如下:

package sample.data.jpa.web;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import sample.data.jpa.domain.User;
import sample.data.jpa.service.UserRepository;

@Controller
public class SampleController {

	@Autowired
	private UserRepository userRepository;

	@GetMapping("/")
	@ResponseBody
	public String helloWorld() {
		userRepository.deleteAll();
		User user = new User();
		user.setName("zhangsan");
		userRepository.save(user);
		user = userRepository.findByName("zhangsan");
		System.out.println("name:"+user.getName());
		return "Hello World";
	}

}

测试: 打开浏览器输入 http://localhost:8080/

源码下载:https://gitee.com/zhmal/spring-boot-samples/tree/master/spring-boot-sample-data-jpa

参考资料:

http://projects.spring.io/spring-data-jpa/

https://spring.io/guides/gs/accessing-data-jpa/


猜你喜欢

转载自blog.csdn.net/mzh_cn/article/details/80587288