# SpringBoot JPA
作為一款幾乎完美的數據層封裝框架,**Spring Data**同樣(也一定)是會被使用到Spring Boot 中的。
Spring Boot的JPA默認是用**Hibernate**來實現。
## 去掉依賴
去掉`pom.xml`中的`spring-boot-starter-jdbc`的依賴
## 添加依賴
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
```
## 配置文件
```
#jpa
spring.jpa.database=MYSQL
spring.jpa.show-sql=true
#hibernate
spring.jpa.hibernate.ddl-auto=update
```
## 定義實體
```
@Entity
@Table(name="user")
public class User implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String name;
@JsonFormat(pattern="yyyy年MM月dd日")
@Column(name = "birthday")
private Date birthDay;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Column(name="createtime")
private Date registerDate;
get/set ...
}
```
## 繼承一個通用接口
```
@Repository
public interface UserRepository extends JpaRepository<User, Long>{
}
```
## 注入
```
@Autowired
private UserRepository userRepository;
```
## 使用已有的實現
```
@Override
public List<User> queryAll() {
// List<User> list = userDao.queryAll();
List<User> list = userRepository.findAll();
return list;
}
@Override
@Transactional
public long save(User user) {
// 參數校驗
Assert.notNull(user,"用戶不能為空");
Assert.isTrue(user.getId() == 0, "用戶id非法,必須為0");
Assert.hasLength(user.getName(), "用戶名稱不能為空");
Assert.notNull(user.getBirthDay(),"用戶生日不能為空");
Assert.notNull(user.getRegisterDate(),"用戶注冊時間不能為空");
// 新增
//long pk = userDao.save(user);
// 打印主鍵
// 造成異常
//double result = 1 / 0;
User afterUser = userRepository.save(user);
long pk = afterUser.getId();
System.out.println(pk);
return pk;
}
```
Spring Data就是這么簡單。當然,你也可以根據自己的需要來定制。