SpringBoot+SpringDataJPA

Spring-Data-JPA

Spring-Data-JPA是Spring全家桶中SpringData系列的一个分支,是SpringData对于JPA的封装和支持。
所谓JPA,即Java Persistence API,Java持久层API,是JDK对于ORM规范定义的一套接口,用于在数据持久层中面向对象编程,屏蔽数据库底层操作。
而在所有的JPA实现框架中,最为优秀的自然是Hibernate,所以,Spring-Data-JPA默认使用的底层实现就是Hibernate框架。而我们平常所说的JPA也默认是Hibernate实现的JPA。
Spring-Data-JPA作为Spring大家庭的一个成员,自然也默认支持SpringBoot,我们也可以直接使用SpringBoot来搭建Spring-Data-JPA环境。

创建项目,引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.hrp</groupId>
    <artifactId>springboot_jpa</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--SpringBoot为父项目-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
    </parent>

    <dependencies>
        <!--SpringBootweb开发的启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--Spring-Data-JPA的启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!--测试功能的启动器,用于整合junit测试功能-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--lombox插件的依赖,SpringBoot内置,无须标注版本号-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--MySQL数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

application.yml配置文件

spring:
  datasource:   #配置数据库连接的四个信息,这里使用的是SpringBoot内置的数据库连接池Hikari
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/myshop
    username: root
    password: admin
  jpa:
    database: mysql         #指定数据库
    show-sql: true          #是否显示SQL语句
    generate-ddl: false     #是否在启动时初始化schema,默认为false
    open-in-view: false     #是否注册OpenEntityManagerInViewInterceptor,绑定JPA EntityManager到请求线程中,默认为: true
    hibernate:
      ddl-auto: update      #用于指定数据库表生成策略
  jackson:
    default-property-inclusion: ALWAYS
    time-zone: GMT+8
    date-format: yyyy-MM-dd

SpringBoot启动类

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class);
    }
}

编写实体类

@Data
@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String username;
    private String password;
    private String name;
    private Integer gender;
    private Date birthday;
    private String phone;
    private String picture;
    private String address1;
    private String address2;
    private String address3;
    private Integer power;
}

这个实体类对应的user表和上一篇博客SpringBoot+MyBatis+通用Mapper是同一个数据库表,这里就不再写数据库建表语句,有需要的可以去上一篇博客中找。

编写数据访问层

public interface UserDao extends JpaRepository<User,Long>, JpaSpecificationExecutor<User> {
}

同样,这里只需要继承一个JpaRepository和JpaSpecificationExecutor两个接口就可以了,SpringDataJPA会使用动态代理的方式,自动生成对应的简单访问方法。
JpaRepository中的两个泛型:

  • 第一个为实体类类型
  • 第二个为实体类主键类型

编写业务层

业务层接口

public interface UserService {

    /**
     * 分页查询用户数据
     * @param pageNum
     * @param pageSize
     * @return
     */
    Page<User> findByPage(Integer pageNum, Integer pageSize);

}

业务层实现

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Override
    public Page<User> findByPage(Integer pageNum, Integer pageSize) {
        Pageable pageable = PageRequest.of(pageNum,pageSize);
        Page<User> page = userDao.findAll(pageable);
        return page;
    }
}
  • 这里使用了SpringData中的一个分页工具Pageable。

编写Web层

@RestController
@RequestMapping("user")
public class UserController {

    @Autowired
    private UserService userService;
    
    @GetMapping("page/{pageNum}")
    public ResponseEntity<Page<User>> findByPage(
            @PathVariable("pageNum") Integer pageNum,
            @RequestParam(defaultValue = "5") Integer pageSize){
        return ResponseEntity.ok(userService.findByPage(pageNum,pageSize));
    }
}

最后

我们启动SpringBoot项目,然后在浏览器中访问**/user/page/{pageNum}**这个API。
在这里插入图片描述【注意】Spring-Data中的Pageable分页功能,索引是从0开始的,所以如果是正式开发中,我们应该自己维护这个索引,维护策略应该结合需求实际应用。

发布了31 篇原创文章 · 获赞 35 · 访问量 4088

猜你喜欢

转载自blog.csdn.net/qq_45193304/article/details/104455794
今日推荐