zoukankan      html  css  js  c++  java
  • 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";
        }
    }
    
    我等的船还不来
  • 相关阅读:
    c++中 . 和 -> 的区别是什么?
    codeblocks中一个简单的程序的创建。
    将牛客中的代码在codeblocks中进行实现
    (全代码)输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
    解决You are using pip version 10.0.1, however version 18.1 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command.
    mysql 表复制(表备份)
    Scrapy 抓取股票行情
    去哪儿网数据爬取
    用API爬取天气预报数据
    爬虫防封IP
  • 原文地址:https://www.cnblogs.com/lxs1204/p/14274294.html
Copyright © 2011-2022 走看看