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

前言:

作者学习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 {@Autowiredprivate 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 featureLayerwhere 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 featureLayerwhere name = #{name};</select>
</mapper>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/564559.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大创项目推荐 图像识别-人脸识别与疲劳检测 - python opencv

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是…

Windows Server 2016 配置NTP客户端

目录 1. 前提条件1.1 进入服务管理界面1.2 开启Windows Time服务 2. 情况1&#xff1a;可以直接设置NTP时钟2.1 Internet时间设置 3. 情况2&#xff1a;有的版本服务器上没有“Internet时间”3.1 运行gpedit.msc 打开本地策略组3.2 Windows 时间服务3.3 配置Windows NTP客户端3…

主干网络篇 | YOLOv8改进之在主干网络中引入密集连接卷积网络DenseNet

前言:Hello大家好,我是小哥谈。DenseNet(密集连接卷积网络)是一种深度学习神经网络架构,它在2017年由Gao Huang等人提出。DenseNet的核心思想是通过密集连接(dense connection)来促进信息的流动和共享。在传统的卷积神经网络中,每个层的输入只来自于前一层的输出。而在…

SpringAOP+自定义注解实现限制接口访问频率,利用滑动窗口思想Redis的ZSet(附带整个Demo)

目录 1.创建切面 2.创建自定义注解 3.自定义异常类 4.全局异常捕获 5.Controller层 demo的地址&#xff0c;自行获取《《—————————————————————————— Spring Boot整合Aop面向切面编程实现权限校验&#xff0c;SpringAop自定义注解自定义异常全局…

C语言动态内存的管理

前言 本篇博客就来探讨一下动态内存&#xff0c;说到内存&#xff0c;我们以前开辟空间大小都是固定的&#xff0c;不能调整这个空间大小&#xff0c;于是就有动态内存&#xff0c;可以让我们自己选择开辟多少空间&#xff0c;更加方便&#xff0c;让我们一起来看看动态内存的有…

使用python实现布丰投针法

对于π的值,直到1946年的时候,人类才能将π的值精确计算到小数点后2037位,而现在的超级计算机的能力可以精确的计算到小数点后几十亿位,然而在计算机发明之前,还是使用这里的布丰投针法来计算π值,是最实用的方法。 使用代码来模拟这个过程,首先是程序设计思路的基本路…

反序列化漏洞简单知识

目录&#xff1a; 一、概念&#xff1a; 二、反序列化漏洞原因 三、序列化漏洞的魔术方法&#xff1a; 四、反序列化漏洞防御&#xff1a; 一、概念&#xff1a; 序列化&#xff1a; Web服务器将HttpSession对象保存到文件系统或数据库中&#xff0c;需要采用序列化的…

python写爬虫爬取京东商品信息

工具库 爬虫有两种方案&#xff1a; 第一种方式是使用request模拟请求&#xff0c;并使用bs4解析respond得到数据。第二种是使用selenium和无头浏览器&#xff0c;selenium自动化操作无头浏览器&#xff0c;由无头浏览器实现请求&#xff0c;对得到的数据进行解析。 第一种方…

算法---动态规划

动态规划 1.前言2. 示例 - 第N个泰波那契数2.1 算法原理&#xff08;重点&#xff09;2.2 代码 3. 总结解题思路 1.前言 哪些情况下会用到动态规划&#xff1a; 1.最优化问题&#xff1a;当需要求解最大值或最小值的问题时&#xff0c;可以考虑使用动态规划。例如&#xff0c…

JS操作元素的内容

对象.innerText 属性 对象.innerHTML 属性 <body><div classbox>文字</div><script>//首先获取元素const box document.querySelector(.box)console.log(box.innerText)</script> </body> 1.元素innerText属性 将文本内容添加到标签任…

网络: 多路复用

概念: 多路复用: 一种通信传输技术, 使多条数据流或信号共享同一传输介质网络中的多路复用: 一个进程能够同时监控多个文件描述符的IO事件 特点 select 缺点 设置关注文件描述符的结构是位图, 有数量限制fdset无法复用, 每次都要初始化用户态和内核态之间的拷贝较多检查关注…