基于vscode创建SpringBoot项目,连接postgresql数据库

1、Vue下载安装步骤的详细教程(亲测有效) 1_水w的博客-CSDN博客

2、Vue下载安装步骤的详细教程(亲测有效) 2 安装与创建默认项目_水w的博客-CSDN博客

3、基于vscode开发vue项目的详细步骤教程_水w的博客-CSDN博客

4、基于vscode开发vue项目的详细步骤教程 2 第三方图标库FontAwesome_水w的博客-CSDN博客

目录

一、创建一个SpringBoot工程:通过IDEA的SpringInitializr创建

二、安装并创建PostgreSQL数据库

1 安装下载PostgreSQL

2 创建数据库,建表,插入数据

三、配置新创建的SpringBoot工程

0 启动项目,出现Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.

1 编写application.properties,启动项目

解决报错:java: 错误: 无效的源发行版:17

解决报错:新建springboot项目时包导不进来org.springframework.boot:spring-boot-starter-parent:pom:2.7.10-SNAPSHOT failed to transfer from http://maven.aliyun.com/nexus/content/groups/public/ during a previous attempt.

四、Mybatis Generator工具

1、引入依赖

2、配置generator-config.xml生成规则

3、自动生成器

解决报错:不支援 10 验证类型。请核对您已经组态 pg_hba.conf 文件包含客户端的IP位址或网路区段,以及驱动程序所支援的验证架构模式已被支援。

4、测试

 问题:为什么@Autowired 和private UserDOMapper userDOMapper有错但还能执行


一、创建一个SpringBoot工程:通过IDEA的SpringInitializr创建

左上角 File-New-Project-Spring Initializr,名称啥的自己设一下

基于vscode创建SpringBoot项目,连接postgresql数据库_第1张图片

Next->选择需要的依赖包,此处暂时是选择了Spring Web相关、mybatis相关以及postgresql相关包。

 基于vscode创建SpringBoot项目,连接postgresql数据库_第2张图片

创建之后,项目建成之后目录结构是这样的:

基于vscode创建SpringBoot项目,连接postgresql数据库_第3张图片

这里会有一个叫xxxApplication的启动类,然后pom.xml里会有刚刚设置过的相关依赖包,不需要自己再引入,同时resources下会有一个application.properties,此时它是空的。

到这里一个SpringBoot项目就这么简单地创建好了,非常方便。

当然现在还是不能启动的,这个后面再说。

二、安装并创建PostgreSQL数据库

既然跟MySQL一样,同为关系型数据库,那么什么时候用MySQL,什么时候用PostgreSQL自然是我们需要去了解的。所以下面简单介绍一下,PostgreSQL相比于MySQL来说,都有哪些优势,如果你有这些需求,那么选择PostgreSQL就优于MySQL,反之则还是选择MySQL更佳:

  • 支持存储一些特殊的数据类型,比如:array、json、jsonb
  • 对地理信息的存储与处理有更好的支持,所以它可以成为一个空间数据库,更好的管理数据测量和几何拓扑分析
  • 可以快速构建REST API,通过PostgREST可以方便的为任何PostgreSQL数据库提供RESTful API的服务
  • 支持树状结构,可以更方便的处理具备此类特性的数据存储
  • 外部数据源支持,可以把MySQL、Oracle、CSV、Hadoop等当成自己数据库中的表来进行查询
  • 对索引的支持更强,PostgreSQL支持 B-树、哈希、R-树和 Gist 索引。而MySQL取决于存储引擎。MyISAM:BTREE,InnoDB:BTREE。
  • 事务隔离更好,MySQL 的事务隔离级别repeatable read并不能阻止常见的并发更新,得加锁才可以,但悲观锁会影响性能,手动实现乐观锁又复杂。而 PostgreSQL 的列里有隐藏的乐观锁 version 字段,默认的 repeatable read 级别就能保证并发更新的正确性,并且又有乐观锁的性能。
  • 时间精度更高,可以精确到秒以下
  • 字符支持更好,MySQL里需要utf8mb4才能显示emoji,PostgreSQL没这个坑
  • 存储方式支持更大的数据量,PostgreSQL主表采用堆表存放,MySQL采用索引组织表,能够支持比MySQL更大的数据量。
  • 序列支持更好,MySQL不支持多个表从同一个序列中取id,而PostgreSQL可以
  • 增加列更简单,MySQL表增加列,基本上是重建表和索引,会花很长时间。PostgreSQL表增加列,只是在数据字典中增加表定义,不会重建表。

1 安装下载PostgreSQL

如果有需要,请跳转到Windows下载安装 PostgreSQL和PostGIS工具,并解决The pgAdmin 4 server could not be contacted:_postgis下载安装_水w的博客-CSDN博客

安装postgresql后,使用自带的pgAdmin 4 访问数据库。 

2 创建数据库,建表,插入数据

(1)在开始菜单中找到pgAdmin 4,打开pgAdmin,需要输入密码【之前安装时设置的密码】,

基于vscode创建SpringBoot项目,连接postgresql数据库_第4张图片

然后,创建一个新的数据库【test-demo】,其中test-demo是数据库名,在Tables处右键-create-table,在弹出来的框里填写表名然后增加column的name和datatype就可以了。

基于vscode创建SpringBoot项目,连接postgresql数据库_第5张图片

注意:PostgreSQL本身大小写不敏感,但是在这里【非常不推荐】使用大写字母。首先带有大写字母的表的新建和查询时表名都必须带双引号,不然会报【error】postgresql relation does not exist。

  • 可以SELECT * FROM "MyUser",但是不可以SELECT * FROM MyUser
  • 如果仅仅是这样也还是没有问题的,但是如果有大写字母,在后面使用Mybatis Generator生成DO类的时候会报错:Table configuration with catalog null, schema public, and table xxx did not resolve to any tables.就是因为有大写字母引起的。

在这里我新建了一张叫【my_user】的表,两列为username和password,数据类型都为text,并设置username为主键。

(2)这里我使用的是Navicat链接postgresql数据库,输入密码开始连接,

基于vscode创建SpringBoot项目,连接postgresql数据库_第6张图片

然后,点击“新建查询”,进入之后,输入代码,在【my_user】的表中插入了一条数据,

INSERT INTO "my_user"
VALUES('alice','123456')

基于vscode创建SpringBoot项目,连接postgresql数据库_第7张图片基于vscode创建SpringBoot项目,连接postgresql数据库_第8张图片

 基于vscode创建SpringBoot项目,连接postgresql数据库_第9张图片基于vscode创建SpringBoot项目,连接postgresql数据库_第10张图片

三、配置新创建的SpringBoot工程

0 启动项目,出现Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.

(1) 修改pom.xml文件,设置maven检测的时候“跳过测试”,


  

   
                org.apache.maven.plugins
                maven-surefire-plugin
                
                    true
                
            
       
       

基于vscode创建SpringBoot项目,连接postgresql数据库_第11张图片

(2)然后点击右上角的绿色箭头,启动项目,

项目刚刚创建好的时候是不能运行的,运行会报错:Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.

原因这个错误就是由于没有编写application.properties,找不到数据库的URL

基于vscode创建SpringBoot项目,连接postgresql数据库_第12张图片

 

1 编写application.properties,启动项目

(1)配置如下,其中Tomcat端口也可以不改,那就是8080,我是为了防止端口冲突,就随便改了一个。

  • url在数据为postgresql时是jdbc:postgresql://localhost:5432/[数据库名]
  • 后面是用户名和密码,我直接postgres登录的。
#更改Tomcat端口
server.port=8087
spring.datasource.url=jdbc:postgresql://localhost:5432/test-demo
spring.datasource.username=postgres
spring.datasource.password=123456

基于vscode创建SpringBoot项目,连接postgresql数据库_第13张图片

这个时候已经可以成功启动项目了,但是由于啥都还没写,所以访问localhost:8087(注意自己的端口号!)时,web页面上显示的会是Whitelabel Error Page。

基于vscode创建SpringBoot项目,连接postgresql数据库_第14张图片

解决报错:java: 错误: 无效的源发行版:17

场景复现:

基于vscode创建SpringBoot项目,连接postgresql数据库_第15张图片

原因:出现无效的源发行版 就是jdk版本环境不一致造成的。

解决方法

(1)先查看运行环境,确保 Project SDK 和 Project language level 版本一致 (我用的是jdk8版本)

基于vscode创建SpringBoot项目,连接postgresql数据库_第16张图片

(2)如果还没有解决 可以查看 Modules,确保版本一致(我的是1.8)

基于vscode创建SpringBoot项目,连接postgresql数据库_第17张图片

(2)还可以在Settings里面查看 java Compiler 里面的jdk版本是否一致(我的是1.8)

基于vscode创建SpringBoot项目,连接postgresql数据库_第18张图片

然后,发现问题了,这儿的版本不一致。

(4)springboot版本的问题 :springboot3.0 需要jdk17支持,如果没有安装jdk17 只需把springboot版本降低即可。

(5)所以我的解决方法是重新新建项目,

基于vscode创建SpringBoot项目,连接postgresql数据库_第19张图片基于vscode创建SpringBoot项目,连接postgresql数据库_第20张图片

解决报错:新建springboot项目时包导不进来org.springframework.boot:spring-boot-starter-parent:pom:2.7.10-SNAPSHOT failed to transfer from http://maven.aliyun.com/nexus/content/groups/public/ during a previous attempt.

场景复现:IDEA导入maven项目后,下载jar包的时候,控制台报错,报错信息如下,

基于vscode创建SpringBoot项目,连接postgresql数据库_第21张图片

原因:大致是IDEA中的maven编译执行的时候,jar包导不进来。

解决方法

(1)在执行maven命令时忽略证书检查,

  • 在新建maven工程时,会自执行maven的各种命令
  • 在此处设置忽略证书检查
-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true

基于vscode创建SpringBoot项目,连接postgresql数据库_第22张图片

(2)在maven中央仓库(Central Repository:)中寻找,

基于vscode创建SpringBoot项目,连接postgresql数据库_第23张图片

(3)查看maven下载包的路径,

基于vscode创建SpringBoot项目,连接postgresql数据库_第24张图片

 (4)我之前创建项目的时候,选择的是版本,于是将springboot的版本改成2.1.7。

修改为2.7.7之后,重新maven配置,

修改并且load maven changes完成之后pom.xml文件可能还会爆红,这时候需要重启idea,发现成功了。

基于vscode创建SpringBoot项目,连接postgresql数据库_第25张图片

 

总结:如果maven中央仓库没有jar包,即使更换任意镜像,设置安全校验都不好使,可以现在maven中央仓库看是否有所缺的jar包

(2)我们对创建项目的时候生成对应的TestDemoApplication 文件稍微做一点修改,

原始的TestDemoApplication 文件如下:

基于vscode创建SpringBoot项目,连接postgresql数据库_第26张图片

加入注释@RestController,以及根目录下的方法home,

package com.example.testdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class TestDemoApplication {
    @RequestMapping("/")
    public String home(){
        return "Hello,world!";
    }
    public static void main(String[] args) {
        SpringApplication.run(TestDemoApplication.class, args);
    }

}

基于vscode创建SpringBoot项目,连接postgresql数据库_第27张图片

重新启动后再次进入就可以看到Hello World了。

基于vscode创建SpringBoot项目,连接postgresql数据库_第28张图片

 

四、Mybatis Generator工具

接下来需要集成持久层框架,也就是跟数据库打交道的这一层,通常持久层框架有两个:Mybatis和Hibernate, 其中Mybatis是半自动的,需要我们自己写sql,而Hibernate是全自动的,不需要咱们写sql,我记得当年ssh框架盛行时,学这玩意可费劲了,这里我们选择Mybatis。

Mybatis generator工具可以由数据库表自动生成相应的DO类、Dao类和Mapper文件。

作为一个基于 MyBatis 的独立工具,MyBatis Generator 能够通过简单的配置去帮我们生成数据表所对应的 PO、DAO、XML 等文件,减去我们手动去生成这些文件的时间,有效提高开发效率。MyBatis Generator 运行方式多样,主要可以通过以下几种方式来运行:

  1. 命令行
  2. Ant
  3. Maven
  4. Java
  5. Eclipse

1、引入依赖

既然要使用 MyBatis Generator,那么肯定我们的项目中已经配置了数据库和 MyBatis 的相关依赖,如果还没有配置,那么可以在 pom.xml 文件中进行配置,

打开原有自动生成的pom.xml,在标签下添加新的,添加完之后的xml文件:



        org.mybatis.generator
        mybatis-generator-maven-plugin
        1.3.5
        
            
                org.mybatis.generator
                mybatis-generator-core
                1.3.5
            
            
                org.postgresql
                postgresql
                9.4-1201-jdbc4
            
        
        
            
                mybatis generator
                package
                
                    generate
                
            
        
        
            true
            src/main/resources/mybatis-generator.xml
        
    

基于vscode创建SpringBoot项目,连接postgresql数据库_第29张图片 

完成上述步骤后,我们只是完成了 MyBatis Generator 的引入工作,要想让它正常工作,我们还需要对它进行配置,

2、配置generator-config.xml生成规则

其中代码生成的规则是依赖于这么一个xml文件:

基于vscode创建SpringBoot项目,连接postgresql数据库_第30张图片 

所以咱们在这个指定src/main/resources的目录中新建这么一个文件:

基于vscode创建SpringBoot项目,连接postgresql数据库_第31张图片

 其内容这里是一个模板代码,如下:





    

        
        
        
        

        
        
        
        

        
        
            
        

        
        

        
        

        
        

        
        

        

其中需要更改的地方主要是这几个地方,

基于vscode创建SpringBoot项目,连接postgresql数据库_第32张图片

这块根据自己的项目情况再来修改既可。

(1)在src/main/resources目录下创建mybatis-generator.xml,这个文件在官网有示例,copy下来改一改就行。

其中需要更改的地方主要是这几个地方:

  • 要改的就是数据库链接地址(如果数据库不同),URL记得换成自己的数据库名,然后用户名和密码也要改。
  • 以及后面的targetPackage和targetProject。注意如果targetPackage写的包要存在,如果没有的话先新建包,再把对应的包写上去。
  • 在这里我新建了dataobject、mapping以及dao包。

table部分每一张表都要写一个table标签,这里只建了一张表因此就一个示例。

此时的目录结构:

基于vscode创建SpringBoot项目,连接postgresql数据库_第33张图片

注意添加了mapping之后需要在application.properties中添加:

mybatis.mapper-locations=classpath*:mapping/*.xml

3、自动生成器

(1)代码生成器的配置一切ok,接下来则需要执行生成命令,这里在run这块增加一个生成命令,如下,

mybatis-generator:generate -e

基于vscode创建SpringBoot项目,连接postgresql数据库_第34张图片

基于vscode创建SpringBoot项目,连接postgresql数据库_第35张图片基于vscode创建SpringBoot项目,连接postgresql数据库_第36张图片

可以看到右上角,出现了,

(2)接下来咱们来看一下自动生成mybais的相关代码的效果,点击run就可以看到生成的文件了。

 基于vscode创建SpringBoot项目,连接postgresql数据库_第37张图片

此时的目录结构是这样:

基于vscode创建SpringBoot项目,连接postgresql数据库_第38张图片

解决报错:不支援 10 验证类型。请核对您已经组态 pg_hba.conf 文件包含客户端的IP位址或网路区段,以及驱动程序所支援的验证架构模式已被支援。

场景复现:使用自动代码生成器,

原因:项目启动起来但是连接postgresql数据库报错。

解决方法:当出现这个错误的时候,不要慌,因为错误信息有提到pg_hba.conf,所以我们指定是要找到这个文件。

(1)首先找到本地的pg_hba.conf所在位置,

基于vscode创建SpringBoot项目,连接postgresql数据库_第39张图片

(2)然后,将下述代码粘贴到pg_hba.conf中,保存文件,如图所示:

# "local" is for Unix domain socket connections only
local   all             all                           trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

基于vscode创建SpringBoot项目,连接postgresql数据库_第40张图片

 

(3)最后重启下该对应的pg数据库的服务即可,

基于vscode创建SpringBoot项目,连接postgresql数据库_第41张图片

(4)在idea中重新运行自动生成器,

基于vscode创建SpringBoot项目,连接postgresql数据库_第42张图片

ok,成功解决。

4、测试

(1)再次更改TestDemoApplication,如下,

package com.example.testdemo;
import com.example.testdemo.dao.MyUserDOMapper;
import com.example.testdemo.dataobject.MyUserDO;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication(scanBasePackages = {"com.example.testdemo"})
@RestController
@MapperScan("com.example.testdemo.dao")
public class TestDemoApplication {
    @Autowired private MyUserDOMapper userDOMapper;

    @RequestMapping("/")
    public String home(){
//        return "Hello,world!";
        MyUserDO userDO = userDOMapper.selectByPrimaryKey("alice");
        if (userDO == null) {
            return "用户不存在";
        } else {
            return userDO.getPassword();
        }
    }
    public static void main(String[] args) {
        SpringApplication.run(TestDemoApplication.class, args);
    }

}

(2)run的时候记得run application,而不是run刚刚配置过的Maven命令,


再次访问http://localhost:8087/,显示123456,成功。

基于vscode创建SpringBoot项目,连接postgresql数据库_第43张图片

 问题:为什么@Autowired 和private UserDOMapper userDOMapper有错但还能执行

场景复现

基于vscode创建SpringBoot项目,连接postgresql数据库_第44张图片

 

原因:autowired应该是idea建议使用construtor来构建的一种引入方式,mapper上的红线是idea和mybatis融合的不好的问题,不影响使用。如果你看着难受可以在mapper的接口文件里的头部加上@Repository注解。

你可能感兴趣的:(java,java,mybatis,spring,boot,postgresql,数据库)