• spring boot + mysql8 集成jpa实现增删改(包括分页)


    spring boot:2.7.2

    提供gradle、maven两种可选方案

    gradle build.gradle

    dependencies {
    	compileOnly 'org.projectlombok:lombok'
    	annotationProcessor 'org.projectlombok:lombok'
    	implementation 'org.springframework.boot:spring-boot-starter-web'
    	runtimeOnly 'mysql:mysql-connector-java'
    	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    maven pom.xml

    <dependencies>
            
            <dependency>
                <groupId>org.projectlombokgroupId>
                <artifactId>lombokartifactId>
                <scope>providedscope>
            dependency>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
            
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
                <scope>runtimescope>
            dependency>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-data-jpaartifactId>
            dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    application.yml

    server:
      port: 83
    
    spring:
      jackson:
        #日期转换
        date-format: "yyyy-dd-MM HH:mm:ss"
      jpa:
        #打印sql
        show-sql: true
        #取消控制台警告信息
        open-in-view: false
        hibernate:
          #自动生成数据库表
          ddl-auto: update
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/jpa?serverTimezone=Asia/Shanghai
        username: root
        password: 123456
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    JpaApplication.java

    启动类

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
    
    @EnableJpaAuditing //jpa自动创建时间需要的注解
    @SpringBootApplication
    public class JpaApplication {
    	public static void main(String[] args) {
    		SpringApplication.run(JpaApplication.class, args);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    entity/User.java

    lombok的好处就是不用写Getter、Setter、重写equals、hashCode方法,还可以使用@Slf4j打印日志

    import lombok.Data;
    import org.springframework.data.annotation.CreatedDate;
    import org.springframework.data.annotation.LastModifiedDate;
    import org.springframework.data.jpa.domain.support.AuditingEntityListener;
    
    import javax.persistence.*;
    import java.util.Date;
    
    /**
     * 用户
     */
    @Entity //jpa实体类注解
    @Table(name = "user") //jpa数据库表名,如果和实体类一致,可以不配置
    @EntityListeners(AuditingEntityListener.class) //jpa自动创建时间需要的注解
    @Data //lombok自动生成Getter、Setter、重写equals、hashCode方法
    public class User{
    
        /**
         * ID
         */
        @Id //主键ID
        @GeneratedValue(strategy = GenerationType.IDENTITY) //主键ID生成规则IDENTITY自增主键
        private Long id;
    
        /**
         * 姓名
         */
        @Column(name = "name",nullable = false,unique = true,length = 20) //数据库对应的名称(如果和数据库名称一致,可以不配置),不允许为null,唯一约束,长度20
        private String name;
    
        /**
         * 出生日期
         */
        @Temporal(TemporalType.DATE) //DATE保存到数据库为yyyy-MM-dd,TIME:HH:mm:ss,TIMESTAMP:yyyy-MM-dd HH:mm:ss
        private Date birthday;
    
        /**
         * 创建时间
         */
        @CreatedDate //自动创建时间
        private Date createTime;
    
        /**
         * 修改时间
         */
        @LastModifiedDate //自动修改时间
        private Date modifyTime;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    repository/UserRepository.java

    类似dao(mapper),但jpa这里它叫什么,建议我们命名时就叫什么。

    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    /**
     * JpaRepository<实体类 , ID>,类似dao(mapper)
     */
    @Repository
    public interface UserRepository extends JpaRepository<User, Long> {}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    service/UserService.java

    service层,实现增删改查没什么好说的,都一样

    import lombok.extern.slf4j.Slf4j;
    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.PageRequest;
    import org.springframework.data.domain.Pageable;
    import org.springframework.data.domain.Sort;
    import org.springframework.stereotype.Service;
    
    import javax.annotation.Resource;
    import java.util.List;
    import java.util.Optional;
    
    @Slf4j
    @Service
    public class UserService {
    
        @Resource
        private UserRepository userRepository;
    
        /**
         * 通过ID查询一条用户记录
         * @param id ID
         * @return
         */
        public Optional<User> findById(Long id){
            Optional<User> user = userRepository.findById(id);
            log.info("通过ID查询一条用户记录:{}",user);
            return user;
        }
    
        /**
         * 查询所有用户(不分页)
         * @return
         */
        public List<User> findAll(){
            List<User> userList = userRepository.findAll();
            log.info("查询所有用户(不分页):{}",userList);
            return userList;
        }
    
        /**
         * 查询所有用户(分页)
         * @param pageNum 起始页
         * @param pageSize 每页多少条记录
         * @return
         */
        public Page<User> findAllByPage(Integer pageNum, Integer pageSize){
            //按自增ID倒叙排序
            Sort sort = Sort.by(Sort.Direction.DESC,"id");
            //分页
            Pageable pageable = PageRequest.of(pageNum,pageSize,sort);
            Page<User> userPage = userRepository.findAll(pageable);
            log.info("查询所有用户(分页):{}",userPage);
            return userPage;
        }
    
        /**
         * 新增/修改一条用户记录
         * @param user 用户对象
         */
        public void save(User user){
            log.info("新增/修改一条用户记录:{}",userRepository.save(user));
        }
    
        /**
         * 通过ID删除一条用户记录
         * @param id ID
         */
        public void deleteById(Long id){
            log.info("通过ID删除一条用户记录:{}",id);
            userRepository.deleteById(id);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73

    controller/UserController.java

    controller层也没什么好说的都一样

    import org.springframework.data.domain.Page;
    import org.springframework.web.bind.annotation.*;
    
    import javax.annotation.Resource;
    import java.util.List;
    import java.util.Optional;
    
    /**
     * 用户接口
     */
    @RestController
    @RequestMapping("user")
    public class UserController {
    
        @Resource
        private UserService userService;
    
        /**
         * 通过ID查询一条用户记录
         * @param id ID
         * @return
         */
        @GetMapping("findById")
        public Optional<User> findById(@RequestParam Long id){
            return userService.findById(id);
        }
    
        /**
         * 查询所有用户(不分页)
         * @return
         */
        @GetMapping("findAll")
        public List<User> findAll(){
            return userService.findAll();
        }
    
        /**
         * 查询所有用户(分页)
         * @param pageNum 起始页
         * @param pageSize 每页多少条记录
         * @return
         */
        @GetMapping("findAllByPage")
        public Page<User> findAllByPage(@RequestParam(defaultValue = "0") Integer pageNum,@RequestParam(defaultValue = "10") Integer pageSize){
            return userService.findAllByPage(pageNum,pageSize);
        }
    
        /**
         * 新增/修改用户数据
         * @param user 用户对象
         */
        @PostMapping("save")
        public void save(@RequestBody User user){
            userService.save(user);
        }
    
        /**
         * 通过ID删除一条记录
         * @param id ID
         */
        @PostMapping()
        public void deleteById(@RequestParam Long id){
            userService.deleteById(id);
        }
        
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66

    mysql创建jpa数据库即可,不用创建表

    建议
    在这里插入图片描述

    启动springboot项目jpa会自动帮我们创建好user表,然后用postman调用controller层的接口即可。写的很详细,这里就不赘述了。

    项目结构

    在这里插入图片描述

  • 相关阅读:
    Spring学习笔记(三十七)——Flyway 数据库版本控制
    501. 二叉搜索树中的众数
    java培训技术SpringMVC视图解析器
    MS COCO数据集的评价标准以及不同指标的选择推荐(AP、mAP、MS COCO、AR、@、0.5、0.75、1、目标检测、评价指标)
    Windows7安装SSH客户端的解决方案
    音视频编解码 入职系列-2
    Mysql常用sql语句之修改表名、删除表、获取表信息、删除指定日期的表记录
    前端枚举enum的应用(Element)封装
    美国网站服务器SSL证书介绍
    dotnet 为大型应用接入 ApplicationStartupManager 启动流程框架
  • 原文地址:https://blog.csdn.net/weixin_43933728/article/details/126122033