zoukankan      html  css  js  c++  java
  • 带你搭一个SpringBoot+SpringData JPA的环境

    前言

    只有光头才能变强。

    文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y

    不知道大家对SpringBoot和Spring Data JPA了解多少,如果你已经学过Spring和Hibernate的话,那么SpringBoot和SpringData JPA可以分分钟上手的。SpringBoot和SpringData JPA的好处我就不说了,当时我学习的时候也粗略做过笔记,有兴趣的同学可以去看看

    其实我在学完SpringBoot和SpringData JPA了之后,写过一个小Demo,但一直没发出来而已(懒)。最近要写毕业设计的一个管理模块(CRUD),并且我又没写过相关SpringBoot和SpringData JPA的搭建教程,所以就诞生了这篇文章了。

    一、从零搭建环境

    本次我使用的是IDEA编辑器来搭建SpringBoot和Spring Data JPA环境

    首先,我们在IDEA新建项目的时候,选择Spring Initializr,然后next就行了。

    选择Spring Initializr

    然后填写一些项目的资料(其实这些资料也无关紧要,自己看着填就好了),随后点击next

    填写一些项目的资料

    随后在勾选的时候,我就随手勾选了个LomBok(其他的没勾选,反正后面我们可以在pom文件下配置嘛)。可以看出,本次SpringBoot的版本为2.1.3

    • :如果不太了解LomBok的同学,建议去搜一下。这是一个非常好用的插件,有了它我们可以不用写繁琐的set/get方法。记得:使用lomBok还需要在IDEA下安装插件

    勾选了个LomBok

    然后IDEA就会帮我们创建出Maven管理下SpringBoot的项目啦,此时一般我们会指定自己的下载好的Maven,重写它的settings.xml文件

    配置maven

    然后Maven就一直在下载相关的依赖啊,必要的插件啊(我等了差不多10分钟吧,这个时间可以去倒杯Java喝喝.haha),等Maven下载完之后,我们的项目就成了下面那个样子了(:原生的是application.properties文件的,我改了一下后缀,我比较喜欢yml格式的):

    已经是一个SpringBoot项目了

    二、完善pom文件

    现在pom文件只有SpringBoot和LomBok的依赖,想要完成CURD的功能,我们需要用到Spring Web模块、Spring Data JPA以及MySQL驱动依赖,所以我们得在pom文件下加入这些依赖:

    
    <!--Web必要的-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!--spring data jpa-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    
    <!-- MySQL的java驅動 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    
    

    pom文件的完整依赖图如下:

    pom文件的完整依赖图

    三、配置yml文件

    既然我们用到了SpringData JPA和MySQL,我们得为其进行配置最基础的信息。比如说数据库的用户名和密码,相对应的库,以及SpringData JAP的策略。

    
    #服务端容器的配置
    server:
      port: 8887
    
    
    #数据库配置
    spring:
      datasource:
        username: 填写自己的
        password: 填写自己的
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://填写自己的机器:3306/填写自己的库?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
        # JPA配置
      jpa:
        hibernate:
          ddl-auto: update
        show-sql: true
    
        # formatSQL得这样写
        properties:
          hibernate:
            format_sql: true
    

    yml文件完整图如下:

    yml文件完整图

    数据库的信息填写成自己的就行了。

    四、写一个User实体

    我毕业设计其中就有对用户的管理,我们用户实体设计如下(大家的当然可以跟我的不一样了,我这只是样例):

    package com.zhongfucheng.example.demo.domain;
    
    import lombok.Data;
    import org.hibernate.annotations.GenericGenerator;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import java.io.Serializable;
    import java.util.Date;
    
    /**
     * 存储用户的信息
     *
     * @author ozc
     * @version 1.0
     */
    @Entity // jpa的注解,需要加
    @Table(name = "table_user") // 指定数据库的表名
    @Data // lombok 
    public class User implements Serializable {
        @Id
        @GeneratedValue(generator = "system-uuid")
        @GenericGenerator(name = "system-uuid", strategy = "uuid")
        private String userId;
    
        private String userNickname;
    
        private String userPassword;
    
        private String userEmail;
    
        private Integer actiState;
    
        //激活成功与激活失败常量
        public static final int ACTIVATION_SUCCESSFUL = 1;
        public static final int ACTIVATION_UNSUCCESSFUL = 0;
    
        private String actiCode;
    
        private Date tokenExptime;
    
    }
    

    再补充一句:因为我们有了LomBok的Data注解,并且在IDEA已经下好的LomBok的插件,所以我们可以不用写set、get方法。

    User实体图如下:

    User实体图

    五、写一个UserRepository

    UserRepository是dao层的东西了,相当于UserDao/UserMapper,只是叫法不一样而已。比如在Struts2喜欢将名字取成xxxAction,而在SpringMVC喜欢将名字取成xxxxController

    一般地,我们将UserRepository继承JpaRepository就可以有对应的增删改查方法:

    
    import com.zhongfucheng.example.demo.domain.User;
    import org.springframework.data.jpa.repository.JpaRepository;
    
    
    /**
     * UserDao  操作数据库
     * @author ozc
     * @version 1.0
     */
    public interface UserRepository extends JpaRepository<User, String> {
    
    }
    
    

    UserRepository图如下:

    UserRepository图

    ok,我们的UserRepository已经写好了,至于为啥我们传入<User, String>,点进去看一下就明白了:

    T表示为我们实体的类型,ID表示为我们主键的类型

    六、写一个UserService

    我们就查user表所有的记录出来就好了,代码如下:

    
    // 接口
    public interface UserService {
    
        List<User> getAllUser();
    }
    
    // 实现
    @Service
    public class UserServiceImpl implements UserService {
    
        @Autowired
        private UserRepository userRepository;
    
        @Override
        public List<User> getAllUser() {
            return userRepository.findAll();
        }
    }
    

    UserService图如下:

    UserService图

    为啥会有findAll()方法?因为我们的UserRepository 继承了JpaRepository

    七、写一个UserController

    UserController调用一下service的方法,看是否能返回成功,如果能返回成功,那说明我们的环境已经是ok的了。

    UserController代码如下:

    
    @RestController
    public class UserController {
    
        @Autowired
        private UserService userService;
    
        /**
         * 得到所有用户
         */
        @GetMapping(value = "/user", produces = {"application/json;charset=UTF-8"})
        public void  getAllUser () {
    
            List<User> allUser = userService.getAllUser();
    
            for (User user : allUser) {
                System.out.println(user);
            }
        }
    }
    

    Controller代码图如下:

    Controller代码图

    八、测试一下看是否能返回数据

    进入DemoApplication,右键,启动我们的SpringBoot项目:

    启动SpringBoot项目

    在浏览器输入我们的url:http://localhost:8887/user。然后我们从后台查看,打印出查询的SQL语句,已经后台已经打印表已有的记录。

    打印出查询的SQL语句和已有的记录

    最后

    我们可以发现使用SpringBoot+SpringData JPA的方式,不需要很多的配置,不需要很多的代码就可以从数据库中查找出数据了。非常适合我们做一些简答的测试和小功能。如果对例子有疑问的同学应该是对SpringData JPA不太熟悉,建议去找找相关的教程看一下,相信你可以很快就入门了。

    乐于输出干货的Java技术公众号:Java3y。公众号内有200多篇原创技术文章、海量视频资源、精美脑图,不妨来关注一下!

    帅的人都关注了

    觉得我的文章写得不错,不妨点一下

  • 相关阅读:
    浅谈python中selenium库调动webdriver驱动浏览器的实现原理
    浅谈python面向对象编程和面向过程编程的区别
    python中可变与不可变类型的全局变量
    冒泡排序和sort,sorted排序函数
    浅谈python之利用pandas和openpyxl读取excel数据
    configparser读取配置文件时的相对路径问题
    关于网站登录后的页面操作所携带的不同cookie值
    【转】Cookie和Session和Cache
    python输出九九乘法表
    win10系统使用小技巧【转】
  • 原文地址:https://www.cnblogs.com/Java3y/p/10583162.html
Copyright © 2011-2022 走看看