- JPA 是对hiberante进行的抽象(提取出接口)。
- Spring Data JPA 是Spring Data家族对JPA的封装。
基本使用步骤:
- 导包
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
- 配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: root
jpa:
properties:
hibernate:
hbm2ddl:
auto: update # update 每次运行程序,没有表时会创建表,如果对象发生改变会更新表结构,原有数据不会清空,只会更新(推荐使用)/ none: 禁用DDL处理
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
format_sql: true
show-sql: true #展示sql语句
- 实体类
@Entity //表示这是一个实体
@Table(name = "tb_user") //name = 表名
public class User {
@Id //此属性为ID
@GeneratedValue(strategy = GenerationType.IDENTITY) //ID生成机制
@Column(name = "id") // 与表字段一致 则可以不加
private String id;
private String username;
private String password;
private String email;
}
- DAO层
import com.example.springbootjpa.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, String> {
/* JpaRepository<User, String> -- 表示简单的CRUD操作。
User表示要操作的实体类
String表示实体类的主键类型
JpaSpecificationExecutor<User> -- 只做查询,用于复杂的查询。
User表示要操作的实体类
*/
}
- Controller层
import com.example.springbootjpa.entity.User;
import com.example.springbootjpa.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Optional;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserRepository userRepository;
@PostMapping()
public User saveUser(@RequestBody User user) {
return userRepository.save(user);
}
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable("id") String userId) {
userRepository.deleteById(userId);
}
@PutMapping("/{id}")
public User updateUser(@PathVariable("id") String userId, @RequestBody User user) {
user.setId(userId);
return userRepository.saveAndFlush(user);
}
@GetMapping("/{id}")
public User getUserInfo(@PathVariable("id") String userId) {
Optional<User> optional = userRepository.findById(userId);
return optional.orElseGet(User::new);
}
@GetMapping("/list")
public Page<User> pageQuery(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
return userRepository.findAll(PageRequest.of(pageNum - 1, pageSize));
}
}