前言:
作者学习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>