文章目录
- JPA的使用
- 一、JPA介绍
- 二、JPA实体类的创建
- 三、简单方法的使用
- 预先生成方法
JPA的使用
一、JPA介绍
Jpa 是 Spring 基于 ORM 框架、Jpa 规范的基础上封装的一套 Jpa 应用框架,可使开发者用极简的代码即可实现对数据的访问和操作
二、JPA实体类的创建
1. 实体类注解
@Data
@Entity
@Table(name = "表名", schema = "用户名")
@NoArgsConstructor // 生成一个无参数的构造方法
@AllArgsConstructor // 会生成一个包含所有变量
@GenericGenerator(name = "uuid", strategy = "uuid")
2. 主键
@Id
@GeneratedValue(generator = "uuid")
@Column(name="ID")
private String id;
3. 其他参数
@Column(name="NAME")
private String name;
@Column(name="TIME")
private Date time;
4. 一对多
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER,mappedBy = "多方属性名")
@OrderBy("排序字段 ASC")
5. 多对一
@ManyToOne(cascade={CascadeType.REFRESH},fetch = FetchType.LAZY)
@JoinColumn(name="外键名称")
6. 其他注解
@JsonIgnore // 一般标记在属性或者方法上,返回的json数据即不包含该属性。
@Transient //不维护字段
7. 级联操作注解
在@OneToMany
或者@ManyToOne
中
CascadeType.REMOVE
Cascade remove operation
,级联删除操作。
删除当前实体时,与它有映射关系的实体也会跟着被删除。CascadeType.MERGE
Cascade merge operation
,级联更新(合并)操作。
当Student中的数据改变,会相应地更新Course中的数据。CascadeType.DETACH
Cascade detach operation
,级联脱管/游离操作。
如果你要删除一个实体,但是它有外键无法删除,你就需要这个级联权限了。它会撤销所有相关的外键关联。CascadeType.REFRESH
Cascade refresh operation
,级联刷新操作。CascadeType.ALL
Cascade all operations
,清晰明确,拥有以上所有级联操作权限FetchType.LAZY
:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载FetchType.EAGER
:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载
三、简单方法的使用
预先生成方法
Spring Boot Jpa 默认预先生成了一些基本的CURD的方法,例如:增、删、改等等
- 继承 JpaRepository
public interface UserRepository extends JpaRepository<User, Long> {
}
- 使用默认方法
@Test
public void testBaseQuery() throws Exception {
User user=new User();
userRepository.findAll();
userRepository.findOne(1l);
userRepository.save(user);
userRepository.delete(user);
userRepository.count();
userRepository.exists(1l);
// ...
}
- 自定义简单查询
自定义的简单查询就是根据方法名来自动生成 SQL,主要的语法是findXXBy,readAXXBy,queryXXBy,countXXBy, getXXBy
后面跟属性名称:
User findByUserName(String userName);
也使用一些加一些关键字And 、 Or
User findByUserNameOrEmail(String username, String email);
修改、删除、统计也是类似语法
Long deleteById(Long id);
Long countByUserName(String userName)