在IDEA中利用SpringBoot整合JPA
工具介绍
IDEA
Navicat
一、创建新项目
利用IDEA自带的spring初始化向导来新建一个spring的项目:
设置项目名称以及包名:
选择SpringBoot的版本以及添加以下依赖:
然后一直next即可创建完成。
项目的pom.xml文件中的依赖是这样的:
<dependencies>
<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>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
新建好的项目结构:
二、设置数据源
个人更喜欢使用yml文件作为配置文件,它层次感更强,也更清晰易懂,所以接下来我们就在项目的resource目录下新建文件application.yml,然后再配置数据源的信息(需要注意yml文件中属性的名字和值之间由冒号隔开,冒号后面一定有一个空格):
spring:
datasource:
# jpa是数据库的名称
url: jdbc:mysql://localhost/jpa
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
三、实体类
创建User的实体类(省略了getter&setter方法):
/**
* 使用JPA注解配置映射关系
*/
@Entity //告诉JPA这是一个实体类(和数据表映射的类)
@Table(name = "tbl_user") //@Table来指定和哪个数据表对应;如果省略,默认表名就是该类名的小写:user
public class User {
@Id //表示这个属性是数据表中的主键
@GeneratedValue(strategy = GenerationType.IDENTITY) //还是一个自增的主键
private Integer id;
@Column(name = "last_name",length = 50) //这是和数据表对应的一个列,可以定义其在数据表中的名字及长度
private String lastName;
@Column //省略的情况,默认列名就是属性名
private String email;
使用JPA的一个好处就是,它能够根据实体类自动帮我们创建对应的数据库表,只需简单配置几步即可:
在application.yml文件中增加(jpa 也是spring下的一个属性,所以它也是在spring这个层级下的):
jpa:
hibernate:
# ddl-auto:定义数据表的生成策略。update:更新或者创建数据表结构
ddl-auto: update
# 控制台显示sql语句
show-sql: true
之后运行主程序,控制台会报错找不到对应的表,但是这实际上是正常的,去数据库看就可以发现名为tbl_user的表已经创建成功了,而且是根据实体类中的设置创建的。
三、持久层接口
JPA中有许多封装好的对数据库进行操作的方法,不需要再写sql语句,而是直接调用其中的方法,就可以完成对数据的操作了。而这时,持久层只需继承JpaRepository类就OK了。
/**
* 继承JpaRepository来完成对数据库的操作
* JpaRepository<T,id>,T表示要进行操作的实体类,id表示类的主键的类型
*/
public interface UserRepository extends JpaRepository<User,Integer> {
}
四、控制层
编写控制层代码来测试一下是否成功。因为没有界面,所以这边直接用@RestController注解来返回json串就好了,把持久层接口自动注入进来,直接调用其中对应的方法。
@RestController
public class UserController {
@Autowired
UserRepository userRepository;
@GetMapping("/user/{id}")
public User getUser(@PathVariable("id") Integer id){
User user = userRepository.findOne(id);
return user;
}
@GetMapping("/user")
public User insertUser(User user){
User save = userRepository.save(user);
return save;
}
}
五、页面效果
首先插入一条数据:
地址栏输入 :http://localhost:8080/user?lastName=zhangsan&email=aa
查询:
地址栏输入 :http://localhost:8080/user/1