SpringBoot JPA
一.是什么
Java 持久层 API : Java Persistence API 简称 JPA
二.为什么
简化现有Java EE和Java SE应用开发工作
三.怎么样
无需写什么关于数据库访问的代码一个基本的 CURD 的功能就出来了
以下通过 IDEA实现基本的Spring Boot JPA
1.数据库连接
(1)pom.xml引入(接上一篇选择的 SQL 功能):
添加MySQL数据库驱动依赖,
添加spring-boot-starter-data-jpa依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
(2)application.properties 配置文件内容
################################
##### 指定MySQL 连接信息
################################
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.max-actives=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
################################
##### 配置 JPA
################################
spring.jpa.database=mysql
##### 是否显示sql语句
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
##### 配置实体后,会创建表结构,就是如下这句话
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
2.CRUD 功能代码
总览:
(1)创建Cat实体类
(2)创建jpa repository 接口,操作持久化
(3)创建service 类
(4)创建restful 请求类
(5)测试
(1)Bean
package com.example.crud.bean;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
/**
* 创建实体类,如何持久化
* 1.使用@Entity 进行实体类的持久化操作,
* 当JPA检测到实体类中有@Entity 注解时候,会在数据库中创建相应的表结构
*/
@Entity
public class Cat {
/**
* 使用@Id 指定主键
* 使用@GeneratedValue(strategy=GeneratedValue.Auto)
* MySQL 默认的是自增长
* @return
*/
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String catName;
private String catAge;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCatName() {
return catName;
}
public void setCatName(String catName) {
this.catName = catName;
}
public String getCatAge() {
return catAge;
}
public void setCatAge(String catAge) {
this.catAge = catAge;
}
}
(2)启动项目
注意:关闭基础一种注释的如下代码
//@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
(3)验证数据库,自动生成表结构
(3)创建Repository 是接口继承CrudRepository
package com.example.demo.repository;
import com.example.demo.bean.Cat;
import org.springframework.data.repository.CrudRepository;
import java.io.Serializable;
public interface CatRepository extends CrudRepository<Cat, Serializable> {
}
(4)创建CatService 注入
package com.example.demo.service;
import com.example.demo.bean.Cat;
import com.example.demo.repository.CatRepository;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.transaction.Transactional;
@Service
public class CatService {
@Resource
private CatRepository catRepository;
/**
* 使用@Transactional 进行事务绑定
*/
public void save(Cat cat){
catRepository.save(cat);
}
@Transactional
public void delete(int id){
catRepository.deleteById(id);
}
public Iterable<Cat> getAll(){
return catRepository.findAll();
}
}
(5)编写Restful 风格接口
package com.example.demo.controller;
import com.example.demo.bean.Cat;
import com.example.demo.service.CatService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@RequestMapping("/cat")
public class CatController {
@Resource
private CatService catService;
@RequestMapping("/save")
public String save(){
Cat cat = new Cat();
cat.setCatName("jack");
cat.setCatAge(3);
catService.save(cat);
return " save is ok";
}
@RequestMapping("/delete")
public String delete(){
catService.delete(1);
return " delete is ok";
}
@RequestMapping("/getAll")
public String getAll(){
catService.getAll();
return " getAll is ok";
}
}
(6)测试
http://127.0.0.1:8080/cat/save
刷新一次执行一次
删除测试
控制台显示SQL 语句
3.总结
本节需要了解以下内容
(1) Hibernate
Hibernate 是一个实现数据持久化的工具项目,它可以被嵌入到J2EE服务器中使用
(2) Spring Data
Spring Data 项目的目的是为了简化构建基于 Spring 框架应用的数据访问计数,包括非关系数据库、Map-Reduce 框架、云数据服务等等;另外也包含对关系数据库的访问支持。
(3) Spring Data JPA
(4) JPA 和 Hibernate 关系
JPA是一种规范,而Hibernate 是一种实现