SpringBoot JPA
一 JPA是什么
JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据.
JPA由三个不同的组件构成:
- 实体(Entities): 在当前版本的JPA中实体是普通Java对象(POJO)。老版本的JPA中实体类需要继承JPA提供的实体基类,但是这样的设计导致框架中存在了严重的依赖关系,测试变得更加困难;所以在新版JPA中不再要求实体类继承任何框架类。
- 对象-关系型元数据(Object-relational metadata): 应用程序的开发者们必须正确设定Java类和它们的属性与数据库中的表和列的映射关系。有两种设定方式:通过特定的配置文件建立映射;或者使用在新版本中支持的注解.
- Java持久化查询语句(Java Persistence Query Language - JPQL): 因为JPA旨在建立不依赖于特定的数据库的抽象层,所以它也提供了一种专有查询语言来代替SQL。 这种由JPQL到SQL语言的转换,为JPA提供了支持不同数据库方言的特性,使得开发者们在实现查询逻辑时不需要考虑特定的数据库类型。
二 模仿豆瓣读书进行JPA 配置
<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-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
三 实体类
@Data
@Entity
public class Book {
@Id
@GeneratedValue
private Integer id;
private String avatar;
private String name;
private String author;
private String type;
private String remark;
private String publish;
private String pages;
private String price;
}
@Entity
对实体注释。任何Hibernate映射对象都要有这个注释
@Id
声明此属性为主键。该属性值可以通过应该自身创建,但是Hibernate推荐通过Hibernate生成
@GeneratedValue
指定主键的生成策略。有如下四个
TABLE:使用表保存id值
IDENTITY:identitycolumn
SEQUENCR :sequence
AUTO:根据数据库的不同使用上面三个
注解@Id和@GeneratedValue用于告诉JPA该值是主键,而且会自动生成。
然后运行 application 数据库表会自动生成
四 controller层代码
@Controller
@RequestMapping(value = "/book")
public class BookController {
//用常量定义跳转的页面名称
private static final String BOOK_DETAIL_PATH_NAME = "bookDetail";
private static final String BOOK_LIST_PATH_NAME = "bookList";
@Resource
private BookService bookService;
@GetMapping("/all")
public String getBookList(ModelMap map) {
map.addAttribute("bookList", bookService.getAll());
return BOOK_LIST_PATH_NAME;
}
@GetMapping(value = "/{id}")
public String getBook(@PathVariable Integer id, ModelMap map) {
map.addAttribute("book", bookService.getId(id));
return BOOK_DETAIL_PATH_NAME;
}
}
@GetMapping
是一个组合注解,是@RequestMapping(method = RequestMethod.GET)
的缩写。该注解将HTTP Get 映射到特定的处理方法上。
从数据库获取数据然后进行渲染 ,然后根据书籍id跳转页面
最后附上GitHub代码
网友评论