美文网首页
SpringBoot JPA入门学习

SpringBoot JPA入门学习

作者: cctN | 来源:发表于2018-10-25 08:14 被阅读44次

    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代码

    相关文章

      网友评论

          本文标题:SpringBoot JPA入门学习

          本文链接:https://www.haomeiwen.com/subject/thtqtqtx.html