Spring Boot整合JPA

Spring Boot中,JPA通过依靠Hibernate才得以实现,JPA维护的对象是实体,通过持久化上下文来使用。

一、配置jpa相关依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</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>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>

二、全局配置文件

1、数据库方面

需要配置数据库驱动,用户名,密码,连接地址等信息。

1
2
3
4
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/jpa?serverTimezone=GMT%2B8

2、JPA方面

配置JPA相关属性。

1
2
3
4
spring.jackson.serialization.indent-output=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect

三、创建对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//lombok注解,包括set,get,toString等方法
@Data
//标明是一个实体类
@Entity
//设置映射的表名称
@Table(name = "t_user")
public class User {
//主键
@Id
//主键增长策略
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
//表格中的字段
@Column(name = "username")
private String name;
private String password;
private String email;
private Date birthday;
}

四、JPA接口定义

1
2
public interface UserDao extends JpaRepository<User, Integer> {
}

这里不需要提供任何实现类,Spring Boot会根据JPA接口规范帮助我们完成。其中User是类名,Integer是主键类型。

五、Service类定义

1、定义接口服务

1
2
3
public interface UserService {
void addUser(User user);
}

2、实现接口

1
2
3
4
5
6
7
8
9
10
11
12
@Service
public class UserServiceImpl implements UserService {
//属性自动装配
@Autowired
private UserDao userDao;
//调用JPA接口定义的save方法
@Override
public void addUser(User user) {
userDao.save(user);
}

}

六、控制器测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//标明这是一个控制器
@Controller
public class UserController {
//依赖注入,自动装配Service类
@Autowired
private UserService userService;
//映射路径,访问时执行
@RequestMapping("/save")
//响应内容
@ResponseBody
public String saveUser() {
User user = new User();
user.setName("name1");
user.setPassword("123");
user.setEmail("ashassnow@126.com");
user.setBirthday(new Date());
userService.addUser(user);
return "success";
}
}

七、Spring Boot启动文件

1
2
3
4
5
6
7
8
9
10
11
//扫描基础包
@SpringBootApplication(scanBasePackages = "com.example")
// 扫描实体类
@EntityScan("com.example.pojo")
// 扫描dao
@EnableJpaRepositories("com.example.dao")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}

八、测试结果

浏览器地址栏中访问http://localhost:8080/save

数据库中表t_user被创建。