springboot项目开发过程参考(Spring Data JPA + Spring Data REST)

springboot项目开发过程参考(Spring Data JPA + Spring Data REST)

依赖环境

  • java

    jdk版本 1.8

  • maven

    mvn -v
    3.6.3
    

开发工具

  • IDEA
  • postman 测试后端接口
  • vscode

新建项目

  • 项目结构

    DemoApplication: 项目启动类
    application.properties: 配置文件
    pom.xml: 运行环境,maven仓库

框架:Spring Data JPA + Spring Data REST

  • Spring Data JPA,使开发者使用极简的代码实现对数据库的访问和操作。它提供了包括增删改查等在内的基本功能,且易于扩展。
  • Spring Data REST,基于Spring Data的repository之上,可以把 repository 自动输出为REST资源,支持Spring Data JPA
1.导入maven依赖

pom.xml

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <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>
        <!--Spring Data REST-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-rest-webmvc</artifactId>
            <version>3.3.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </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>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.4.0</version>
                <configuration>
                    <includeSystemScope>true</includeSystemScope>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

2.properties文件
#restful
spring.data.rest.base-path=/db
server.port=18888

#达梦
#spring.datasource.url=jdbc:dm://localhost:5236?schema=DEMOSTORE
#spring.datasource.username=SYSDBA
#spring.datasource.password=12345qwert
#spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver
#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.DmDialect
#spring.jpa.hibernate.ddl-auto=update
#spring.jpa.show-sql=true

#mysql
#com.mysql.cj.jdbc.Driver
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/demojava?characterEncoding=utf-8&serverTimezone=UTC&useSSL=false
spring.datasource.username=root
spring.datasource.password=123qwe

#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.DmDialect
spring.jpa.hibernate.ddl-auto=update
#spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true

3.entity
package com.example.demo.entity;

import lombok.Data;
import javax.persistence.*;

@Entity  //jpa实体类标识
@Data    //LomBok插件,省略get set
//@Table(name = "SysUser") // 指定数据库的表名
public class SysUser {

    @Id  //主键
    private Integer userId;

    private String userName;

    private String userType;

    private String password;

}
4.repository
package com.example.demo.repository;

import com.example.demo.entity.SysUser;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
// 相当于UserDao
// 将UserRepository继承JpaRepository就可以有对应的增删改查方法
public interface UserRepository extends JpaRepository<SysUser,Integer>{
}

不需要通过controller,即可使用postman查看接口

5.添加查询方法
  • 使用

    import com.example.demo.entity.SysUser;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.jpa.repository.Query;
    import org.springframework.stereotype.Repository;
    
    import java.util.List;
    
    @Repository
    // 相当于UserDao
    // 将UserRepository继承JpaRepository就可以有对应的增删改查方法
    public interface UserRepository extends JpaRepository<SysUser,Integer>{
    
        public SysUser findByUserIdAndPassword(Integer userId, String password);
    
        @Query(value = "select * from sys_user u where u.user_id=?1 and u.password=?2", nativeQuery = true)
        public List<SysUser> findByOwnMethod(Integer userId, String password);
    
    }
    
  • jpa自动生成sql

    spring-data-jpa会根据方法的名字来自动生成sql语句,只需要按照方法定义的规则即可。

    public SysUser findByUserIdAndPassword(Integer userId, String password);
    

    上面的方法findByUserIdAndPassword,以findBy开头,sql的where部分就是UserIdAndPassword,被spring-data-jpa翻译之后就编程了下面这种形态:

    select * from user where userId = ? and password = ?
    
  • 自定义sql

    使用@Query注解,写原生sql

    @Query(value = "select * from sys_user u where u.user_id=?1 and u.password=?2", nativeQuery = true)
    public List<SysUser> findByOwnMethod(Integer userId, String password);
    
6.service

主要有两个作用

  • 1 单独的服务

  • 2 包装repository供controller使用

    public interface UserService {
    
        public SysUser findUserOrNot(Integer userId, String password);
    }
    
    @Service
    public class UserServiceImpl implements UserService{
        private final UserRepository userRepository;
    
        @Autowired
        UserServiceImpl(UserRepository userRepository) {
            this.userRepository = userRepository;
        } 
    
        @Override
        public SysUser findUserOrNot(Integer userId, String password) {
            return userRepository.findByUserIdAndPassword(userId, password);
        }
    }
    
7.controller
package com.example.demo.controller;

import com.example.demo.entity.SysUser;
import com.example.demo.repository.UserRepository;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@CrossOrigin
@RestController
@RequestMapping("/define")
public class UserController {

    @Autowired
    UserRepository userRepository;

    @Autowired
    UserService userService;

    @RequestMapping("/login")
    public ResponseEntity<Map> login(Integer userId, String password) {
        Map map = new HashMap<>();
        SysUser sysUser = userRepository.findByUserIdAndPassword(userId, password);
        map.put("code", "200");
        map.put("message", "success");
        map.put("user", sysUser);
        return new ResponseEntity<Map>(map, HttpStatus.OK);
    }

    @RequestMapping("/login2")
    public ResponseEntity<Map> login2(Integer userId, String password) {
        Map map = new HashMap<>();
        SysUser sysUser = userService.findUserOrNot(userId, password);
        map.put("code", "200");
        map.put("message", "success");
        map.put("user", sysUser);
        return new ResponseEntity<Map>(map, HttpStatus.OK);
    }

}

  • 1 直接访问repository
    http://localhost:18888/define/login?userId=1&password=123
    
  • 2 访问service
    http://localhost:18888/define/login2?userId=1&password=123
    
8.学习链接

Spring Data Jpa的使用:https://www.jianshu.com/p/c23c82a8fcfc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

anjushi_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值