SpringBoot校园导航图后台代码实现

一、前言数据结构课设写一个校园导航图,正好舍友会安卓,于是我就用SpringBoot和他合作写了一个前后端交互的项目,由于时间之后3天,所以就没有加一些用户模块、权限模块,也就简单实现了景点信息、路径信息的增删改查。二、所需技术SpringBoot搭建项目的整体框架景点数据、路径数据采用MySQL数据库查询数据添加缓存使用Redis数据库DAO层使用MyBatis框架都是一些基本...
摘要由CSDN通过智能技术生成

一、前言

数据结构课设写一个校园导航图,正好舍友会安卓,于是我就用SpringBoot和他合作写了一个前后端交互的项目,由于时间之后3天,所以就没有加一些用户模块、权限模块,也就简单实现了景点信息、路径信息的增删改查。

二、所需技术

  • SpringBoot搭建项目的整体框架
  • 景点数据、路径数据采用MySQL数据库
  • 查询数据添加缓存使用Redis数据库
  • DAO层使用MyBatis框架

都是一些基本的开发框架,也没有涉及到分布式方面的东西,比较简单。

三、数据库构建

由于功能简单,数据库设计的也比较简单
spot景点表结构:
在这里插入图片描述
path表结构:
在这里插入图片描述

四、代码展示

1.相关bean类以及相应用法

有些bean类实现了Serializable接口,这是因为在springboot整合Redis时,需要加入缓存的对象序列化。

(由于代码较多,一些无关紧要的代码就会省略)
DealResult.java
用来封装返回的数据,里面记录了返回是否成功、返回信息、返回数据。

public class DealResult {
   

    private boolean isSucceed;
    private String resultInfo;
    private Object data;

    public DealResult() {
   }

    public DealResult(boolean isSucceed, String resultInfo) {
   
        this.isSucceed = isSucceed;
        this.resultInfo = resultInfo;
    }
}

Coord.java
用来封装一个景点的坐标类,可以将数据库查询到的路径中经过的景点坐标进行封装。

public class Coord implements Serializable {
   

    private double x;
    private double y;

    public Coord() {
   
    }

    public Coord(double x, double y) {
   
        this.x = x;
        this.y = y;
    }

Spot.java
景点类,用来封装景点信息

public class Spot implements Serializable {
   

    // 景点编号
    private Integer spotId;
    // 景点名称
    private String spotName;
    // 景点横坐标
    private double coordX;
    // 景点纵坐标
    private double coordY;
    // 景点信息
    private String spotInfo;
    // 连接景点数组
    private Coord[] coords;

    public Spot() {
   }
}

Path.java
路径类,记录该条路径的起点、终点、长度信息

public class Path implements Serializable {
   

    // 路径编号
    private Integer pathId;
    // 路径起点
    private Integer startSpotId;
    // 路径终点
    private Integer endSpotId;
    // 路径长度
    private Double pathLength;

    public Path() {
   }

    public Path(Integer startSpotId, Integer endSpotId, Double pathLength) {
   
        this.startSpotId = startSpotId;
        this.endSpotId = endSpotId;
        this.pathLength = pathLength;
    }
}

2.springboot整合Redis配置类

在使用Redis时,需要注意的如果同类里面的方法需要调用另外一个方法的缓存,那么需要使用新的代理对象调用该方法才能实现数据的缓存,后面会遇到这种情况。

RedisConfig.java

@Configuration
public class RedisConfig extends CachingConfigurerSupport {
   
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
   
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofSeconds(60))
                .disableCachingNullValues();

        return RedisCacheManager.builder(factory)
                .cacheDefaults(config)
                .transactionAware()
                .build();
    }

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
   
        StringRedisTemplate template = new StringRedisTemplate(factory);
        RedisSerializer keySerializer = new StringRedisSerializer(); // 设置key序列化类,否则key前面会多了一些乱码
        template.setKeySerializer(keySerializer);
        setValueSerializer(template);//设置value序列化
        template.afterPropertiesSet();
        template.setEnableTransactionSupport(true);
        return template;
    }

    private void setValueSerializer(StringRedisTemplate template) {
   
        @SuppressWarnings({
   "rawtypes", "unchecked"})
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setValueSerializer(jackson2JsonRedisSerializer);
    }
}

3.景点相关功能

  1. Controller层
    SpotServlet.java
@RestController
public class SpotServlet {
   

    @Autowired
    SpotService spotService;

    @GetMapping("/querySpotInfo")
    public DealResult querySpotInfo() {
   
        DealResult dealResult = new DealResult();
        try {
   
            List<Spot> spotList = spotService.querySpots();
            if (spotList != null) {
   
                dealResult.setSucceed(true);
                dealResult.setData(spotList);
            }
        } catch (Exception e) {
   
            dealResult.setSucceed(false);
            dealResult.setResultInfo("查询景点信息失败!");
        }
        return dealResult;
    }

    @GetMapping("/querySpot")
    public Spot querySpotById(Integer id) {
   
        return spotService.querySpotById(id);
    }

}
  1. Service层
    SpotServiceImpl.java
@Service
public class SpotServiceImpl implements SpotService {
   

    @Autowired
    SpotMapper spotMapper;
    @Autowired
    PathMapper pathMapper;
    @Autowired
    SpotService spotService;

    /**
     * 查询景点
     *  将该景点为起点的路经的终点坐标封装为Coord存储到 coords[] 数组中
     */
    @Cacheable(cacheNames = "spots")
    @Override
    public List<Spot> querySpots() {
   
        List<Spot> spotList = spotMapper.querySpots();

        for (Spot spot :
                spotList) {
   
            List<Path> nextSpotsList = pathMapper
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值