下面通過簡單的CURD(增/改/查/刪)操作來演示一個JPA的使用過程。
<br/>
步驟如下:
**1. 創建實體類**
```java
@Entity //聲明實體
@Table(name = "user") //實體與表建立映射關系,name就是表名
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
/**
* @Id:主鍵。
* strategy:主鍵生成策略。GenerationType.IDENTITY使用數據庫的生成策略,如果是mysql就是自增鍵。
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
/**
* @Column:屬性與表字段建立映射關系。 name就是表的字段名
*/
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@Column(name = "email")
private String email;
}
```
**2. 創建查詢接口**
```java
/**
* 1. JpaRepository<實體類,主鍵類型>接口:用來完成基本CRUD操作。
* 2. JpaSpecificationExecutor<實體類>:用來完成復雜的查詢,如分頁等查詢操作。
*/
public interface UserRepository extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User> {
}
```
**3. 簡單的增刪改查**
JPA可以根據實體自動建表,不需要自己手動到數據庫中建表。
```java
@SpringBootTest
public class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
/**
* 新增一條數據。
* 如果采用批量增加可以使用saveAll方法。
*/
@Test
public void save() {
User user = User.builder().username("張三").password("zhangsan").email("zhangsan@qq.com").build();
User result = userRepository.save(user);
System.out.println(result);
//User(id=1, username=張三, password=zhangsan, email=zhangsan@qq.com)
}
/**
* 新增與更新用的是同一個方法,如果id已經存在則是更新,否則就是新增。
*/
@Test
public void update() {
User user = User.builder().id(1).username("李四").password("lisi").email("lisi@qq.com").build();
User result = userRepository.save(user);
System.out.println(result);
//User(id=1, username=李四, password=lisi, email=lisi@qq.com)
}
/**
* 查詢可以調用findOne,或者findById函數,findAll等函數,它們都是根據主鍵來查詢。
*/
@Test
public void findOne() {
User user = User.builder().id(1).build();
Example<User> example = Example.of(user);
Optional result1 = userRepository.findOne(example);
System.out.println(result1.get());
//User(id=1, username=李四, password=lisi, email=lisi@qq.com)
}
/**
* 根據id刪除數據。
* 可以調用delete,或者deleteById,或者deleteAll批量刪除,它們都是根據主鍵來刪除。
*/
@Test
public void delete() {
User user = User.builder().id(1).build();
userRepository.delete(user);
}
}
```
- MapStruct屬性映射
- MapStruct是什么
- maven依賴
- 基本映射
- 字段名不一致的映射
- 字段類型不一致的映射
- 基本數據類型轉換
- 日期格式轉換
- 使用表達式轉換
- 枚舉映射
- 多個源類的映射
- 集合的映射
- 添加自定義映射方法
- 映射前后
- 添加默認值
- 映射異常處理
- SpringDataJPA
- SpringDataJPA是什么
- 與JPA、Hibernate的關系
- 環境搭建
- 簡單CURD操作
- 內部原理
- 主鍵生成策略
- 聯合主鍵
- 查詢方式
- 方法命名規則查詢
- 限制查詢結果查詢
- 注解@Query查詢
- 命名參數查詢
- SpEL表達式查詢
- 原生查詢
- 更新與刪除
- Specification動態查詢
- 核心接口
- 查詢例子
- 分頁查詢與排序
- 多表查詢
- 一對一查詢
- 一對多查詢
- 多對多查詢
- 注意事項
- Specification多表查詢
- @Query多表查詢
- 只查詢指定字段
- 級聯操作
- 加載規則