SpringBoot2使用Spring Data-JPA实现增删改查

SpringBoot2使用Spring Data-JPA实现增删改查

pom.xml配置

    <dependencies>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--jpa-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!--thymeleaf-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </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>

application.yaml

spring:
  datasource:
    password: root
    username: root
    url: jdbc:mysql://localhost:3306/lxs?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver

  jpa:
    database: mysql
    show-sql: true #显示sql语句
    hibernate:
      ddl-auto: update

编写实体类

package com.ysh.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;

/**
 * (User)实体类
 *
 * @author makejava
 * @since 2021-01-12 18:51:35
 */
@Entity(name = "user")
@Data
public class User  {
    private static final long serialVersionUID = 632582889317911243L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String name;

    private Integer sex;

    private Integer age;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
}

@Data 自动封装属性
@Entity注解用于生成数据库表,
@Table用于指定表的名称,
@GeneratedValue用于根据规则生成主键,
@Id表示这是一个主键。(还有一些标签可以自己去看一下springdata-jpa的官方文档)

Spring Data Jpa 可以根据实体类 在数据库里自动生成表(注意:yml数据里面首先需要一个数据库,然后必须连接)

编写Dao层接口

DAO的接口:

  • Repository (空接口)
  • CrudRepository (增删改查)
  • PagingAndSortingRepository (分页和排序)
  • JpaRepository (扩展增删改查、批量操作)
  • JpaSpecificationExecutor:用来做负责查询的接口
  • Specification:是Spring Data JPA提供的一个查询规范,要做复杂的查询,类似hibernate QBC查询
  • JpaRepository继承PagingAndSortingRepository,CrudRepository:
  • CrudRepository 提供 save、 delete、 deteleAll、 findAll、 findOne、 count等方法
  • PagingAndSortingRepository提供排序及分页findAll(Sort) (基于排序的查询)、findAll(Pageable)( 基于分页的查询)
package com.ysh.dao;

import com.ysh.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.CrudRepository;

import java.util.List;

/**
 * (User)表数据库访问层
 *
 * @author makejava
 * @since 2021-01-12 18:51:37
 */
//第一个泛型为实体类,第二个泛型是主键类型
public interface UserDao extends JpaRepository<User,Integer> {

}

编写Service层

package com.ysh.service;


import com.ysh.entity.User;

import java.util.List;

/**
 * (User)表服务接口
 *
 * @author makejava
 * @since 2021-01-12 18:51:38
 */
public interface UserService {


    List<User> findAll();

    void add(User user);

    void delete(Integer id);

    User findById(Integer id);

    void update(User user);
}

Service实现类

package com.ysh.service.impl;

import com.ysh.dao.UserDao;
import com.ysh.entity.User;
import com.ysh.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * (User)表服务实现类
 *
 * @author makejava
 * @since 2021-01-12 18:51:38
 */
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;

    @Override
    public void delete(Integer id) {
        userDao.deleteById(id);
    }

    @Override
    public void add(User user) {
        userDao.save(user);
    }

    @Override
    public List<User> findAll() {
        return userDao.findAll();
    }

    @Override
    public User findById(Integer id) {
        User user = userDao.findById(id).get();
        return user;
    }

    @Override
    public void update(User user) {
        userDao.save(user);
    }
}

编写Controller层

package com.ysh.controller;

import com.ysh.entity.User;
import com.ysh.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * (User)表控制层
 *
 * @author makejava
 * @since 2021-01-12 18:51:39
 */
@Controller
@Slf4j
public class UserController {
    /**
     * 服务对象
     */
    @Autowired
    private UserService userService;

    @RequestMapping("/toList")
    public String toList(Model model){
        try {
            List<User> list = userService.findAll();
            model.addAttribute("users",list);
        } catch (Exception e) {
            e.printStackTrace();
            log.error(e.getMessage());
        }
        return "list";
    }
    @PostMapping("/add")
    public String add(User user){
        try {
            userService.add(user);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "redirect:/toList";
    }
    @GetMapping("/delete")
    public String delete(Integer id){
        try {
            userService.delete(id);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "redirect:/toList";
    }
    @GetMapping("/findById")
    public String findById(Integer id,Model model){
        try {
            User user = userService.findById(id);
            model.addAttribute("user",user);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "update";
    }
    @PostMapping("/update")
    public String update(User user){
        try {
            userService.update(user);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "redirect:/toList";
    }
    @GetMapping("/toAdd")
    public String toAdd(){
        return "add";
    }
}
我等的船还不来
原文地址:https://www.cnblogs.com/lxs1204/p/14274294.html