• Spring Boot 系列(九)数据层-集成Spring-data-jpa


    实际开发中,不可避免地会对数据进行反复的增删改查操作,然而这部分工作是十分繁琐枯燥的。那么,随即而生的ORM框架就能很好的解决这个问题。
    我们常用的ORM框架有:Hibernate、Mybatis、Jpa 等。本文介绍SpringBoot 中集成 Jpa 框架。

    集成 JPA (Java Persistence API) ,持久层框架。

    Spring-data-jpa 依赖于 Hibernate,对Hibernate有一定的了解有助于使用JPA框架。

    一、pom.xml添加依赖

    <!-- mysql数据库驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.21</version>
    </dependency>
    
    <!-- 数据层 Spring-data-jpa -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    
    查看spring-boot-starter-data-jpa的具体依赖,可以发现有依赖hibernate

    二、配置数据库连接信息

    #数据库配置
    spring.datasource.url=jdbc:mysql://localhost:3306/springboot
    spring.datasource.username=root
    spring.datasource.password=
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.jpa.properties.hibernate.hbm2ddl.auto=update
    
    如果你熟悉hibernate,那么会清楚spring.jpa.properties.hibernate.hbm2ddl.auto 的作用
    # 配置指定对数据库表结构的处理方式,值有:create、create-drop、update、validate 
    #
    # create:每次加载hibernate的时候,都会重新根据模型生成表。如果表已存在,会先删除该表再生成。
    # create-drop:启动项目加载hibernate的时候,会生成表。停止项目时,会把生成的表删除掉。
    # update:常用属性。每次加载hibernate的时候,会生成表。如果表存在,会根据模型的属性变化来更新表结构,这个过程不会做删表处理。
    # validate:每次加载hibernate的时候,会检查表结构,但不会生成表。
    
    

    三、创建实体类,并使用注解进行映射。

    package com.sam.demo.domain;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    
    /**
     * @author sam
     * @since 2017/7/18
     */
    @Entity
    @Table(name = "t_person")  //指定表名
    public class Person {
    
        @Id
        @GeneratedValue
        private Long id;
    
        @Column(nullable = false)
        private String name;
    
        @Column
        private int age;
    
        // getter & setter
    }
    
    

    四、创建 PersonRepository 接口 继承 JpaRepository

    package com.sam.demo.repository;
    
    import com.sam.demo.domain.Person;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.jpa.repository.Query;
    import org.springframework.data.repository.query.Param;
    
    /**
     * @author sam
     * @since 2017/7/18
     */
    public interface PersonRepository extends JpaRepository<Person, Long> {
    
        Person findByName(String name);
    
        Person findByNameAndAge(String name, int age);
    
        @Query("FROM Person p WHERE p.id=:id")
        Person findPersonById(@Param("id") Long id);
    
    }
    
    
    PersonRepository 继承了 jpa提供的 JpaRepository。查看JpaRepository可以发现,已经封装好了基本的增删改查操作,直接使用即可。

    JpaRepository.png

    除了默认提供的增删改成之外,jpa 还提供了极其简便的方式来自定义查询等方法(不需要编写任何sql语句):
    如上面的 Person findByName(String name) 方法,JPA 会根据方法名(驼峰式),解析出相应的sql语句进行具体的查询操作。
    当我们需要执行复杂的语句的时候,我们还可以使用 @Query() 创建自定义sql语句查询:
    @Query("FROM Person p WHERE p.id=:id"),查询语句与hibernate的HQL语句相同,可以通过 :id 来绑定 @Param("id") 的参数。

    五、controller 中使用 PersonRepository

    package com.sam.demo.controller;
    
    import com.sam.demo.domain.Person;
    import com.sam.demo.repository.PersonRepository;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @author sam
     * @since 2017/7/16
     */
    @RequestMapping("/person")
    @RestController
    public class PersonController {
    
        @Autowired
        private PersonRepository personRepository;
    
        @RequestMapping(method = RequestMethod.GET)
        public Person index() {
    
            Person person = new Person();
            person.setName("sam");
            person.setAge(25);
    
            //保存person
            personRepository.save(person);
    
    //        Person temp = personRepository.findPerson(1l);
            Person temp = personRepository.findByName("sam");
    
            return temp;
        }
    
    }
    
    
    访问:http://localhost:8080/person 正确返回:
    {"id":1,"name":"sam","age":25}
    
    到此,基本完成了Spring Boot 集成 Spring-data-jpa 框架。
    Spring-data-jpa 详细使用请参考:Spring Data JPA 官方文档

    版权声明:本文为博主原创文章,转载请注明出处。

  • 相关阅读:
    Aria2任意文件写入漏洞
    webpack添加node_path不是('webpack' 不是内部或外部命令,也不是可运行的程序或批处理文件?)
    闭包的7种形式
    首页 多级展示
    velocity模板入门
    AngularJs 时间控件
    mybatis按时间条件搜索
    数据结构之线性表(双向循环链表)
    数据结构之线性表(链表)
    数据结构之线性表(顺序表)
  • 原文地址:https://www.cnblogs.com/magicalSam/p/7205652.html
Copyright © 2020-2023  润新知