[Spring Boot 实践] 快速搭建 JPA 实现数据库操作

893 阅读3分钟

前言

Hi 我是来自西部大嫖客杰西。 这篇文章主要是讲述如何使用 Spring Boot 快速搭建 JPA 进行数据库操作。

Spring JPA 其实类似于 Mybatis 的数据访问层的实现。其目的是通过优化减少代码量,实现更加轻易地对数据库的访问。

在开始搭建 demo 之前,极力推荐大家遇到困难首先查看官方文档,官档的描述非常清楚。 官档地址

搭建步骤

  1. 初始项目
  2. 初始数据库
  3. 导入依赖
  4. application.yml 添加数据库配置
  5. 编写 UserEntity.java
  6. 编写 SysUserRepository.java
  7. 编写 UserController.java

初始项目

初始化方法我一般用以下两种

  1. 通过 start.spring.io 自定义项目,然后下载/导入。
  2. 通过 IDEA 来新建 Spring Boot 项目。

然后项目目录基本以下

+- java
    +- com.jc.jpa-demo
        +- domain
        +- repository
        +- service      (暂时不写 service 层代码)
        +- controller
+- resources
    +- application.yml  

初始数据库

CREATE TABLE "sys_user" (
  "id" bigint(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  "username" varchar(50) NOT NULL COMMENT '用户名',
  "password" varchar(100) DEFAULT NULL COMMENT '密码',
  "salt" varchar(50) DEFAULT NULL COMMENT '',
  "state" varchar(50) DEFAULT NULL COMMENT '',
  PRIMARY KEY ("id") USING BTREE,
  UNIQUE KEY "username" ("username") USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='系统用户表';

导入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</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>

注意,我是用的 Spring Boot 为 2.2.2.RELEASE

ps:引入 web 依赖是为了直接通过 url 来调试程序。

application.yml 添加数据库配置

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.1.12:3306/test?characterEncoding=utf8
    username: root
    password: root
  jpa:
    properties:
      hibernate:
        show_sql: true
        format_sql: true

ps:这里需要更改成你实际情况的数据库信息。

编写简单的分页工具 SysUser.java

domain/UserEntity.java

@Entity
@Table(name = "sys_user")
public class UserEntity implements Serializable {

    @Id  //表明主键
    @GeneratedValue(strategy = GenerationType.IDENTITY)  //表示自增长方式
    @Column(name = "id")  //表示对应的表product_的字段名
    private int id;
    private String username;
    private String password;
    private String salt;
    private String state;

    // 省略了 getter  setter
}

ps:@Table 和 @Column 注解会在 IDEA 环境下报错,但是并不妨碍用运行。可自行百度如何配置 IDEA。

编写 SysUserRepository.java

repository/UserRepository.java

@Transactional
public interface UserRepository extends JpaRepository<UserEntity, Long> {
    @Query(value = "select * from sys_user where id = ?1",nativeQuery = true)
    public List<UserEntity> nativeQuery(int age);
}

编写 UserController.java

controller/SysUserController.java

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

    @Autowired
    private UserRepository userRepository;

    @RequestMapping(value = "/list")
    public List<UserEntity> list()
    {
        return userRepository.findAll();
    }

    @RequestMapping(value = "/add")
    public String add()
    {
        UserEntity userEntity = new UserEntity();
        userEntity.setUsername("admin1");
        userEntity.setPassword("admin");
        userEntity.setSalt("21");
        userRepository.save(userEntity);
        return "用户信息添加成功";
    }

    @RequestMapping(value = "/delete/{id}")
    public String delete(@PathVariable("id") int userId)
    {
        UserEntity userEntity = new UserEntity();
        userEntity.setId(userId);
        userRepository.delete(userEntity);
        return "用户信息删除成功";
    }

    @RequestMapping(value = "/{id}")
    public List<UserEntity> age(@PathVariable("id") int userId){
        return userRepository.nativeQuery(userId);
    }
}

启动测试