下面通过简单的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多表查询
- 只查询指定字段
- 级联操作
- 加载规则