基于VS code 实现Java前后端打通—基础—使用Springboot+postgreSql+mybatis+Navicat

本文详细描述了作者在使用SpringBoot创建Web应用时,如何配置数据库连接、实体类、DAO、Service以及MVC结构,包括MyBatis的XML映射文件和RESTfulAPI的编写过程。
摘要由CSDN通过智能技术生成

前言:

作者学习webjava后的而总结,总的流程概括就是先使用springboot创建项目,在application.properties中完成相应的postgreSql和mybaits的环境配置和.xml文件中dependecy依赖配置,entities实现数据表的类型模板,分别创建controller用于控制书写相应的路由和方法(其中含参函数使用@PathVariable eg:@PathVariable String name),dao接口定义把访问数据库的代码封装起来,dao在数据库与业务逻辑(Service)之间,service实现服务的方法提供,在mappers中featurelayer.xml文件中实现sql语句,至此逻辑链就跑通了,启动服务器,在浏览器中输入相应url,完成加载,并在apifox中实现相关接口。作者的书写流程为先dao中写接口,service中写方法,然后xml中实现sql语句,然后在控制器中完成路由配置。

操作步骤:

创建一个postgresql 数据库,并新建一张featurelayer 数据表,数据表的字段信息如下,并为数据表中填充3 条记录创建数据表,并声明id为主键

5.2,插入三段数据

5.3创建江西省河流数据,江西省道路数据,江西省村落点数据等数据。

5.4 在navicat中建立并确认数据库链接

5.5使用spring框架创建javaweb项目

5.6创建一个springboot 项目,并引入mybatis 及postgresql 的依赖,在

application.properties 文件里配置项目的端口,并增加数据库的配置信息。

5.7创建符合MVC 架构的文件夹组织方式

5.8使用源代码操作生成get,set,在entities 目录里分别创建一个FeatureLayer.java 的类对象,对象属性

5.9将xml文件放在resources的根目录下

5.10在dao 目录里创建一个FeatureLayerDao.java 的接口,并为接口增加

Mapper 的注解;

 5.11从Spring2.5开始,开始支持使用注解来自动装配Bean的属性。它允许更细粒度的自动装配,我们可以选择性的标注某一个属性来对其应用自动装配。

5.11在resources 文件里创建featurelayer.xml 文档,配置FeatureLayerDao

与数据表的关联

5.12配置路由

5.13启动服务器,并在浏览器中打开

5.14同理声明筛选name和type的方法等系列

5.15 出现小bug即在浏览器中出现筛选后的结果,由于id被筛选,所以显示为0,我意识到和entities的配置与.xml中ResultType有关系,和基于ts+vue3+vite的项目中XXX.d.ts类似提供了类型模板,更加安全

5.16于是创建FeatureLayerOnly.java文件来解决小bug

5.17 解决上述问题与操作难点就是重复配置依赖,写接口,实现接口,完成sql相应数据库操作。

核心源码:

package studio.ilocation.ex3mybatis.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import studio.ilocation.ex3mybatis.Service.FeaturelayerService;
import studio.ilocation.ex3mybatis.entities.FeatureLayer;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;




@RestController
@RequestMapping("/ex3")
public class LayerController {
    @Autowired
    private FeaturelayerService featLyrService;
    // 获取全部要素服务
    @GetMapping("/query/all")
    public List<FeatureLayer> queryAllFeatLyrs(){

        return featLyrService.queryAllFeatLyrs();
    }
    // 通过名字筛选获取全部要素服务
    @GetMapping("/query/all/{name}")
    public List<FeatureLayer> queryByNameFeatLyrs(@PathVariable String name) {
        return featLyrService.queryAllFeatLyrsByName(name);
    }
    // 获取只包含名字和类型要素服务
    @GetMapping("/query/only")
    public List<FeatureLayer> queryNameAndTypeFeatLyrs() {
        return featLyrService.selectOnlyNameAndTypeFeatureLayers();
    }
    // 通过名字获取只包含名字和类型要素服务
    @GetMapping("/query/only/{name}")
    public List<FeatureLayer> queryNameAndTypeByNameFeatLyrs(@PathVariable String name) {
        return featLyrService.selectOnlyNameAndTypeFeatureLayersByName(name);
   }
    
}
package studio.ilocation.ex3mybatis.dao;

import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import studio.ilocation.ex3mybatis.entities.FeatureLayer;
@Mapper
public interface FeatureLayerDao {
    // 声明实现获取全部要素接口
    List<FeatureLayer> selectAllFeatureLayers();
    // 声明实现通过名字筛选获取全部要素接口
    List<FeatureLayer> selectAllFeatureLayersByName(String name);
    // 声明实现获取只包含名字和类型要素接口
    List<FeatureLayer> selectOnlyNameAndTypeFeatureLayers();
    // 声明实现通过名字获取只包含名字和类型要素接口
    List<FeatureLayer> selectOnlyNameAndTypeFeatureLayersByName(String name);
}

package studio.ilocation.ex3mybatis.entities;

public class FeatureLayer {
    private int id;
    private String name;
    private String type;
    public int getId(){
        return id;
    }
    public void setId(int id){
        this.id = id;
    }
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name =name;
    }
    public String getType(){
        return type;
    }
    public void setType(String type){
        this.type = type;
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="XX">
    <!-- 实现获取全部要素调用sql语句 -->
    <select id="selectAllFeatureLayers"
            resultType="studio.ilocation.ex3mybatis.entities.FeatureLayer">
        select * from featureLayer;
    </select>
    <!-- 实现调用通过名字筛选获取全部要素sql语句 -->
    <select id="selectAllFeatureLayersByName"
            resultType="studio.ilocation.ex3mybatis.entities.FeatureLayer">
        select * from featureLayer
        where name = #{name};
    </select>
    <!-- 实现调用获取只包含名字和类型要素sql语句 -->
       <select id="selectOnlyNameAndTypeFeatureLayers"
            resultType="studio.ilocation.ex3mybatis.entities.FeatureLayerOnly">
        select name,type from featureLayer;
    </select>
    <!-- 实现调用通过名字获取只包含名字和类型要素sql语句 -->
        <select id="selectOnlyNameAndTypeFeatureLayersByName"
            resultType="studio.ilocation.ex3mybatis.entities.FeatureLayerOnly">
        select name,type from featureLayer
        where name = #{name};
    </select>
</mapper>

VSCode和IDEA中进行前后端交互,可以通过配置代理服务器来实现。首先,需要在VSCode使用live-server命令运行layui项目,并将项目端口改为8081。可以在C:\Users\xuan\AppData\Roaming\npm\node_modules\live-server\index.js文件中修改默认端口为8081。\[1\] 接下来,在nginx安装目录中创建一个reverse-proxy.conf文件,并在该文件中编写以下内容: ``` server { listen 8080; server_name localhost; location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:8081; } location /api { rewrite ^.+api/?(.*)$ /$1 break; include uwsgi_params; proxy_pass http://localhost:8082; } } ``` 这样配置后,Nginx会监听localhost的8080端口。当用户访问http://localhost:8080时,Nginx会正向代理到http://localhost:8081(即前端layui框架的页面)。而当用户访问http://localhost:8080/api时,Nginx会反向代理到http://localhost:8082(即后端接口)。\[2\]\[3\] 通过这样的配置,前端后端就可以在VSCode和IDEA中进行交互了。前端页面可以通过http://localhost:8080访问,而后端接口可以通过http://localhost:8080/api访问。 #### 引用[.reference_title] - *1* *2* *3* [前端VSCode layui项目+后端IDEA Springboot项目实现前后端分离](https://blog.csdn.net/qq_41823964/article/details/123014517)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值