Spring JPA Ⅰ 项目新建

277 阅读2分钟

一、new project 选择 Spring Initializr Next

截图.PNG

二、自定义项目名(我这边是sbjdemo)

截图1.PNG

三、选择需要依赖的包(Lombok(本人喜欢用,可以不加)、Spring Web、JDBC API、Spring Data JPA、MySQL Driver)

截图2.PNG

四、在 application.yml 添加配置

截图3.PNG

spring:
    datasource:    
        driver-class-name: com.mysql.cj.jdbc.Driver    #数据库驱动
        url: jdbc:mysql://localhost/sbjdemo    #数据库地址
        username: root    #数据账号
        password: 123456.Password   #数据库密码
    jpa:
        hibernate:
            ddl-auto: update    #是否更新数据库(不建议开启,否则对数据库有影响)
        show-sql: true    #是否展示sql语句
        properties:
          hibernate:
            format_sql: true  #格式化sql语句
logging:
  level:
    org.hibernate.type.descriptor.sql.BasicBinder: trace  #展示sql的具体参数
server:
    port: 7777   #自己做测试的请求端口

五、新建 pojo、dao、service、control 文件

1. pojo

import lombok.Data;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
@Data
public class User {

    @Id
    private int id;

    private String name;

    private int age;

}

2. dao

package com.example.sbjdemo.dao;

import com.example.sbjdemo.pojo.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserDao extends JpaRepository<User, Integer> {
}

3. service

package com.example.sbjdemo.service;

import com.example.sbjdemo.dao.UserDao;
import com.example.sbjdemo.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserDao userDao;

    public User save(User user) {
        return userDao.save(user);
    }

}

4. control

package com.example.sbjdemo.control;

import com.example.sbjdemo.pojo.User;
import com.example.sbjdemo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserControl {

    @Autowired
    private UserService userService;

    @GetMapping("/save")
    public User save(Integer id, String name, Integer age) {
        User user = new User();
        user.setId(id);
        user.setName(name);
        user.setAge(age);
        return userService.save(user);
    }

}

六、执行 SmjdemoApplication 类启动项目

如果出现以下错误

Error:(3, 32) java: 无法访问org.springframework.boot.SpringApplication
  错误的类文件: /D:/env/repository/org/springframework/boot/spring-boot/3.0.3/spring-boot-3.0.3.jar!/org/springframework/boot/SpringApplication.class
    类文件具有错误的版本 61.0, 应为 52.0
    请删除该文件或确保该文件位于正确的类路径子目录中。

报错信息里所说的类文件版本指的是java class file version,java类文件版本
该版本号与jdk版本号存在对应关系,61.0对应jdk17,52.0对应jdk8
解决办法:此处使用springboot版本为3.0.0 降低为2.5.6(其他2.0的版本也行)

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.10</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

执行成功后,我们发现,数据库已经自动生成了一个user的表

截图4.PNG

这是因为我们的yml配置起了作用,如果这个不配的话,需要自己手动创建表数据;一般我们在环境上是不建议这样使用的,因为稍微改一下类代码就会影响整个数据库,风险较大。

jpa:
  hibernate:
    ddl-auto: update    #是否更新数据库(不建议开启,否则对数据库有影响)

七、在浏览器中输入地址+端口+接口,测试成功

http://localhost:7777/save?id=1&name=lili&age=18

截图5.PNG
截图6.PNG

我们这运行器中可以发现有了一串sql
Hibernate: select user0_.id as id1_0_0_, user0_.age as age2_0_0_, user0_.name as name3_0_0_ from user user0_ where user0_.id=?

这是因为我在yml中配置了

spring:
    jpa:
        show-sql: true    #是否展示sql语句

pom.xml完整内容

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.10</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>sbjdemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>sbjdemo</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-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</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>
            <configuration>
                <excludes>
                    <exclude>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                    </exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>