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