当前位置: 首页 > article >正文

医院信息化与智能化系统(12)

医院信息化与智能化系统(12)

这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置
如果你想通过文字描述或代码画流程图,可以试试PlantUML,告诉GPT你的文件结构,让他给你对应的代码

预约挂号微服务模块搭建

前端知识点补充,此章节不会详细讲具体前端的每个知识点

1、MongoDB基本概念与操作

SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

文档

MongoDB 的文档采用 BSON(Binary JSON)格式存储,允许在同一个集合中的不同文档具有不同的结构。每个文档是一组键值对,

灵活性:在关系型数据库中,每个表的结构是固定的,所有行必须包含相同的列。而在 MongoDB 中,集合中的文档可以有不同的字段,这为数据建模提供了极大的灵活性。

不同数据类型:即使在同一个文档中,同一个字段也可以存储不同的数据类型,例如字符串、数字、数组或对象。

// 文档 1
{
  "_id": 1,
  "name": "Alice",
  "age": 30,
  "email": "alice@example.com",
  "address": {
    "city": "New York",
    "zip": "10001"
  }
}
// 文档 2
{
  "_id": 2,
  "name": "Bob",
  "age": 25,
  "email": "bob@example.com",
  "hobbies": ["reading", "traveling"]
}

集合

在 MongoDB 中,集合(Collection) 类似于关系型数据库中的,但有显著的不同。集合是 MongoDB 中数据存储的基本单位,用于存储一组文档

2、Spring boot集成mongodb

新建一个项目学习mongodb

正常创建maven项目,导入依赖,在application.properties文件添加配置:

spring.data.mongodb.uri=mongodb://192.168.x.xx:27017/test

接着创建对应的实体类,在实体类上添加注解@Document("User"),用于将 Java 类映射到 MongoDB 集合;同时,在字段id上添加@Id 注解用于标记该字段为文档的主键(唯一标识符)。

spring-data-mongodb提供了MongoTemplateMongoRepository两种方式访问mongodb,MongoRepository操作简单,MongoTemplate操作灵活。

MongoTemplate操作

  1. 添加操作
 //添加操作
    @Test
    public void demo1(){
        User user = new User();
        user.setAge(20);
        user.setName("test");
        user.setEmail("123@qq.com");
        User user1 = mongoTemplate.insert(user);
        System.out.println(user1);
    }
  1. 查询操作
    @Test
    public void findALL(){
        List<User> all = mongoTemplate.findAll(User.class);
        System.out.println(all);
    }
    @Test
    public void findId(){
        User byId = mongoTemplate.findById("671f886ad9fb3d735196e141", User.class);
        System.out.println(byId);
    }
  1. 条件查询
    @Test
    public void findUserList(){
		//查找name为“test”,同时age为20的结果
        Query query = new Query(Criteria.where("name").is("test").and("age").is(20));
        List<User> users = mongoTemplate.find(query, User.class);
        System.out.println(users);
    }
  1. 模糊查询

String regex = String.format("%s%s%s", "^.*", name, ".*$");:创建一个正则表达式,用于匹配包含 name 的字符串。该表达式的组成部分为:

  • ^.*:表示字符串开头的任意字符(包括零个字符)。
  • name:插入变量 name 的值。
  • .*$:表示字符串结尾的任意字符(包括零个字符)。

Pattern.compile编译正则表达式,创建一个不区分大小写的正则表达式模式 pattern。

Query(Criteria.where("name").regex(pattern)):创建一个MongoDB查询对象,指定要查找的字段为 name,并应用前面定义的正则表达式 pattern

    @Test
    public void findLikeUserList(){
        String name = "est";
        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);
        System.out.println(users);
    }
  1. 分页查询
    @Test
    public void findPageUserList(){
        int pageNo = 1;
        int pageSize = 3;
        String name = "est";
        //条件构建
        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));
        //分页构建
        //查询记录数
        long count = mongoTemplate.count(query, User.class);
        //分页
        List<User> users = mongoTemplate.find(
                query.skip((pageNo - 1) * pageSize).limit(pageSize), User.class);

  1. 修改操作
 @Test
    public void updateUser(){
        //根据id查询
        User user = mongoTemplate.findById("67202a8ef326a746bb6b5740", User.class);
        //设置修改值
        user.setName("test_1");
        user.setAge(50);
        user.setEmail("000@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 upsert = mongoTemplate.upsert(query, update, User.class);
		//影响行数
        long count = upsert.getModifiedCount();
    }
  1. 删除操作
    @Test
    public void deleteUser(){
        Query query = new Query(Criteria.where("_id").is("67202a8ef326a746bb6b5740"));
        DeleteResult remove = mongoTemplate.remove(query, User.class);
        long count = remove.getDeletedCount();
        System.out.println(count);
    }

基于MongoRepository开发CRUD

  1. 创建接口(interface),继承MongoRepository
  2. 在测试类创建该接口的实现类
  3. 测试方法

    //添加操作
    @Test
    public void create(){
        User user = new User();
        user.setAge(30);
        user.setName("张三");
        user.setEmail("3332200@qq.com");
        User user1 = userRepository.save(user);
        System.out.println(user1);
    }
    //全部查询
    @Test
    public void findALL(){
        List<User> all = userRepository.findAll();
        System.out.println(all);

    }
    //根据ID查询
    @Test
    public void findId(){
        User user = userRepository.findById("672038dfcd0e1e6c388b7316").get();
        System.out.println(user);
    }
    //条件查询
    @Test
    public void findUserList(){
        User user = new User();
        user.setName("张三");
        user.setAge(20);
        Example<User> userExample = Example.of(user);
        List<User> userList = userRepository.findAll(userExample);
        System.out.println(userList);

    }
    //模糊查询
    @Test
    public void findLikeUserList(){
        //创建匹配器,即如何使用查询条件
        ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
                //匹配规则
                .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
                .withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写
        User user = new User();
        user.setName("三");
        Example<User> userExample = Example.of(user, matcher);
        List<User> userList = userRepository.findAll(userExample);
        System.out.println(userList);
    }
        //分页查询
    @Test
    public void findPageUserList(){
        Sort sort = Sort.by(Sort.Direction.DESC, "age");
        //设置分页参数,0 代表第一页
        Pageable pageable = PageRequest.of(0, 3, sort);
        //创建匹配器,即如何使用查询条件
        ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
                .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
                .withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写
        User user = new User();
        user.setName("三");
        Example<User> userExample = Example.of(user, matcher);
        //创建实例
        Example<User> example = Example.of(user, matcher);
        Page<User> pages = userRepository.findAll(example, pageable);
        System.out.println(pages);
    }

    //修改操作
    @Test
    public void updateUser(){
        User user = userRepository.findById("672038dfcd0e1e6c388b7316").get();
        user.setName("张三_1");
        user.setAge(25);
        user.setEmail("883220990@qq.com");
        User save = userRepository.save(user);
        System.out.println(save);
    }
    //删除操作
    @Test
    public void deleteUser(){
        userRepository.deleteById("672038dfcd0e1e6c388b7316");
    }

http://www.kler.cn/a/370083.html

相关文章:

  • 【线性代数】列主元法求矩阵的逆
  • 客户案例:电商平台对帐-账单管理(亚马逊amazon)
  • 靠右行驶数学建模分析(2014MCM美赛A题)
  • 第二十四课 Vue中子组件调用父组件数据
  • ABP - 缓存模块(1)
  • 【Python项目】小区监控图像拼接系统
  • 极狐GitLab 发布安全补丁版本17.5.1, 17.4.3, 17.3.6
  • TextHarmony:视觉文本理解与生成的新型多模态大模型
  • 唤醒车机时娱乐屏出现黑屏,卡顿的案例分享
  • 深度学习(五):语音处理领域的创新引擎(5/10)
  • 106. 平行光阴影计算
  • springmvc请求源码流程解析(二)
  • 优先算法——移动零(双指针)
  • LVGL移植教程(超详细)——基于GD32F303X系列MCU
  • 人脸美颜 API 对接说明
  • 批量剪辑视频软件源码搭建全解析,支持OEM
  • 【瑞吉外卖】-day01
  • 使用 three.js 渲染个blender模型
  • 特定机器学习问题的基准测试数据
  • 【数据价值化】数据资产变现及管理规划
  • SQL语句优化之Sql执行顺序
  • 记录如何在RK3588板子上跑通paddle的OCR模型
  • 从零开始:使用Spring Boot搭建网上摄影工作室
  • c++二级指针
  • 数据结构作业day03
  • 我们正在谈论 CI/CD