练习SSM微博项目

news2024/11/26 3:35:42

微博项目

项目概述

​ 该项目是一款社交媒体应用,用户可以在平台上发表短文、图片等信息,分享自己的想法、心情和生活。微博的用户群体广泛,包括个人、娱乐明星、公司、政府官方等。

项目功能

  1. 用户管理

    用户可以注册微博账号,登录登出微博网站。

  2. 发布微博

    用户可以在平台上发布文本形式的微博。

  3. 查看微博

    用户可以查看所有的微博。

  4. 评论功能

    用户可以对所有微博进行评论,并且查看某条微博的所有评论。

数据库设计

  • 本项目共计3张表
    • 用户表:存储用户信息;
    • 微博表:存储发布的微博信息;
    • 评论表:存储每条微博的评论。
  • 表关系
    • 用户表和微博表:一对多,一个用户可以发布多条微博,一条微博只能归属于一个用户;
    • 用户表和评论表:一对多,一个用户可以发布多条评论,一条评论只能归属于一个用户;
    • 微博表和评论表:一对多,一条微博下可以有多条评论,一条评论只能归于与一条微博。
  • 表字段设计
    • 用户表user
      • 用户编号:id
      • 用户名:username
      • 密码:password
      • 昵称:nickname
      • 注册时间:created
    • 微博表weibo
      • 微博编号:id
      • 微博内容:content
      • 发布时间:created
      • 用户编号:user_id
    • 评论表comment
      • 评论编号:id
      • 评论内容:content
      • 评论时间:created
      • 用户编号:user_id
      • 微博编号:weibo_id

项目实现

1 建库建表

  • 库名:blog

  • SQL语句

    DROP DATABASE IF EXISTS blog;
    CREATE DATABASE blog;
    USE blog;
    CREATE TABLE user(
        id INT PRIMARY KEY AUTO_INCREMENT,
        username VARCHAR(50),
        password VARCHAR(50),
        nickname VARCHAR(50),
        created TIMESTAMP
    );
    
    CREATE TABLE weibo(
        id INT PRIMARY KEY AUTO_INCREMENT,
    	content VARCHAR(255),
        created TIMESTAMP,
        user_id INT
    );
    
    CREATE TABLE comment(
    	id INT PRIMARY KEY AUTO_INCREMENT,
        content VARCHAR(255),
        created TIMESTAMP,
        user_id INT,
        weibo_id INT
    );
    

2 项目准备

  • 创建工程weibo,3个钩,SpringBoot版本为2.7.11;

  • application.properties中配置数据库连接信息

    spring.datasource.url=jdbc:mysql://localhost:3306/blog?serverTimezone=Asia/Shanghai&characterEncoding=utf8
    spring.datasource.username=root
    spring.datasource.password=root
    
  • application.properties中配置MyBatis-xml映射路径配置

    # 设置MyBatis框架的映射(Mapper)配置文件的位置
    mybatis.mapper-locations=classpath:mappers/*.xml
    
  • 将weibo-html中所有html文件拷贝到当前工程的static目录下

    1. index.html 微博首页
    2. reg.html 微博注册页
    3. login.html 微博登录页
    4. insert.html 发布微博页面
    5. detail.html 微博详情页
  • 启动工程浏览器测试

    http://localhost:8080/index.html

3 用户模块

3.1 注册功能

  • 注册API接口

    • 请求地址:/v1/users/reg

    • 请求方法:POST

    • 请求体数据:username、passsword、nickname

    • 返回响应:int

      返回值为1,代表注册成功

      返回值为2,代表用户名已存在

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tCjRLelw-1684145360437)(E:/TeduWork/jsd2303-springmvc-tea/note/04weiboProject/images/image-20230424093536072.png)]

  • 功能实现

    1. 工程目录下新建包Package,com.liner.weibo.pojo.entity

    2. 创建VO的Package和DTO的Package

      com.liner.weibo.pojo.vo

      com.liner.weibo.pojo.dto

    3. entity中创建3个实体类

      • entity.User 封装用户表实体类

        public class User {
            private Integer id;
            private String username;
            private String password;
            private String nickname;
            private Date created;
            
            // Getter() Setter() toString() 
        }
        
      • entity.Weibo 封装微博表实体类

        public class Weibo {
            private Integer id;
            private String content;
            private Date created;
            private Integer userId;
            
            // Getter() Setter() toString() 
        }
        
      • entity.Comment 封装评论表实体类

        public class Comment {
            private Integer id;
            private String content;
            private Date created;
            private Integer userId;
            private Integer weiboId;
            
            // Getter() Setter() toString() 
        }
        
    4. pojo.dto下新建UserRegDTO,为客户端向服务器端传递的数据

      public class userRegDTO {
          private String username;
          private String password;
          private String nickname;
          
          // Getter() Setter() toString()
      }
      
    5. 实现注册功能 controller.UserController

      @RestController
      @RequestMapping("/v1/users/")
      public class UserController {
          @RequestMapping("reg")
          public int reg(@RequestBody UserRegDTO userRegDTO){
              System.out.println("userRegDTO = " + userRegDTO);
              // 用户表中查询该用户名是否被占用
              
              return 1;
          }
      }
      
    6. 重启工程浏览器测试一下

    7. 处理mapper相关

      • 7-1 创建mapper.UserMapper

        public interface UserMapper {
            UserVO selectByUsername(String username);
        }
        
      • 7-2 创建config.MybatisConfig

        @Configuration
        @MapperScan("com.liner.weibo.mapper")
        public class MybatisConfig {
        }
        
      • 7-3 创建pojo.vo.UserVO 为数据库查询数据给到客户端

        public class UserVO {
            /**
             需要数据:
             id,后期登录完成后用户要发微博需要使用用户id
             password,登录时的密码校验也需要用到
             nickname,登录成功后需要在页面展示用户的昵称
             */
            private Integer id;
            private String password;
            private String nickname;
            
            // 生成setter() getter() toString()
        }
        
      • 7-4 创建mappers目录,拷贝xml文件重命名为 UserMapper.xml

        <!-- 填写namespace,写UserMapper的绝对路径 -->
        <mapper namespace="com.liner.weibo.mapper.UserMapper">
            <select id="selectByUsername" resultType="com.liner.weibo.pojo.vo.UserVO">
                SELECT id,password,nickname FROM user WHERE username=#{username}
            </select>
        </mapper>
        
    8. controller.UserController 处理注册请求

      @RestController
      @RequestMapping("/v1/users/")
      public class UserController {
      
          @Autowired(required = false)
          UserMapper mapper;
      
          @RequestMapping("reg")
          public int reg(@RequestBody UserRegDTO userRegDTO){
              System.out.println("userRegDTO = " + userRegDTO);
      
              /**判断用户名是否被占用 */
              UserVO userVO = mapper.selectByUsername(userRegDTO.getUsername());
              if (userVO != null){
                  return 2; // 用户名已存在
              }
      
              // 存入数据:存入数据永远使用实体类
              User user = new User();
              // 把DTO中已有的属性复制到实体类中
              BeanUtils.copyProperties(userRegDTO, user);
              // 给id和created赋值,id会自动赋值
              user.setCreated(new Date());
              // 存入数据库
              mapper.insert(user);
      
              return 1;
          }
      }
      
    9. mapper.UserMapper 封装映射接口

      int insert(User user);
      
    10. mappers.UserMapper.xml 定义xml配置文件

      <insert id="insert">
          INSERT INTO user VALUES (NULL,#{username},#{password},#{nickname},#{created})
      </insert>
      
    11. 重启工程浏览器测试

3.2 登录功能

  • 登录功能API接口

    • 请求的地址:/v1/users/login

    • 请求方法:POST

    • 请求体数据:用户名username、密码password

    • 返回响应:整型int

      1 - 登录成功

      2 - 密码错误

      3 - 用户名不存在

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xMbPCbZr-1684145360439)(E:/TeduWork/jsd2303-springmvc-tea/note/04weiboProject/images/image-20230424093648534.png)]

  • 功能实现

    1. controller.UserController 处理请求

      @RequestMapping("login")
      public int login(@RequestBody UserLoginDTO userLoginDTO){
          System.out.println("userLoginDTO = " + userLoginDTO);
      
          return 1;
      }
      
    2. pojo.dto.UserLoginDTO 封装登录的DTO

      public class UserLoginDTO {
          private String username;
          private String password;
          
          // 生成setter() getter()  toString()
      }
      
    3. controller.UserController 继续处理请求

      @RequestMapping("login")
      public int login(@RequestBody UserLoginDTO userLoginDTO){
          System.out.println("userLoginDTO = " + userLoginDTO);
          UserVO userVO = mapper.selectByUsername(userLoginDTO.getUsername());
          if (userVO != null){
              if (userVO.getPassword().equals(userLoginDTO.getPassword())){
                  return 1; // 登录成功
              }
              return 2; // 密码错误
          }
      
          return 3; // 用户名不存在
      }
      
    4. 重启工程浏览器测试

3.3 判断登录状态

  • 说明

    进入首页时,会自动向后端发请求,获取当前用户的登录状态,分为以下两种情况:

    如果未登录,则显示注册登录页面;

    如果是登录状态,则显示欢迎xxx回来,并显示退出登录按钮。

    • 未登录显示首页面

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YvTe5HPI-1684145360440)(E:/TeduWork/jsd2303-springmvc-tea/note/04weiboProject/images/image-20230424093818266.png)]

    • 登录显示首页面

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aUhJCiq0-1684145360441)(E:/TeduWork/jsd2303-springmvc-tea/note/04weiboProject/images/image-20230424094026941.png)]

  • API文档

    • 请求地址:/v1/users/currentUser
    • 请求方法:GET
    • 查询字符串:无
    • 返回响应
      • 用户对象:表示是登录状态,示例:UserVO{id=1,nickname=“赵丽颖”,password=“123456”}
      • 空值null: 表示未登录状态
  • 功能实现

    1. controller.UserController 处理请求

      @RequestMapping("currentUser")
      public UserVO currentUser(){
          /**
               1.如何获取当前登录用户的对象?使用会话技术
                 在登录成功时将UserVO存入会话中(服务器内存中),在此controller中来获取该值
                 1.1 获取到UserVO: 登录状态
                 1.2 获取不到UserVO: 未登录状态
               2.说明
                 每个客户端都会有一个专属的会话对象,所以需要在登录成功的时候存入会话对象,后期再获取
               */
          return null;
      }
      
    2. 修改登录功能的 controller ,保存登录状态

       @RequestMapping("login")
      // 1.添加会话参数
      public int login(@RequestBody UserLoginDTO userLoginDTO, HttpSession session){
          System.out.println("userLoginDTO = " + userLoginDTO);
          UserVO userVO = mapper.selectByUsername(userLoginDTO.getUsername());
          if (userVO != null){
              if (userVO.getPassword().equals(userLoginDTO.getPassword())){
                  // 2.登录成功后将UserVO保存到当前客户端的会话状态中
                  session.setAttribute("user", userVO);
                  return 1; // 登录成功
              }
              return 2; // 密码错误
          }
      
          return 3; // 用户名不存在
      }
      
    3. 完成获取当前登录状态的controller 获取登录状态

      @RequestMapping("currentUser")
      // 1.添加会话参数
      public UserVO currentUser(HttpSession session){
          // 2.从当前客户端对应的会话对象中取出登录的UserVO
          UserVO user = (UserVO) session.getAttribute("user");
      
          /**
           如果登录过返回user对象,未登录过返回null
           */
          return user;
      }
      
    4. 重启工程测试

3.4 退出登录功能

  • 说明

    用户登录成功后,点击退出登录,则返回首页,并为未登录的状态。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mk9sPsuq-1684145360441)(E:/TeduWork/jsd2303-springmvc-tea/note/04weiboProject/images/image-20230424094149008.png)]

  • API文档

    点击退出登录按钮时

    • 请求地址:/v1/users/logout
    • 请求方法:GET
    • 返回值:无
  • 功能实现

    1. controller.UserController 处理退出登录请求

      // 退出登录功能
      @RequestMapping("logout")
      public void logOut(HttpSession session){
          session.removeAttribute("user");
      }
      
    2. 重启工程测试

4 微博模块

4.1 发布微博功能

insert.html

  • 接口说明

    • 请求地址:/v1/weibo/insert

      • 请求方法:POST

      • 请求体数据:微博内容content

      • 返回值:

        1 - 发布成功;

        2 - 未登录,发布微博失败。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lj23U7fx-1684145360442)(E:/TeduWork/jsd2303-springmvc-tea/note/04weiboProject/images/image-20230511230444920.png)]

  • 功能实现
  1. controller.WeiboController 处理发布微博请求

    @RestController
    @RequestMapping("/v1/weibo/")
    public class WeiboController {
        // 发布微博功能
        @RequestMapping("insert")
        // 1.封装发布微博的数据对象
        public int insert(@RequestBody WeiboDTO weiboDTO, HttpSession session){
            // 2.从会话对象中得到登录成功时保存的用户对象
            UserVO user = (UserVO) session.getAttribute("user");
            if (user == null){ //未登录
                return 2; 
            }
            return 1;
        }
    }
    
  2. pojo.dto.WeiboDTO 封装客户端传递给服务端的数据

    public class WeiboDTO {
        private String content;
        
        // 生成setter() getter() toString()
    }
    
  3. controller.WeiboController 处理发布微博请求

    @RestController
    @RequestMapping("/v1/weibo/")
    public class WeiboController {
        // 5.装配
        @Autowired(required = false)
        WeiboMapper weiboMapper;
    
        // 发布微博功能
        @RequestMapping("insert")
        // 1.封装发布微博的数据对象
        public int insert(@RequestBody WeiboDTO weiboDTO, HttpSession session){
            // 2.从会话对象中得到登录成功时保存的用户对象
            UserVO user = (UserVO) session.getAttribute("user");
            if (user == null){ //未登录
                return 2;
            }
    
            // 3.将数据存入微博表,注意复制属性
            Weibo w = new Weibo();
            BeanUtils.copyProperties(weiboDTO, w);
            w.setCreated(new Date());
            w.setUserId(user.getId());
    
            // 4.通过mapper存入数据表
            weiboMapper.insert(w);
    
            return 1;
        }
    }
    
  4. mapper.WeiboMapper 定义映射入口

    @Mapper
    public interface WeiboMapper {
        // 将数据存入微博表
        int insert(Weibo weibo);
    }
    
  5. mappers.WeiboMapper.xml 定义xml配置文件

    <mapper namespace="com.liner.weibo.mapper.WeiboMapper">
        <insert id="insert">
            INSERT INTO weibo VALUES (NULL,#{content},#{created},#{userId})
        </insert>
    </mapper>
    
  6. 重启工程测试

    SELECT * FROM weibo;

4.2 首页微博列表展示

index.html

  • 说明

    用户进入首页会自动向后端发请求获取所有微博,用户可以看到所有的微博,无须登录。

  • API文档

    • 请求地址:/v1/weibo/selectIndex
    • 请求方法:GET
    • 查询参数:无
    • 返回响应:List

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1024hLeB-1684145360443)(E:/TeduWork/jsd2303-springmvc-tea/note/04weiboProject/images/image-20230424100409433.png)]

  • 功能实现

    1. controller.WeiboController 处理查询微博请求

      // 首页展示微博列表
      @RequestMapping("selectIndex")
      public List<WeiboIndexVO> selectIndex(){
          return weiboMapper.selectIndex();
      
  1. pojo.vo.WeiboIndexVO 封装服务端需要返回给客户端的数据

      public class WeiboIndexVO {
          // 显示微博的id content , 再显示一个nickname
          private Integer id;
          private String content;
          private String nickname;
      }
    
  2. mapper.WeiboMapper 定义映射接口

      // 首页微博列表数据
      List<WeiboIndexVO> selectIndex();
    
  3. mappers.WeiboMapper.xml 定义xml配置文件

      <select id="selectIndex" resultType="com.liner.weibo.pojo.vo.WeiboIndexVO">
          SELECT w.id, w.content, u.nickname 
          FROM weibo w JOIN user u ON w.user_id=u.id;
      </select>
    
  4. 重启工程测试

4.3 微博详情页功能

  • 说明

    用户在列表页点击微博,进入微博详情页,会显示该条微博的内容、发布者昵称、图片、发布时间等信息。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GGxHtR4X-1684145360443)(E:/TeduWork/jsd2303-springmvc-tea/note/04weiboProject/images/image-20230424100623644.png)]

  • API文档

    • 请求地址:/v1/weibo/selectById?id=微博id
    • 请求方法:GET
    • 查询参数:?id=微博id
    • 返回响应:WeiboDetailVO
  • 功能实现

    1. controller.WeiboController 处理微博详情页查询请求

      // 微博详情页列表
      @RequestMapping("selectById")
      public WeiboDetailVO selectById(int id){
          return weiboMapper.selectById(id);
      }
      
    2. pojo.vo.WeiboDetailVO 封装服务端返回给客户端的数据

      public class WeiboDetailVO {
          // 原则:用啥查啥
          private Integer id;
          private String content;
          @JsonFormat(pattern = "yyyy年MM月dd号 HH点mm分ss秒", timezone = "GMT+8")
          private Date created;
          private String nickname;
          
          // setter() getter() toString()
      }
      
    3. mapper.WeiboMapper 定义映射接口

      // 微博详情页数据
      WeiboDetailVO selectById(int id);
      
    4. mappers.WeiboMapper.xml 定义xml配置文件

      <select id="selectById" resultType="com.liner.weibo.pojo.vo.WeiboDetailVO">
          SELECT w.id, w.content,w.created, u.nickname
          FROM weibo w JOIN user u ON w.user_id=u.id
          WHERE w.id=#{id}
      </select>
      
    5. 重启工程测试

5 评论模块

5.1 发布评论功能

  • 说明

    用户在微博详情页可以输入内容,对此条微博内容进行评论,必须为登录状态。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-epKg5YGq-1684145360444)(E:/TeduWork/jsd2303-springmvc-tea/note/04weiboProject/images/image-20230424101458743.png)]

  • API文档

    用户点击评论按钮时触发

    • 请求地址:/v1/comment/insert

    • 请求方法:POST

    • 请求体数据:评论内容comment、微博的id

    • 响应内容:整型int

      1 - 评论成功

      2 - 未登录,不能评论,前端会跳转到登录页面

  • 功能实现

    1. controller.CommentController 处理发布评论的请求

      @RestController
      @RequestMapping("/v1/comment/")
      public class CommentController {
          // 发表评论
          @RequestMapping("insert")
          public int insert(@RequestBody CommentDTO commentDTO, HttpSession session){
              return 1;
          }
      }
      
    2. pojo.dto.CommentDTO 封装客户端传递给服务端的数据

      public class CommentDTO {
          // 评论内容,微博ID
          private String content;
          private Integer weiboId;
          
          // setter() getter() toString()
      }
      
    3. mapper.CommentMapper 定义映射接口

      // 存入评论表
      int insert(Comment comment);
      
    4. mappers.CommentMapper.xml 定义xml配置文件

      <mapper namespace="com.liner.weibo.mapper.CommentMapper">
          <insert id="insert">
              INSERT INTO comment VALUES (NULL,#{content},#{created},#{userId},#{weiboId})
          </insert>
      </mapper>
      
    5. controller.CommentController 继续处理发布评论请求

      @RestController
      @RequestMapping("/v1/comment/")
      public class CommentController {
      
          @Autowired(required = false)
          CommentMapper commentMapper;
      
          // 发表评论
          @RequestMapping("insert")
          public int insert(@RequestBody CommentDTO commentDTO, HttpSession session){
              System.out.println("commentDTO = " + commentDTO);
              // 1.校验登录状态
              UserVO userVO = (UserVO) session.getAttribute("user");
              if (userVO == null){
                  return 2;
              }
      
              // 2.利用实体类存入数据
              Comment c = new Comment();
              BeanUtils.copyProperties(commentDTO, c);
              c.setCreated(new Date());
              c.setUserId(userVO.getId());
              commentMapper.insert(c);
      
              return 1;
          }
      }
      
    6. 重启工程测试

      select * from comment;

5.2 获取评论列表

  • 说明

    用户进入微博详情页之后,会显示该条微博的所有评论,此功能无须登录。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IpxATaQo-1684145360444)(E:/TeduWork/jsd2303-springmvc-tea/note/04weiboProject/images/image-20230424101326987.png)]

  • API文档

    • 请求地址:/v1/comment/selectByWeiboId?id=微博id
    • 请求方法:GET
    • 查询参数:?id=微博id
    • 响应内容:List
  • 功能实现

    1. controller.CommentController 处理查询微博评论请求

      // 获取评论
      @RequestMapping("selectByWeiboId")
      public List<CommentVO> selectByWeiboId(int id){
          return commentMapper.selectByWeiboId(id);
      }
      
    2. pojo.vo.CommentVO 封装服务端传递给客户端的数据

      public class CommentVO {
          private Integer id;
          private String content;
          @JsonFormat(pattern = "yyyy/MM/dd HH:mm:ss", timezone = "GMT+8")
          private Date created;
          private String nickname;
          
          // setter() getter() toString()
      }
      
    3. mapper.CommentMapper 定义映射接口

      List<CommentVO> selectByWeiboId(int id);
      
    4. mappers.CommentMapper.xml 定义xml配置文件

      <select id="selectByWeiboId" resultType="com.liner.weibo.pojo.vo.CommentVO">
          SELECT c.id,c.content,c.created,u.nickname
          FROM comment c JOIN user u ON c.user_id=u.id
          WHERE weibo_id=#{id}
      </select>
      
    5. 重启工程到微博详情页测试

结合常用插件Lombok和Knife4J进行升级优化

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

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

相关文章

​ES elasticsearch-analysis-dynamic-synonym​连接数据库动态更新synonym近义词

前言 在很多搜索场景中&#xff0c;我们希望能够搜索出搜索词相关的目标&#xff0c;同时也希望能搜索出其近义词相关的目标。例如在商品搜索中&#xff0c;搜索“瓠瓜”&#xff0c;也希望能够搜索出“西葫芦”&#xff0c;但“西葫芦”商品名称因不含有“瓠瓜”&#xff0c;导…

今年流行的人工智能AI 人脸生成器,你懂的。

使用人工智能 (AI) 继续革新我们与技术和环境互动的方式。AI 最令人兴奋的应用之一是人脸生成器&#xff0c;它可以根据输入数据创建逼真、高质量的图像。 在这篇博文中&#xff0c;我们将讨论当今可用的 10 大AI 人脸生成器&#xff0c;探索它们的功能和性能&#xff0c;并发…

DDD重构中台业务

大家好&#xff0c;我是易安&#xff01;今天我们谈一谈如何使用DDD重构中台业务。 DDD有两把利器&#xff0c;那就是它的战略设计和战术设计方法。中台在企业架构上更多偏向业务模型&#xff0c;形成中台的过程实际上也是业务领域不断细分的过程。在这个过程中我们会将同类通用…

selenium+Java环境搭建

目录 ①下载Chrome浏览器并查看浏览器版本 ②下载解压Chrome浏览器驱动 ③配置Java环境 ④将驱动文件放到jdk的bin文件目录下 ⑤验证环境是否搭建成功 1、创建java&#xff08;Maven&#xff09;项目&#xff0c;在pom.xml中添加依赖 2、在java文件创建Main类 &am…

[刷题]贪心入门

文章目录 贪心区间问题区间选点区间合并区间覆盖 哈夫曼树&#xff08;堆&#xff09;合并果子 排序不等式排队打水 绝对值不等式货仓选址 推出来的不等式耍杂技的牛 以前的题 贪心 贪心&#xff1a;每一步行动总是按某种指标选取最优的操作来进行&#xff0c; 该指标只看眼前&…

SpringBoot 整合ElasticSearch实现模糊查询,批量CRUD,排序,分页,高亮

准备工作 准备一个空的SpringBoot项目 写入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>注意你的SpringBoot和你的es版本&#xff0…

都说测试行业饱和了,为啥我们公司给初级测试还能开到了12K?

故事起因&#xff1a; 最近我有个刚毕业的学生问我说&#xff1a;我感觉现在测试行业已经饱和了&#xff0c;也不是说饱和了&#xff0c;是初级的测试根本就没有公司要&#xff0c;哪怕你不要工资也没公司要你&#xff0c;测试刚学出来&#xff0c;没有任何的项目经验和工作经验…

2023年门店管理系统如何选?简单好用的门店管理系统有哪些?

开单收银效率低、商品管理混乱、记账对账耗时耗力还易出错...... 是我们在进行门店管理过程中常见的问题。 为了改善门店管理遇到的这几大问题&#xff0c;提高门店管理效率&#xff0c;越来越多的门店开始使用门店管理系统。 但如何选择简单实用、性价比高的门店管理系统&…

肠道核心菌属——Lachnoclostridium

谷禾健康 Lachnoclostridium属是一类革兰氏阳性菌&#xff0c;专性厌氧、形成孢子、属于Clostridiales目、Lachnospiraceae科、Firmicutes门。该属最初被描述为Clostridium phytofermentans&#xff0c;后来被重新分类为Lachnoclostridium属。 Lachnoclostridium属包括来自Lach…

00后真的是内卷王中王,真的想离职了....

都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。这不&#xff0c;前段时间我们公司来了个00年的&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。…

微服务通讯:gRPC入门教程

微服务通讯&#xff1a;个、RPC入门教程 gRPC是一个RPC框架&#xff0c;用于服务器之间服务的相互通讯&#xff0c;常见微服务项目开发中。市面上的RPC有很多&#xff0c;例如&#xff1a;dubbo、SpringCloud底层封装的等 1 概念 1.1 gRPC gRPC是一个高性能、开源的通用RPC&am…

计算机组成原理主要问题汇总(五)

一、定点数的原码、补码、反码和移码的表示和相互转换方法 1、原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位&#xff08;即最高位为符号位&#xff09;&#xff1a;正数该位为0&#xff0c;负数该位为1&#xff08;0有两种…

JavaEE(系列5) -- 多线程带来的风险(线程安全)

我们直接给出含有一个bug的例子 创建两个线程&#xff0c;各执行5w次自增。正常情况&#xff0c;结果是10w。 初始代码如下: package threading; //线程不安全 class Counter{private int count0;public void add(){count;}public int get(){return count;} } public class Th…

【项目实训】ATM自助取款系统

文章目录 1. 课程设计目的2. 课程设计任务与要求3. 课程设计说明书3.1 需求分析3.1.1 功能分析3.1.2 性能要求分析 3.2 概要设计3.2.1 功能模块图 3.3 详细设计3.3.1 实体类的设计3.3.2 实现数据库处理 3.4 主要程序功能流程图 4. 课程设计成果4.1 完整代码4.2 运行结果4.2.1 精…

最常用的开源免费自动化测试工具整理汇总 ,总有一款适合你

目录 1、Selenium 2、JMeter 3、Appium 4、Soapui 5、Postman 6、Robot Framework 7、Monkey 8、GT 9、Appscan 10、Jenkins 1、Selenium 官网&#xff1a; WebUI自动化测试 Selenium是一个用于Web应用程序测试的工具&#xff0c;Selenium已经成为Web自动化测试工程…

SpringCloud源码探析(六)-消息队列RabbitMQ

1.概述 RabbitMQ是一个开源的消息代理和队列服务器&#xff0c;它是基于Erlang语言开发&#xff0c;并且是基于AMQP协议的。由于Erlang语言最初使用与交换机领域架构&#xff0c;因此使得RabbitMQ在Broker之间的数据交互具有良好的性能。AMQP(Advanced Message Queuing Protoc…

路径规划算法:基于多元宇宙算法的路径规划算法- 附代码

路径规划算法&#xff1a;基于多元宇宙优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于多元宇宙优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

【Unity Optimize】使用对象池(Object Pooling)优化项目

目录 1 对象池&#xff08;Object Pooling&#xff09;介绍2 实现对象池脚本3 使用对象池生成Cube4 效果展示5 Unity资源商店的对象池插件 1 对象池&#xff08;Object Pooling&#xff09;介绍 Unity中的对象池&#xff08;Object Pooling&#xff09;是一种用于提高游戏性能…

教程详解|如何在PICO眼镜中接入VR全景?

伴随着《万人狂欢泼水节》首场VR直播开启&#xff0c;PICO视频正式推出《跟着PICO去旅行》系列VR文旅直播节目&#xff0c;通过PICO眼镜结合VR技术向众多观众展现更多祖国的大好山河&#xff0c;通过PICO眼镜身临其境地感受云游世界的美妙。 经历了十余年的发展&#xff0c;VR…

esp32环境安装教程---arduino IDE

前言 &#xff08;1&#xff09;最近突然对esp32感兴趣了&#xff0c;源于逛油管的时候&#xff0c;总是看到很多大佬使用esp32cam进行网络图传&#xff0c;做摄像头。个人比较感兴趣&#xff0c;在环境安装过程遇到了很多坑&#xff0c;所以在此跟大家分享一下。 &#xff08;…