searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Spring Boot整合JPA框架入门

2023-08-25 08:24:15
7
0

       在现代软件开发中,数据持久化是一个不可或缺的部分。Spring Boot作为一个快速开发的框架,提供了强大的工具来简化应用的构建过程。本文将介绍如何使用Spring Boot整合JPA框架,实现简单而高效的数据持久化操作。

一、JPA框架简述

       Java Persistence API(JPA)是一种Java EE(现在的 Jakarta EE)规范,用于将Java对象映射到关系数据库中。它提供了一种标准的方式来处理对象与数据库之间的映射,使得开发人员能够更便捷地进行数据库操作,无需直接编写SQL语句。

二、Spring Boot整合JPA实践

      (1)创建Spring Boot项目

       首先创建一个Spring Boot项目。这里可以使用Spring Initializr来快速生成一个基本的Spring Boot项目,选择合适的依赖,包括"Spring Web"和"Spring Data JPA"。这里给出本文的依赖信息以供参考(具体版本可根据需要选择)。

         <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>

     (2)定义实体类

       在项目中,我们需要定义实体类,这些类将映射到数据库表。假设我们创建一个简单的实体类表示用户信息。

@Data
@ToString
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String name;
    private Integer age;
    public User() {
    }
    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
    public User(Integer id, Integer age) {
        this.id = id;
        this.age = age;
    }
}

        在上面的代码中,@Entity注解表示这是一个JPA实体类,@Id和@GeneratedValue用于定义主键以及主键生成策略。

(3)配置数据库连接

       在application.properties(或application.yml)文件中,配置数据库连接信息。

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=******
spring.jpa.database=MYSQL
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none

       在上面的配置中,我们指定了数据库的连接URL、用户名、密码等信息。

  (4)创建JPA Repository

       接下来创建一个JPA Repository接口来管理实体类的持久化操作。在一个新建的接口中,继承自JpaRepository,传入实体类和主键类型。

public interface UserRepository extends JpaRepository<User,Integer> {
    User findByNameIs(String name);
    List<User> findByAgeIs(Integer age);
    @Modifying
    @Transactional(rollbackFor = Exception.class)
    @Query("UPDATE User SET age = :age WHERE name = :name")
    void updateAgeByName(@Param("name") String name, @Param("age") Integer age);
}

       通过继承JpaRepository,我们就可以获得很多基本的数据库操作方法,例如保存、查询、删除等。

     (5)编写业务逻辑

      创建一个ServiceImpl类来处理业务逻辑,可以在这里调用Repository中的方法。

@Service
@Slf4j
public class UserServiceImpl implements UserService {
    @Autowired
    private UserRepository userRepository;
    @Override
    public User findById(Integer id) {
        return this.userRepository.findById(id).orElse(null);
    }
    @Override
    public User findByName(String name) {
        return this.userRepository.findByNameIs(name);
    }

    @Override
    public List<User> listByAge(Integer age) {
        return this.userRepository.findByAgeIs(age);
    }
    @Override
    public void save(User user) {
        this.userRepository.saveAndFlush(user);
    }
    @Override
    public void save(List<User> users) {
        this.userRepository.saveAll(users);
        this.userRepository.flush();
    }
    @Override
    public void updateAgeByName(String name, Integer age) {
        this.userRepository.updateAgeByName(name,age);
    }
    @Override
    public void deleteById(Integer id) {
        this.userRepository.deleteById(id);
    }
}

         给定的示例代码提供了常用的对用户数据的增、删、改、查操作。

       (6)创建控制器

         最后,创建一个Controller类来处理HTTP请求,并调用Service中的方法。

@RestController
@RequestMapping("/api/users")
public class UserController {
    @Autowired
    private UserService userService;
    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Integer id) {
        userService.deleteById(id);
    }
    @GetMapping("/{id}")
    public User findById(Integer id) {
        return userService.findById(id);
    }
    @GetMapping("/{name}")
    public User findByName(String name) {
        return userService.findByName(name);
    }
    @GetMapping("/{age}")
    public List<User> listByAge(Integer age) {
        return userService.listByAge(age);
    }
    @PostMapping
    public void createUser(@RequestBody User user) {
        userService.save(user);
    }
    @GetMapping()
    public void updateAgeByName(@PathVariable String name, @PathVariable Integer age) {
        userService.updateAgeByName(name,age);
    }
    @GetMapping("/{id}")
    public void deleteById(Integer id) {
        userService.deleteById(id);
    }
}

         这里给出的Controller代码仅作为调用Service的示例,实际业务中需根据实际需要进行调整。

        (7)运行应用程序

         最后运行Spring Boot应用程序,并通过浏览器或API工具(如Postman)访问相应的接口,即可完成对数据库的操作。

三、小结

         本文将Spring Boot和JPA框架整合,实现了简单的数据持久化操作。Spring Boot的自动配置以及JPA的便捷性,大大降低了开发人员的工作量,使得我们能够更专注于业务逻辑的实现。

0条评论
0 / 1000
l****n
4文章数
0粉丝数
l****n
4 文章 | 0 粉丝
原创

Spring Boot整合JPA框架入门

2023-08-25 08:24:15
7
0

       在现代软件开发中,数据持久化是一个不可或缺的部分。Spring Boot作为一个快速开发的框架,提供了强大的工具来简化应用的构建过程。本文将介绍如何使用Spring Boot整合JPA框架,实现简单而高效的数据持久化操作。

一、JPA框架简述

       Java Persistence API(JPA)是一种Java EE(现在的 Jakarta EE)规范,用于将Java对象映射到关系数据库中。它提供了一种标准的方式来处理对象与数据库之间的映射,使得开发人员能够更便捷地进行数据库操作,无需直接编写SQL语句。

二、Spring Boot整合JPA实践

      (1)创建Spring Boot项目

       首先创建一个Spring Boot项目。这里可以使用Spring Initializr来快速生成一个基本的Spring Boot项目,选择合适的依赖,包括"Spring Web"和"Spring Data JPA"。这里给出本文的依赖信息以供参考(具体版本可根据需要选择)。

         <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>

     (2)定义实体类

       在项目中,我们需要定义实体类,这些类将映射到数据库表。假设我们创建一个简单的实体类表示用户信息。

@Data
@ToString
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String name;
    private Integer age;
    public User() {
    }
    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
    public User(Integer id, Integer age) {
        this.id = id;
        this.age = age;
    }
}

        在上面的代码中,@Entity注解表示这是一个JPA实体类,@Id和@GeneratedValue用于定义主键以及主键生成策略。

(3)配置数据库连接

       在application.properties(或application.yml)文件中,配置数据库连接信息。

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=******
spring.jpa.database=MYSQL
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none

       在上面的配置中,我们指定了数据库的连接URL、用户名、密码等信息。

  (4)创建JPA Repository

       接下来创建一个JPA Repository接口来管理实体类的持久化操作。在一个新建的接口中,继承自JpaRepository,传入实体类和主键类型。

public interface UserRepository extends JpaRepository<User,Integer> {
    User findByNameIs(String name);
    List<User> findByAgeIs(Integer age);
    @Modifying
    @Transactional(rollbackFor = Exception.class)
    @Query("UPDATE User SET age = :age WHERE name = :name")
    void updateAgeByName(@Param("name") String name, @Param("age") Integer age);
}

       通过继承JpaRepository,我们就可以获得很多基本的数据库操作方法,例如保存、查询、删除等。

     (5)编写业务逻辑

      创建一个ServiceImpl类来处理业务逻辑,可以在这里调用Repository中的方法。

@Service
@Slf4j
public class UserServiceImpl implements UserService {
    @Autowired
    private UserRepository userRepository;
    @Override
    public User findById(Integer id) {
        return this.userRepository.findById(id).orElse(null);
    }
    @Override
    public User findByName(String name) {
        return this.userRepository.findByNameIs(name);
    }

    @Override
    public List<User> listByAge(Integer age) {
        return this.userRepository.findByAgeIs(age);
    }
    @Override
    public void save(User user) {
        this.userRepository.saveAndFlush(user);
    }
    @Override
    public void save(List<User> users) {
        this.userRepository.saveAll(users);
        this.userRepository.flush();
    }
    @Override
    public void updateAgeByName(String name, Integer age) {
        this.userRepository.updateAgeByName(name,age);
    }
    @Override
    public void deleteById(Integer id) {
        this.userRepository.deleteById(id);
    }
}

         给定的示例代码提供了常用的对用户数据的增、删、改、查操作。

       (6)创建控制器

         最后,创建一个Controller类来处理HTTP请求,并调用Service中的方法。

@RestController
@RequestMapping("/api/users")
public class UserController {
    @Autowired
    private UserService userService;
    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Integer id) {
        userService.deleteById(id);
    }
    @GetMapping("/{id}")
    public User findById(Integer id) {
        return userService.findById(id);
    }
    @GetMapping("/{name}")
    public User findByName(String name) {
        return userService.findByName(name);
    }
    @GetMapping("/{age}")
    public List<User> listByAge(Integer age) {
        return userService.listByAge(age);
    }
    @PostMapping
    public void createUser(@RequestBody User user) {
        userService.save(user);
    }
    @GetMapping()
    public void updateAgeByName(@PathVariable String name, @PathVariable Integer age) {
        userService.updateAgeByName(name,age);
    }
    @GetMapping("/{id}")
    public void deleteById(Integer id) {
        userService.deleteById(id);
    }
}

         这里给出的Controller代码仅作为调用Service的示例,实际业务中需根据实际需要进行调整。

        (7)运行应用程序

         最后运行Spring Boot应用程序,并通过浏览器或API工具(如Postman)访问相应的接口,即可完成对数据库的操作。

三、小结

         本文将Spring Boot和JPA框架整合,实现了简单的数据持久化操作。Spring Boot的自动配置以及JPA的便捷性,大大降低了开发人员的工作量,使得我们能够更专注于业务逻辑的实现。

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
1
1