# spring-boot **Repository Path**: hwyhy/spring-boot ## Basic Information - **Project Name**: spring-boot - **Description**: spring boot的学习项目 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-04-02 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # spring-boot spring boot的学习项目 ## 特性 - 支持MySQL、MongoDB操作 - 支持拦截器拦截 - 支持freemarker前端模板 - 支持基于Redis的消息订阅/发布消息 - 支持基于Redis的地理信息查询(Redis版本必须3.2.0以上) ## 使用 *通过maven工程直接引入** ## 举个栗子🌰 ```java 添加一个文档到MongoDB数据库 http://127.0.0.1:9000/mongodb/addbaike?id=1&desc=MongoDB操作&tag=IT&comment.good=0&comment.bad=1&user.gender=1&user.name=校花&user.goldCoin=500 /** * 添加百科文档 Controller * @param baike * @return */ @RequestMapping("/addbaike") @ResponseBody public Baike addDict(Baike baike) { return mongoDbBaiKeService.addDict(baike); } /** * 添加百科文档 Service * @param baike * @return */ @Override public Baike addDict(Baike baike) { baike.setCrateDate(new Date()); baike.setUpdateDate(new Date()); return mongoDbBaiKeDao.addDict(baike); } /** * 添加百科文档 dao * @param baike * @return */ public Baike addDict(Baike baike) { mongoTemplate.insert(baike); return baike; } public class Baike { private String id; private String desc; private List tag = new ArrayList(); private Comment comment = null; private User user = null; private Date crateDate = null; private Date updateDate = null; private int status = 0; ...get set 忽略 } public class User { private Integer id; private String name; private Integer gender; private Integer goldCoin; private Date crtTime; ...get set 忽略 } ``` ### 执行结果 ![](https://i.imgur.com/lJ6l4ke.jpg) ## 举个地理信息栗子☃ ```java /** * 地理信息查询 */ @RequestMapping("/geo") @ResponseBody public List geo() { List geoList = new ArrayList<>(); //用于地理信息 添加一个ZSET的结构 CHINA:CITY BoundGeoOperations boundGeoOperations = redisTemplate.boundGeoOps(key); //南京市 118.803805,32.060168 Point nanjing = new Point(118.803805,32.060168); //北京市 116.397039,39.9077 Point beijing = new Point(116.397039,39.9077); //天津市 116.397039,39.9077 Point tianjing = new Point(117.20,39.12); //添加地理信息到Redis System.out.println(boundGeoOperations.add(nanjing, "南京市")); System.out.println(boundGeoOperations.add(beijing, "北京市")); System.out.println(boundGeoOperations.add(tianjing, "天津市")); //获取某个地理位置的geohash值 List list = boundGeoOperations.hash("南京市"); System.out.println("南京市的geoHash = " + list.get(0)); geoList.add("南京市的geoHash = " + list.get(0)); //获取某个地理位置的坐标 List pointList = boundGeoOperations.position("南京市"); System.out.println("南京市的经纬度为 = " + pointList.get(0)); geoList.add("南京市的经纬度为 = " + pointList.get(0)); //获取两个地理位置的距离 Distance distance = boundGeoOperations.distance("南京市", "天津市", Metrics.KILOMETERS); System.out.println("南京市到天津市之间的距离是:" + distance.getValue() + "km"); geoList.add("南京市到天津市之间的距离是:" + distance.getValue() + "km"); //根据给定地理位置坐标获取指定范围内的地理位置集合 //查询南京市1000KM范围内的城市 Circle within = new Circle(nanjing,1000000); //设置geo查询参数 RedisGeoCommands.GeoRadiusCommandArgs geoRadiusArgs = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs(); //查询返回结果包括距离和坐标 geoRadiusArgs = geoRadiusArgs.includeCoordinates().includeDistance(); //按查询出的坐标距离中心坐标的距离进行排序 geoRadiusArgs.sortAscending(); //限制查询返回的数量 geoRadiusArgs.limit(5); GeoResults> geoResults = boundGeoOperations.radius(within,geoRadiusArgs); List>> geoResultList = geoResults.getContent(); for (GeoResult geoResult : geoResultList) { System.out.println("geoRadius " + geoResult.getContent()); geoList.add("geoRadius " + geoResult.getContent()); } //根据给定地理位置获取指定范围内的地理位置集合 查询南京市800KM范围内的城市 geoResults = boundGeoOperations.radius("南京市",new Distance(800000), geoRadiusArgs); geoResultList = geoResults.getContent(); for (GeoResult geoResult : geoResultList) { System.out.println("radius " + geoResult.getContent()); geoList.add("radius " + geoResult.getContent()); } //删除位置信息,此命令不是geo提供的,是使用zrem命令删除的 // System.out.println(boundGeoOperations.remove("南京市")); return geoList; } ``` ### 执行结果 ![](https://i.imgur.com/lI41DuA.jpg) ## 问题建议 - 联系我的邮箱:18819478773@163.com