今天学习了一下JPA,发现如果只是简单的CRUD,用JPA确实要简单很多。JPA其实就相当于一个规范,他已经帮你写好了CRUD的一些实现代码,你只要实现他们,然后使用就可以了。
步骤:
- 在SpringBoot中导入JPA、JDBC、MySQL的依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
- 编写实体类
import javax.persistence.*;
@Entity //告诉JPA这是一个实体类
@Table(name = "tab_user")//指定这个实体类对应哪个表,如果不写名字的话就自动生成或对应类名全小写
public class User {
@Id//主键
@GeneratedValue(strategy = GenerationType.IDENTITY) // 定义主键自增类型
private int id;
@Column(name = "lastname") //指定该属性对应表中哪个字段
private String name;
private String mail; //不写的话,表中的字段名称和属性名称是一样的
- 编写接口,继承JpaRepository
public interface UserRepository extends JpaRepository<User,Integer>//<你要放的类型,主键的类型>{
}
- 在application.properties或者yml中配置
spring:
datasource:
username: xxx
password: xxx
url: jdbc:mysql://xxx?serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update //刚开始启动,如果没有表就建表,如果实体发生更新,那么表会随着改变
show-sql: true // 在控制台输出sql语句
5.编写响应的业务处理类
@RestController //ResponseBody+Controller,返回的数据类型为json
public class UserController {
@Autowired
UserRepository userRepository;
@GetMapping("/user/{id}")
public User getOneUserById(@PathVariable("id") int id){
User user = userRepository.getOne(id);//直接调用这个接口的方法就可以了
return user;
}
@GetMapping("/user")
public User insertUser(User user){
User user1 = userRepository.save(user);
return user1;
}