尚医通07:MongoDB+医院需求介绍

news2024/9/24 9:18:24
内容介绍

1、客户端工具

2、MongoDB常用操作

3、springboot集成MongoDB(mongoTemplate)

4、springboot集成MongoDB(MongoRepository)

5、医院需求介绍

6、部署医院模拟系统

7、开发平台接口-上传医院接口

客户端工具

1MongoDB适用场景

2、客户端工具

1)安装

2)使用

MongoDB常用操作

1INSERT

db.User.save({name:'zhangsan',age:21,sex:true})

> db.User.find()

2QUERY

1where

# select * from User where name = 'zhangsan'

db.User.find({name:"zhangsan"})

2FIELDS

# select name, age from User where age = 20

db.User.find({age:21}, {'name':1, 'age':1})

3sort

# select * from User order by age

db.User.find().sort({age:1})

4SUCE

# select * from User skip 2 limit 3

db.User.find().skip(0).limit(2)

5IN

# select * from User where age in (21, 26, 32)

db.User.find({age:{$in:[21,44,55]}})

6COUNT

# select count(*) from User where age >20

> db.User.find({age:{$gt:20}}).count()

7OR
 

# select * from User where age = 20 or age = 30

> db.User.find({$or:[{age:21}, {age:55}]})
 

3UPDATE

# update User set age = 100, sex = 0 where name = 'lucy'

db.User.update({name:"zhangsan"}, {$set:{age:100, sex:0}})

4Remove

//移除对应id的行
 

db.User.remove(id)

//移除所有

db.User.remove({})

5aggregate聚合

1)插入测试数据

见课件

2)实现聚合查询

# select by_user, count(*) from article group by by_user

db.article.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])

springboot集成MongoDB(MongoTemplate)

1、集成方案

spring-data-mongodb提供了MongoTemplateMongoRepository两种方式访问mongodbMongoRepository操作简单,MongoTemplate操作灵活,我们在项目中可以灵活适用这两种方式操作mongodbMongoRepository的缺点是不够灵活,MongoTemplate正好可以弥补不足。

2、准备工作

1)在service_hosp引入依赖

<dependencies>

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-data-mongodb</artifactId>

    </dependency>

  </dependencies>

2)添加mongo配置

spring.data.mongodb.uri=mongodb://192.168.140.138:27017/test

3、使用MongoTemplate实现curd

1)创建目录创建实体

添加com.atguigu.yygh.hosp.testmongo.User

@Data

@Document("User")

  public class User {

    @Id

    private String id;

    private String name;

    private Integer age;

    private String email;

    private String createDate;

  }

2)创建测试类

@RestController

@RequestMapping("/mongo1")

  public class TestMongo1 {

  

    @Autowired

    private MongoTemplate mongoTemplate;

  

  

    //添加

    @GetMapping("create")

    public void createUser() {

        User user = new User();

        user.setName("zhang3");

        user.setAge(33);

        user.setEmail("zhang3@qq.com");

        User user1 = mongoTemplate.insert(user);

        System.out.println("user1 = " + user1);

    }

  

  

    //查询所有

    @GetMapping("findAll")

    public void findUser() {

        List<User> users = mongoTemplate.findAll(User.class);

        users.forEach(System.out::println);

    }

  

    //根据id查询

    @GetMapping("findId")

    public void getById() {

        User user = mongoTemplate.findById("64b4a856a2225f220ec3fa0f", User.class);

        System.out.println("user = " + user);

    }

  

    //条件查询

    @GetMapping("findUser")

    public void findUserList() {

        Query query = new Query(

                Criteria.where("name").is("zhang3")

                        .and("age").is(33)

        );

        List<User> users = mongoTemplate.find(query, User.class);

        users.forEach(System.out::println);

    }

  

    //条件模糊查询

    @GetMapping("findUserLike")

    public void findUserLike() {

        String name = "ang";

        String regex = String.format("%s%s%s", "^.*", name, ".*$");

        Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);

        Query query = new Query(

                Criteria.where("name").regex(pattern)

        );

        List<User> users = mongoTemplate.find(query, User.class);

        users.forEach(System.out::println);

    }

  

  

    //条件模糊分页查询

    @GetMapping("findUserPage")

    public void findUserPage() {

        //0定义分页参数

        int pageNo = 1;

        int pageSize = 10;

        //1设置筛选条件

        String name = "ang";

        String regex = String.format("%s%s%s", "^.*", name, ".*$");

        Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);

        Query query = new Query(

                Criteria.where("name").regex(pattern)

        );

        //2查询总记录数total

        long total = mongoTemplate.count(query, User.class);

        //3设置分页条件

        query.skip((pageNo-1)*pageSize).limit(pageSize);

        List<User> users = mongoTemplate.find(query, User.class);

        System.out.println("total = " + total);

        users.forEach(System.out::println);

    }

  

    //修改

    @GetMapping("update")

    public void updateUser() {

        User user = mongoTemplate.findById("5ffbfa2ac290f356edf9b5aa", User.class);

        user.setName("test_1");

        user.setAge(25);

        user.setEmail("493220990@qq.com");

        Query query = new Query(Criteria.where("_id").is(user.getId()));

        Update update = new Update();

        update.set("name", user.getName());

        update.set("age", user.getAge());

        update.set("email", user.getEmail());

        UpdateResult result = mongoTemplate.upsert(query, update, User.class);

        long count = result.getModifiedCount();

        System.out.println(count);

    }

  

    //删除操作

    @GetMapping("delete")

    public void delete() {

        Query query =

                new Query(Criteria.where("_id").is("5ffbfa2ac290f356edf9b5aa"));

        DeleteResult result = mongoTemplate.remove(query, User.class);

        long count = result.getDeletedCount();

        System.out.println(count);

    }

  

  

  }

springboot集成MongoDB(MongoRepository)

1、准备工作

@Repository

  public interface UserRepository extends MongoRepository<User,String> {

}

2、实现测试案例

@RestController

@RequestMapping("/mongo2")

  public class TestMongo2 {

  

    @Autowired

    private UserRepository userRepository;

  

    //添加

    @GetMapping("create")

    public void createUser() {

        User user = new User();

        user.setAge(20);

        user.setName("张三");

        user.setEmail("3332200@qq.com");

        User user1 = userRepository.save(user);

        System.out.println("user1 = " + user1);

    }

  

    //查询所有

    @GetMapping("findAll")

    public void findUser() {

        List<User> users = userRepository.findAll();

        users.forEach(System.out::println);

    }

  

    //根据id查询

    @GetMapping("findId")

    public void getById() {

        User user = userRepository.findById("64b4a856a2225f220ec3fa0f").get();

        System.out.println("user = " + user);

    }

  

    //条件查询

    @GetMapping("findUser")

    public void findUserList() {

        User user = new User();

        user.setName("张三");

        user.setAge(20);

        Example<User> example = Example.of(user);

        List<User> users = userRepository.findAll(example);

        users.forEach(System.out::println);

    }

  

    //条件模糊查询

    @GetMapping("findUserLike")

    public void findUserLike() {

        //查询条件

        User user = new User();

        user.setName("");

        //模板构造器

        ExampleMatcher matcher = ExampleMatcher.matching()

                .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)

                .withIgnoreCase(true);

        //查询条件模板

        Example<User> example = Example.of(user,matcher);

        List<User> users = userRepository.findAll(example);

        users.forEach(System.out::println);

    }

  

    //条件模糊分页查询

    @GetMapping("findUserPage")

    public void findUserPage() {

        //创建排序对象

        Sort sort = Sort.by(Sort.Direction.DESC,"age");

        //创建分页对象  第一页从0开始

        Pageable pageable = PageRequest.of(0,2,sort);

        //查询条件

        User user = new User();

        user.setName("");

        //模板构造器

        ExampleMatcher matcher = ExampleMatcher.matching()

                .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)

                .withIgnoreCase(true);

        //查询条件模板

        Example<User> example = Example.of(user,matcher);

        Page<User> userPage = userRepository.findAll(example, pageable);

        userPage.getContent().forEach(System.out::println);

        System.out.println("userPage.getTotalElements() = " + userPage.getTotalElements());

    }

  

    //修改

    @GetMapping("update")

    public void updateUser() {

        User user = userRepository.findById("60b8d57ed539ed5b124942de").get();

        user.setName("张三_1");

        user.setAge(25);

        user.setEmail("883220990@qq.com");

        User save = userRepository.save(user);

        System.out.println(save);

    }

  

    //删除操作

    @GetMapping("delete")

    public void delete() {

        userRepository.deleteById("60b8d57ed539ed5b124942de");

    }

  

  

    @GetMapping("testMethod1")

    public void testMethod1() {

        List<User> users = userRepository.getByNameAndAge("张三",20);

        users.forEach(System.out::println);

    }

  

    @GetMapping("testMethod2")

    public void testMethod2() {

        List<User> users = userRepository.getByNameLike("");

        users.forEach(System.out::println);

  

    }

  }

*创建接口

@Repository

  public interface UserRepository extends MongoRepository<User,String> {

    List<User> getByName(String name);

  

    List<User> getByNameLike(String name);

  

    List<User> getByNameAndAge(String name, int age);

  }

医院需求介绍

1、分析需求

1)实现与医院对接接口(医院、科室、排班)

2)调用接口需要进行验签

部署医院模拟系统

1、确认资料

2、创建医院模拟系统

1)创建工程hospital-manage

2)替换pom

3)复制源码

4)删除测试目录代码

5)添加静态资源

6)创建数据库

7)修改配置信息

3、启动工程

开发平台接口-上传医院接口

1、解读api文档

2、准备工作

1)添加封装返回结果

2)添加工具类

3、搭建mongo访问框架

1)确认依赖

2)确认配置

3)确认实体

4)创建接口



  @Repository

  public interface HospitalRepository extends MongoRepository<Hospital,String> {

}

5)搭建service

public interface HospitalService {

}
 
@Service

  public class HospitalServiceImpl implements HospitalService {

    @Autowired

    private HospitalRepository hospitalRepository;

  }

6)创建controller

@Api(tags = "医院管理API接口")

  @RestController

@RequestMapping("/api/hosp")

  public class ApiController {

  

    @Autowired

    private HospitalService hospitalService;

  

  }

4、实现上传医院接口

1)分析接口

*参数:请求对象

*返回值:Result.ok()

2)实现controller

@ApiOperation(value = "上传医院")

  @PostMapping("saveHospital")

  public Result saveHospital(HttpServletRequest request) {

    //1request获取参数,类型转化

    Map<String, String[]> parameterMap = request.getParameterMap();

    Map<String, Object> paramMap = HttpRequestHelper.switchMap(parameterMap);

    //2 TODO 进行验签

    //3 保存医院信息

    hospitalService.save(paramMap);

    //4 返回结果

    return Result.ok();

  }

3)实现service

//保存医院信息

  @Override

  public void save(Map<String, Object> paramMap) {

    //1使用工具实现paramMap=Hospital

    String paramJsonStr = JSONObject.toJSONString(paramMap);

    Hospital hospital = JSONObject.parseObject(paramJsonStr, Hospital.class);

    //2根据hoscode查询mongo,获取医院信息

    Hospital targetHospital = hospitalRepository.getByHoscode(hospital.getHoscode());

    if(targetHospital!=null){

        //3医院信息不为空,更新数据

        hospital.setId(targetHospital.getId());

        hospital.setCreateTime(targetHospital.getCreateTime());

        hospital.setUpdateTime(new Date());

        hospital.setStatus(0);

        hospitalRepository.save(hospital);

    }else{

        //4医院信息为空,新增数据

        hospital.setCreateTime(new Date());

        hospital.setUpdateTime(new Date());

        hospital.setStatus(0);

        hospitalRepository.save(hospital);

    }

  }

*创建接口方法

@Repository

  public interface HospitalRepository extends MongoRepository<Hospital,String> {

    //根据hoscode查询mongo,获取医院信息

    Hospital getByHoscode(String hoscode);

  }

5、启动服务进行测试

1)测试数据

2)联调测试

6、签名校验

1)验证数据

2)改造医院系统加密方式

3hosp实现获取签名秘钥接口

/**

 * 获取签名key

 * @param hoscode

 * @return

 */

  String getSignKey(String hoscode);

//获取签名key

  @Override

  public String getSignKey(String hoscode) {

  LambdaQueryWrapper<HospitalSet> wrapper = new LambdaQueryWrapper<>();

  wrapper.eq(HospitalSet::getHoscode,hoscode);
    HospitalSet hospitalSet = baseMapper.selectOne(wrapper);

    if(hospitalSet!=null){

        return hospitalSet.getSignKey();

    }else{

        throw new YyghException(20001,"获取签名失败");

    }

  }

4)改造上传接口

@ApiOperation(value = "上传医院")

  @PostMapping("saveHospital")

  public Result saveHospital(HttpServletRequest request) {

    //1request获取参数,类型转化

    Map<String, String[]> parameterMap = request.getParameterMap();

    Map<String, Object> paramMap = HttpRequestHelper.switchMap(parameterMap);

    //2 进行验签

    //2.1获取相关参数

    String hoscode = (String) paramMap.get("hoscode");

    String sign = (String) paramMap.get("sign");

    //2.2获取签名秘钥

    String signKey = hospitalSetService.getSignKey(hoscode);

    //2.3 MD5加密签名秘钥

    String signKeyMD5 = MD5.encrypt(signKey);

    System.out.println("sign = " + sign);

    System.out.println("signKeyMD5 = " + signKeyMD5);

    //2.4 进行验签

    if(!sign.equals(signKeyMD5)){

        throw new YyghException(20001,"签名校验不通过");

    }

  

    //传输过程中“+”转换为了“ ”,因此我们要转换回来

    String logoData = (String)paramMap.get("logoData");

    logoData = logoData.replaceAll(" ","+");

    paramMap.put("logoData",logoData);

  

    //3 保存医院信息

    hospitalService.save(paramMap);

    //4 返回结果

    return Result.ok();

  }

5)测试

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【用IDEA基于Scala2.12.18开发Spark 3.4.1 项目】

目录 使用IDEA创建Spark项目设置sbt依赖创建Spark 项目结构新建Scala代码 使用IDEA创建Spark项目 打开IDEA后选址新建项目 选址sbt选项 配置JDK debug 解决方案 相关的依赖下载出问题多的话&#xff0c;可以关闭idea&#xff0c;重启再等等即可。 设置sbt依赖 将sbt…

Linux6.2 ansible 自动化运维工具(机器管理工具)

文章目录 计算机系统5G云计算第一章 LINUX ansible 自动化运维工具&#xff08;机器管理工具&#xff09;一、概述二、ansible 环境安装部署三、ansible 命令行模块1.command 模块2.shell 模块3.cron 模块4.user 模块5.group 模块6.copy 模块7.file 模块8.hostname 模块9.ping …

【Python入门系列】第十九篇:Python基于协同过滤推荐系统的实现

文章目录 前言一、协同过滤算法简介二、计算相似度三、Python实现简单的协同过滤推荐系统总结 前言 推荐系统是现代互联网平台中的重要组成部分&#xff0c;它可以根据用户的兴趣和行为&#xff0c;向其推荐个性化的内容。协同过滤是推荐系统中常用的一种方法&#xff0c;它基…

POI信息点的diPointX、diPointY转化成经纬度

需求&#xff1a;接口返回某个地点的数据&#xff08;diPointX、diPointY&#xff09;&#xff0c;前端需把该地点转化成经纬度形式在地图上进行Marker标记。 实现&#xff1a;&#xff08;查找百度地图开发文档&#xff09; 代码验证&#xff1a; console.log(new BMap.Merca…

性能测试问题之慢sql分析

我们在做性能测试的时候&#xff0c;慢sql也可以说是很常见问题&#xff0c;我的性能测试生涯几乎经常遇到慢sql&#xff0c;那么我们怎么来判断有没有慢sql呢&#xff0c;有慢sql后怎么来分析优化呢?如图&#xff1a; 通过上图看可以看到当存在慢sql的时候&#xff0c;这里会…

火爆全网,接口自动化测试-DDT数据驱动实战总结,一篇贯通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 DDT&#xff08;D…

信息安全:网络安全体系 与 网络安全模型.

信息安全&#xff1a;网络安全体系 与 网络安全模型. 网络安全保障是一项复杂的系统工程&#xff0c;是安全策略、多种技术、管理方法和人员安全素质的综合。一般而言&#xff0c;网络安全体系是网络安全保障系统的最高层概念抽象&#xff0c;是由各种网络安全单元按照一定的规…

python更换iterm2背景图片

背景 在看知乎的时候&#xff0c;突然看到了这样的一个视频教程&#xff0c;用python代码更换iterm2的背景。于是我细细的研究一下。视频地址 视频中提到的参考文章地址&#xff1a; iterm2官网官方仓库 实现过程 我直接把作者的代码粘贴如下&#xff0c;首先需要安装iter…

pycharm 使用远程服务器 jupyter (本地jupyter同理)

1. 远程服务器miniconda 环境中创建jupyter环境 # 1. 激活环境 conda activate envname#2. 在环境中安装jupyter pip install jupyter # 或者 conda install jupyter#3. 生成jupyter_notebook_config.py文件 jupyter notebook --generate-config#4. 设置密码 jupyter noteboo…

docker—springboot服务通信

文章目录 docker—springboot服务通信一、方式1、host 二、坑点末、参考资料 docker—springboot服务通信 一、方式 1、host 步骤&#xff1a; host文件增加域名解析&#xff1a; 127.0.0.1 rabbitmqapplication.yml&#xff1a; application.yml中&#xff0c;连接方式使用…

【HarmonyOS】API6使用storage实现轻量级数据存储

写在前面 本篇内容基于API6 JS语言进行开发&#xff0c;通过结合轻量级数据存储开发指导的文档&#xff0c;帮助大家完成一个实际的代码案例&#xff0c;通过这个小案例&#xff0c;可以实现简单数据的存储。 参考文档&#xff1a;文档中心 1、页面布局 首先我们编写一个简单…

C++容器——list的模拟实现

目录 一.list的基本结构 二. 接下来就是对list类构造函数的设计了&#xff1a; 三.链表数据的增加&#xff1a; 四.接下来就是迭代器的创建了&#xff1a; 四.简单函数的实现&#xff1a; 五.构造与析构 六.拷贝构造和赋值重载 传统写法: 现代写法&#xff1a; 七.迭…

Docker—— consul的容器服务更新与发现

Docker—— consul的容器服务更新与发现 一、Consul概述1.什么是服务注册与发现2.什么是consul 二、consul 部署1.consul服务器①. 建立 Consul 服务②. 查看集群信息③. 通过 http api 获取集群信息 2.registrator服务器①. 安装 Gliderlabs/Registrator②. 测试服务发现功能是…

别再被割韭菜了,小白几块钱就能打造专属AI知识库

随着AIGC各种项目的越发成熟&#xff0c;打造自己的知识库&#xff0c;对于企业和个人来说就变的门槛越来越低&#xff0c;自己的知识库&#xff0c;有许多的好处&#xff0c;上传自己的知识文档&#xff0c;能让对话变的更加垂直专业。 但是博主看到网站很多商家动辄几千的收…

使用docker-compose搭建lnmpr环境

源码gitee compose 使用的三个步骤&#xff1a; • 使用 Dockerfile 定义应用程序的环境。 • 使用 docker-compose.yml 定义构成应用程序的服务&#xff0c;这样它们可以在隔离环境中一起运行。 • 最后&#xff0c;执行 docker-compose up -d 命令来启动并运行整个应用程序…

Carla教程一:动力学模型到LQR

Carla教程一、动力学模型到LQR 从运动学模型和动力学模型到LQR 模型就是可以描述车辆运动规律的模型。车辆建模都是基于自行车模型的设定,也就是将四个轮子抽象为自行车一样的两个轮子来建模。 1、运动学模型 运动学模型是基于几何关系分析出来的,一般适用于低俗情况下,…

【西安交通大学】:融合传统与创新的学府之旅

【西安交通大学】&#xff1a;融合传统与创新的学府之旅 引言历史与发展学校特色学科优势院系专业校园环境与设施学生生活与社团活动校友荣誉与成就未来发展展望总结&#x1f340;小结&#x1f340; &#x1f389;博客主页&#xff1a;小智_x0___0x_ &#x1f389;欢迎关注&…

【Linux】Http协议的学习

文章目录 前言一、了解HTTP协议是如何规定的总结 前言 HTTP协议&#xff08;超文本传输协议&#xff09;和我们上一篇写的网络版计算器中自己定制的协议一样&#xff0c;只不过Http协议是是一个非常好用的协议&#xff0c;所以我们可以直接用现成的不用自己再搞一套了。 一、了…

LeetCode Top100 Liked 题单(序号1~17)

01Two Sum - LeetCode 我自己写的代码【193ms】 因为不知道怎么加cmp函数&#xff0c;就只能pair的first设为值了&#xff0c;但其实这也是瞎做&#xff0c;应该也是O(n&#xff09;吧 class Solution { public:vector<int> twoSum(vector<int>& nums, int …

【观察】智能运维的“下半场”,看云智慧如何“开新局”

毫无疑问&#xff0c;随着数字化转型的加速&#xff0c;越来越多的企业正在把数字化战略提升到一个全新的高度&#xff0c;转型的进程也正从“浅层次”的数字化走向“深层次”的数字化。 也正因此&#xff0c;过去传统的人工运维方式越来越“捉襟见肘”&#xff0c;谋求运维模…