概念
什么是JAP
- JAP(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据。
- JPA通过JDK5.0注解或者XML描述对象 - 关系表的映射关系,并将运行期的实体对象持久化到数据库中。
- 持久化(Persistence),即把数据保存到可永久保存的存储设备中,如磁盘。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等...
什么是Spring Data
- Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目的是使用数据库访问变得方便快捷,并支持MapReduce框架和云计算数据服务。它还支持基于关系型数据库的数据服务,如Oracle RAC等。对于拥有海量数据的项目,可以使用Spring Data来简化项目的开发,就如Spring Framework对JDBC、ORM的支持一样,Spring Data会让数据的访问变得更加方便。
什么是Spring Data JPA
- Spring Data JPA:可以简化JAP的写法,可以在不用写实现的情况下,实现对数据的访问和操作。除了CRUD(Create、Retrieve、Update、Delete)外,还包括分页、排序等一些常用的功能。
- 我们清楚的是Spring Data是一个开源框架,在这个框架中Spring Data JAP只是这个框架中的一个模块,所以名称才叫Spring Data JPA。如果单独使用JPA开发,会发现这个代码量和使用JDBC开发一样有点烦人,所以Spring Data JPA的出现就为了简化JPA的写法,让你只需要编写一个借口继承一个类就能实现CRUD操作了。
配置Spring JPA
修改pom.xml配置文件
<!-- 添加MySQL数据库驱动依赖包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 添加spring-data-jpa依赖包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
application.properties文件加入配置
#指定MySql数据库连接信息
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.diverClassName=com.mysql.jdbc.Driver
spring.datasource.max-active==20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
#配置spring JPA信息
spring.jpa.database=MYSQL
#控制台是否打印SQL信息
spring.jpa.show-sql=true
#当执行DDL语句时,是创建还是更新还是删除等...create、update、drop-create
spring.jpa.hibernate.ddl-auto=update
#持久化命名策略,当创建一个实体类,会在相应的数据库中新增一张该实体类对应的数据库表结构
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
创建实体类
package com.cori.demo.bean;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
/**
* 创建一个用户实体类
*
* 使用@Entity进行实体类持久化操作,当JPA检测到实体类当中有@Entity注解时,则会在数据库中生成该类对应的表结构性信息,
* 如属性为驼峰命名法,则对应生成的表字段为,如:userId -> user_id(可自己定义);
* 使用@Id指定主键
*
* @author Administrator
*
*/
@Entity
public class UserBean {
/**
* @Id指定主键
* @GeneratedValue(strategy=GenerationType.AUTO) 指定主键的生成策略,MySQL为自动增长
*/
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer userId;
private String userName;
private Integer userAge;
private Integer userSex;
private String idCard;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Integer getUserAge() {
return userAge;
}
public void setUserAge(Integer userAge) {
this.userAge = userAge;
}
public Integer getUserSex() {
return userSex;
}
public void setUserSex(Integer userSex) {
this.userSex = userSex;
}
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
}
创建实体类之后,这一步启动服务,然后进入MySQL数据库中查看,可以看到对应的user_bean表结构已经创建好了。
创建接口
- 创建接口继承CrudRepository
package com.cori.demo.Repository;
import org.springframework.data.repository.CrudRepository;
import com.cori.demo.bean.UserBean;
public interface UserRepository extends CrudRepository<UserBean, Integer>{
}
创建Service
package com.cori.demo.service;
import javax.annotation.Resource;
import javax.transaction.Transactional;
import org.springframework.stereotype.Service;
import com.cori.demo.Repository.UserRepository;
import com.cori.demo.bean.UserBean;
@Service
public class UserService {
@Resource
private UserRepository userRepository;
//新增记录
@Transactional
public void save(UserBean bean) {
userRepository.save(bean);
}
//删除记录
@Transactional
public void delete(int id) {
userRepository.delete(id);
}
//查询记录
public Iterable<UserBean> findAll() {
return userRepository.findAll();
}
}
创建Controller
package com.cori.demo.controller;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.cori.demo.bean.UserBean;
import com.cori.demo.service.UserService;
@RestController
@RequestMapping("/user")
public class UserController {
@Resource
private UserService userService;
@RequestMapping("/save")
public String save() {
UserBean bean = new UserBean();
bean.setUserName("张三");
bean.setUserAge(28);
bean.setUserSex(0);
bean.setIdCard("123456789123456789");
userService.save(bean);
return "ok";
}
@RequestMapping("/delete")
public String delete() {
userService.delete(1);
return "ok";
}
@RequestMapping("/getAll")
public Iterable<UserBean> findAll(){
return userService.findAll();
}
}
到这里已经实现了简单的增删查功能了,可以启动服务进行测试了。
总结
- 需要在POM.xml文件中添加相应的依赖包;
- 需要在application.properties配置文件中添加配置信息;
- 需要创建实体类,比如:User;
- 需要创建接口类并继承CrudRepository;
- 需要创建Service类;
- 需要创建Controller类;
- 测试;