人事管理系统总结

1.Maven 创建 Spring Boot 项目:

主要使用 Maven 创建 Spring Boot 项目、配置 MySQL 数据库、回顾 Spring Boot 分层架构、使用 MyBatis 逆向工程生成代码及整合测试项目等内容,具体如下:

  1. Maven 创建 Spring Boot 项目
    • 可通过 IDEA 直接创建,高版本 IDEA 若想使用低版本 JDK,也可借助阿里云国服地址(https://start.aliyun.com/)间接创建,创建时可预先选择如 MySQL 驱动、Spring Web 等必要依赖。
    • 项目创建成功后,运行时若出现数据库连接错误,可先注释屏蔽 pom.xml 中的 Mybatis 依赖。当控制台显示 Tomcat 在 8080 端口启动且项目启动时间等信息时,表明项目创建成功。
  2. MySQL 数据库配置
    • 可通过导入 example.sql 文件,或手动新建数据库及用户表(包含 name、pwd、userimg 等字段)来准备数据库。
    • Spring Boot 2.0 以后默认使用 Hikari 连接池,在 application.properties 中需配置数据源信息,包括驱动类、数据库 URL(高版本 MySQL 需设置时区参数)、用户名、密码及连接池相关参数(如最小空闲连接数、最大连接数等)。配置完成后,可恢复之前屏蔽的 Mybatis 依赖。
  3. Spring Boot 分层架构回顾
    • pojo 层:定义与数据库对应的属性,提供 get/set 方法、构造方法等。
    • dao 层:通过接口访问数据库,具体实现写在 mapper.xml 中。
    • service 层:调用 dao 层接口,先设计接口再实现,完成业务逻辑。
    • controller 层:负责前后端交互,接收前端请求并调用 service 层,返回响应数据。
  4. MyBatis 逆向工程
    • 在 pom.xml 中配置 mybatis-generator 插件及 MySQL 驱动依赖,指定 generatorConfig.xml 文件位置。
    • 在 generatorConfig.xml 中配置 pojo 类、mapper.xml 映射文件、持久层接口的生成路径,以及数据库连接信息和表名。执行插件后自动生成相关文件,需注意避免反复执行导致 sql 语句重复报错。
  5. 整合测试项目
    • 创建 service 和 controller 文件,在 application.properties 中配置 mybatis mapper 文件路径。
    • 在启动类中添加 @MapperScan 注解扫描 dao 层包,在 dao 接口和 mapper.xml 中定义并实现查询方法,service 层实现接口调用 dao 层,controller 层通过 service 层处理请求。启动项目后,通过访问指定 URL(如http://localhost:8081/admin/find)测试功能。

2.登录、MD5 加密及拦截器:

 Spring Boot 项目中登录功能实现、MD5 加密及拦截器配置,具体内容如下:

  1. 热部署配置
    • application.properties中添加配置spring.thymeleaf.cache=false,实现修改 HTML 页面后无需重启项目,刷新即可生效。
    • 同时需在 IDEA 设置中开启相关编译选项,确保热部署功能正常使用。
  2. 前端 UI 框架与页面结构
    • 采用 LayUI 作为前端框架,在resources/static目录下组织 CSS、JS、图片等静态资源,登录页面和后台主页分别为login.htmlindex.html,存放于templates/admin目录。
  3. Controller 层处理登录逻辑
    • 通过@GetMapping映射/userlogin/等路径,返回登录页面;映射/sys_index返回后台主页。
    • @PostMapping("/userlogin")接收前端提交的用户名和密码,校验非空后调用auserService.login()方法,并根据返回结果跳转页面或提示错误。
  4. Dao 层与 Service 层实现登录验证
    • Dao 层:在AuserMapper.java中定义login方法,接收用户名和密码参数;AuserMapper.xml中编写 SQL 语句,根据用户名和密码查询用户信息。
    • Service 层AuserService.java定义userlogin接口,AuserServiceImpl.java实现时对密码进行 MD5 加密(调用MD5Util.MD5Encode),再调用 Dao 层方法查询用户。
  5. 拦截器实现登录状态校验
    • 拦截器类AdminLoginInterceptor实现HandlerInterceptor,在preHandle方法中检查请求路径是否以/admin开头且 session 中无用户信息,若未登录则重定向到登录页面并提示错误。
    • 配置类MyWebMvcConfigurer通过@Configuration标记,注册拦截器并指定拦截路径(/admin/**),排除登录接口/admin/userlogin,确保未登录用户无法访问后台页面。

3.退出功能、验证码登录及用户信息修改:

 Spring Boot 项目中退出功能、验证码登录及用户信息(含密码)修改的实现,具体内容如下:

  1. 退出系统实现
    • AuserController中通过@GetMapping("/logout")映射退出路径,调用session.invalidate()销毁会话,并重定向到登录页面。
  2. 验证码登录功能
    • 依赖配置:引入 Hutool 工具库的验证码模块hutool-captcha(版本 5.8.7),用于生成和验证图片验证码。
    • 验证码生成:创建VerifyCodeController,通过CaptchaUtil.createShearCaptcha生成验证码图片,将验证码存入 Session 并输出图片流,响应头设置禁止缓存。
    • 前端集成:在login.html中添加验证码输入框和图片组件,点击图片可刷新验证码,引入 LayUI 组件进行表单验证。
    • 后端验证:修改登录接口@PostMapping("/userlogin"),增加验证码参数校验,从 Session 中获取验证码并调用verify方法验证,验证失败则返回错误提示。
  3. 用户信息修改
    • 基础信息展示:在用户登录成功后,将用户名、密码、头像地址存入 Session,index.html通过th:src获取头像地址并显示,默认头像存放在static/images/user.jpg,数据库auseruserimg字段默认值设为该路径。
    • 密码修改逻辑
      • 旧密码验证:通过@GetMapping("/password")接口接收旧密码,从 Session 获取系统存储的 MD5 密码,加密输入的旧密码后进行比对,返回验证结果。
      • 信息更新:Service 层定义updateUser方法,调用 MyBatis 自动生成的updateByPrimaryKeySelective接口更新用户信息;Controller 层接收新密码,加密后调用 Service 层方法完成更新。
    • 页面跳转:通过@GetMapping("/userInfo")映射用户信息编辑页面userInfo-edit.html,提供修改入口。

4.修改头像:

 Spring Boot 项目中修改头像的文件上传功能实现、静态资源配置、上传验证及部门管理增删改查示例,具体内容如下:

  1. 文件上传工具类
    • 定义UploadFileUtils.java,包含三个方法:getSuffixName获取文件后缀、getNewFileName生成 “当前时间 + 随机数 + 后缀” 的新文件名、getHost获取服务器主机名,用于处理文件上传的基础操作。
  2. 文件上传逻辑实现
    • 控制器处理AuserController@PostMapping("/upload/userImg")接收文件,调用工具类生成新文件名,在本地或服务器创建upload文件夹,通过file.transferTo保存文件,并生成可访问的 URL(如http://localhost:8081/upload/xxx.jpg)存入数据库,同时更新 Session 中的头像地址。
  3. 静态资源映射配置
    • MyWebMvcConfigurer中通过addResourceHandlers配置,将/upload/**路径映射到本地存储位置(file:upload/),确保前端可通过 URL 访问上传的图片资源。
  4. 上传功能验证与配置
    • 打包运行:项目打包为 JAR 文件(如example-1.0.jar)后,通过命令行java -jar运行,脱离 IDEA 验证图片上传和显示效果。
    • 文件大小限制:在application.properties中配置单个文件最大 10MB、总文件最大 30MB,避免大文件上传导致性能问题。
  5. 部门管理增删改查示例
    • 数据库表:新建department部门表,包含iddnamedtel等字段,用于演示业务操作。
    • 逆向工程:重新配置 Mybatis-generator,根据department表自动生成对应的 pojo、dao、mapper.xml 文件,注意确保数据库中无同名表以免冲突。

5.分页查询:

Spring Boot 项目中基于 Layui 实现部门管理的分页查询功能,具体内容如下:

  1. 分页基础配置
    • 前端与控制器:创建部门列表页面department-list.html,通过DepartmentController@GetMapping("/department")映射访问该页面。
    • Layui 参数:Layui 表格默认请求page(当前页)和limit(每页记录数)参数,点击分页按钮时以 GET 方式传递这两个参数。
  2. SQL 分页逻辑
    • 查询语句:使用LIMIT实现分页,公式为LIMIT limit*(page-1), limit,例如查询从第 3 条开始的 10 条记录为LIMIT 2, 10
  3. 后端处理流程
    • 控制器@GetMapping("/department/listall")接收包含pagelimit的参数 Map,计算起始索引start=(page-1)*limit,调用 Service 层方法处理分页请求。
    • 返回格式:遵循 Layui 表格的异步返回格式,定义Result类包含code(状态码)、msg(提示信息)、count(总记录数)、data(当前页数据)。
  4. Mapper 与 Service 层实现
    • Mapper 接口findDepartmentList方法执行分页查询,getTotalDepartments方法统计总记录数。
    • Mapper XML:编写 SQL 语句,findDepartmentList使用LIMIT #{start},#{limit}分页,getTotalDepartments使用COUNT(*)统计总数。
    • Service 实现getDepartmentsList方法调用 Mapper 获取分页数据和总记录数,组装成Result对象返回,满足 Layui 表格的数据格式要求。
  5. 时间格式处理
    • 在实体类Department.java的时间字段establishmentdate上添加@JsonFormat注解,设置格式为yyyy-MM-dd HH:mm:ss,时区为GMT+8,确保前端正确显示时间格式。

6.模糊查询:

Spring Boot 项目中基于部门名称的模糊查询功能实现,结合分页逻辑与 SQL 注入安全说明,具体内容如下:

  1. Mapper 层 SQL 配置
    • 模糊查询语句:在DepartmentMapper.xml中定义findDepartmentListByName方法,使用like '%${dname}%'实现部门名称(dname)的模糊查询,按创建时间倒序排列并添加分页参数limit #{start},#{limit};同时定义getTotalDepartmentsByName方法统计符合条件的总记录数。
    • SQL 注入风险:对比${}#{}的安全性,${}直接拼接参数易导致 SQL 注入(如用户输入恶意字符),而#{}通过预编译防止攻击,但此处因模糊查询需动态拼接百分号,故使用${}并强调其安全风险。
  2. 接口与方法定义
    • Mapper 接口DepartmentMapper.java中声明findDepartmentListByName(接收 dname、start、limit 参数)和getTotalDepartmentsByName(接收 dname 参数)方法。
    • Service 层DepartmentService.java定义getDepartmentsListByName接口,DepartmentServiceImpl.java实现时调用 Mapper 获取模糊查询结果和总记录数,组装成 Layui 表格所需的Result对象格式。
  3. 控制器处理
    • DepartmentController.javalistByName方法通过@GetMapping("/department/listbyname")接收包含pagelimit(分页参数)和dname(查询关键词)的参数 Map,计算起始索引后调用 Service 层方法处理请求并返回结果。

7.添加:

Spring Boot 项目中部门管理模块的添加功能实现,包括刷新页面校验、唯一性约束设置、各层代码实现及参数接收方式,具体内容如下:

  1. 刷新页面校验
    • AuserController中通过@GetMapping("/reload")定义刷新接口,检查 Session 中是否存在用户名name,存在则返回true,用于验证用户登录状态。
  2. 唯一性约束设置
    • 为避免部门名称重复,对数据库department表的dname字段添加唯一性索引(UNIQUE),确保数据完整性。
  3. 添加功能各层实现
    • 控制器层
      • @GetMapping("/department/add")跳转至部门添加页面department-add.html
      • @PostMapping("/department/add")支持三种参数接收方式:通过@RequestParam逐个获取参数、接收Map键值对、使用@RequestBody接收 JSON 格式数据(需前端调整提交格式为 JSON)。
    • 服务层DepartmentService定义addDepartment接口,实现类中调用DepartmentMapperinsertSelective方法插入数据,根据插入结果返回操作成功或失败的Result对象。
    • 持久层:利用 MyBatis 逆向工程生成的insertSelective方法,支持选择性插入部门数据(非空字段才插入)。
  4. 前端参数提交调整
    • 当使用@RequestBody接收 JSON 数据时,前端页面需将表单数据通过JSON.stringify转换为 JSON 格式,并设置请求头contentTypeapplication/json

8.删除和修改:

Spring Boot 项目中部门管理模块的删除和修改功能实现,具体内容如下:

  1. 删除功能实现
    • 持久层(Mapper):使用 MyBatis 逆向工程生成的deleteByPrimaryKey方法,修改返回类型为boolean,通过主键 ID 删除部门记录。
    • 服务层(Service)DepartmentService定义deleteById接口,实现类中调用deleteByPrimaryKey,根据删除结果返回包含状态码和提示信息的Result对象。
    • 控制器层(Controller)@PostMapping("/department/delete")接收前端传递的部门 ID,调用服务层删除方法并返回结果。
  2. 修改功能实现
    • 显示待修改部门信息
      • 控制器@GetMapping("/department/edit")通过 ID 获取部门信息,若 ID 存在则将数据存入Model,传递到编辑页面department-edit.html
      • 服务层getDepartmentById方法调用 MyBatis 的selectByPrimaryKey,根据 ID 查询部门详情。
    • 提交修改信息
      • 持久层:使用updateByPrimaryKeySelective方法,支持选择性更新部门字段(仅更新非空属性)。
      • 服务层saveDepartment接口接收修改后的部门对象,调用updateByPrimaryKeySelective并返回操作结果。
      • 控制器层@PostMapping("/department/edit")接收前端参数,更新部门对象的名称、电话、描述等信息,调用服务层完成修改。

以上功能通过各层协作,实现了基于主键的部门删除和动态字段修改,确保数据操作的准确性和完整性。

9.岗位管理:

Spring Boot 项目中岗位管理模块的增删改查功能实现,基于 MyBatis 逆向工程生成基础代码,结合分页、模糊查询等逻辑,具体内容如下:

1. 数据库表与逆向工程

  • 岗位表结构:新建post表,包含id(主键)、pname(岗位名称)、ptype(岗位类型)、organization(所属机构)等字段,其中pname设置唯一性约束避免重复。
  • 逆向工程配置:重新配置 MyBatis-Generator,自动生成post表对应的pojodaomapper.xml文件,简化基础代码开发。

2. 分页查询

  • 前端与控制器:创建岗位列表页面post-list.htmlPostController通过@GetMapping("/post")跳转页面,@GetMapping("/post/listall")接收page(当前页)和limit(每页记录数)参数,计算起始索引start=(page-1)*limit,调用 Service 层处理分页逻辑。
  • Mapper 与 ServicePostMapper定义findPostList(分页查询)和getTotalPosts(统计总数)方法,XML 中使用LIMIT #{start},#{limit}COUNT(*)实现分页和计数;Service 层组装符合 Layui 表格格式的Result对象(包含codemsgcountdata)返回前端。

3. 模糊查询

  • 按岗位名称查询PostMapper.xml中使用like '%${pname}%'实现模糊查询,PostMapper声明findPostListByNamegetTotalPostsByName方法;Service 层和 Controller 层接收查询关键词pname,结合分页参数完成模糊查询并返回结果。

4. 删除功能

  • 主键删除:利用 MyBatis 生成的deleteByPrimaryKey方法,通过主键id删除岗位记录;Service 层封装删除结果为Result对象,Controller 层接收id参数并调用 Service 层方法执行删除。

5. 新增功能

  • 唯一性校验:数据库对pname字段添加唯一索引(UNIQUE),避免重复岗位名称。
  • 数据插入PostController跳转添加页面post-add.html,接收前端参数创建Post对象,调用 Service 层addPost方法,通过insertSelective选择性插入非空字段数据。

6. 修改功能

  • 显示待修改信息PostController通过@GetMapping("/post/edit")获取岗位id,调用 Service 层getPostById(基于selectByPrimaryKey)查询详情,存入Model传递到编辑页面post-edit.html
  • 提交修改:前端提交修改后,Controller 层更新Post对象的pnameptype等字段,调用 Service 层savePost方法,通过updateByPrimaryKeySelective选择性更新数据库记录。

核心逻辑总结

  • 分层协作:各功能均遵循 “Controller 接收请求→Service 处理业务→Mapper 操作数据库” 的分层架构,利用 MyBatis 逆向工程生成的基础方法(如selectByPrimaryKeyinsertSelective)简化开发。
  • 参数处理:分页、模糊查询、增删改操作均通过@RequestParamMap接收参数,确保前端与后端数据格式匹配,同时通过Result类统一返回格式,满足 Layui 组件的异步数据要求。

10.创建员工表后的岗位查询:

Spring Boot 项目中创建员工表后,如何通过关联查询实现岗位编制人数(员工数量)的统计与显示,具体内容如下:

  1. 数据库表结构与外键设置
    • 员工表(staff):创建或导入staff表,设置两个外键索引,depart_id关联department表的id(部门外键),post_id关联post表的id(岗位外键),通过外键约束确保数据一致性。
    • 岗位表(post)organization字段(编制人数)默认值为 0,需通过员工表中post_id相同的记录数重新赋值。
  2. MyBatis 逆向工程与代码生成
    • 重新配置 MyBatis-Generator,自动生成staff表对应的pojodaomapper.xml文件,为后续数据操作提供基础接口。
  3. 岗位编制人数统计逻辑
    • 持久层(Mapper):在StaffMapper.xml中定义getSamePostTotal方法,通过SELECT COUNT(*)统计staff表中特定post_id的员工数量;PostMapper使用updateByPrimaryKeySelective方法更新岗位表的organization字段。
    • 服务层(Service):修改PostServiceImplgetPostsList方法,遍历岗位列表,调用staffMapper.getSamePostTotal(post.getId())获取每个岗位的员工数,存入post对象的organization属性,并更新岗位信息到数据库。
  4. 数据关联与更新流程
    • 通过岗位表与员工表的post_id外键关联,实现 “岗位编制人数 = 该岗位员工总数” 的统计逻辑,确保岗位列表显示的编制人数实时反映员工表中的关联数据。

11.员工管理:
 

Spring Boot 项目中员工管理模块的实现,包括分页查询、详情查看、信息修改等功能,通过关联部门和岗位表实现数据整合与显示,具体内容如下:

1. 分页查询与数据关联

  • 实体类扩展:在Staff.java中添加departname(部门名)和postname(岗位名)属性(无数据库对应字段,仅用于前端显示),并提供get/set方法。
  • 控制器与服务层
    • StaffController通过@GetMapping("/staff/listall")接收分页参数pagelimit,调用staffService.getStaffsList处理分页逻辑。
    • StaffServiceImpl中,先通过staffMapper.findStaffList获取分页员工数据,再遍历每个员工,根据departIdpostId查询对应的部门(departmentMapper.selectByPrimaryKey)和岗位(postMapper.selectByPrimaryKey)名称,设置到员工对象中,并根据enddate判断员工状态(“转正” 或 “试用期”)。
  • 持久层StaffMapper.xml定义分页查询findStaffList和总数统计getTotalStaffs方法,使用LIMITCOUNT(*)实现分页逻辑。

2. 详情页显示与时间格式处理

  • 时间格式注解:在Staff.java中对birthdayentrydate等时间字段添加@JsonFormat注解,指定格式为yyyy-MM-dd,时区为GMT+8,确保前端正确显示日期。
  • 详情查询逻辑StaffControllerstaffView方法通过员工id查询员工信息,关联部门和岗位表获取名称,存入Model后跳转至详情页staff-view

3. 员工信息修改功能

  • 编辑页面数据准备
    • StaffControllergotostaffEdit方法获取员工信息后,查询所有部门(departmentService.getDepartmentList)和岗位(postService.getPostsList),并准备性别、民族、学历等下拉列表数据,传递到编辑页面staff-edit
    • 部门和岗位列表通过DepartmentServicePostServicegetDepartmentListgetPostsList方法获取,底层调用mapper的全量查询。
  • 数据提交与更新
    • 前端以 JSON 格式提交修改数据,StaffController通过@PostMapping("/staff/edit")接收参数,使用SimpleDateFormat解析日期字段(如birthdayentrydate),转换为java.sql.Date后更新员工对象。
    • StaffServiceImpl调用staffMapper.updateByPrimaryKeySelective实现选择性更新,返回操作结果。

核心逻辑与技术点

  • 外键关联查询:通过员工表的departIdpostId外键,关联部门表和岗位表,实现 “员工 - 部门 - 岗位” 三级数据联动,确保前端显示完整信息。
  • 状态动态判断:根据员工试用期结束日期enddate与当前时间的对比,动态设置员工状态(“转正” 或 “试用期”),增强业务逻辑的自动化。
  • 分层架构协作:遵循 “Controller(请求处理)→ Service(业务逻辑)→ Mapper(数据库操作)” 分层模式,利用 MyBatis 的selectByPrimaryKeyupdateByPrimaryKeySelective等方法简化数据操作。

通过以上实现,员工管理模块实现了数据的分页展示、详情查看、动态状态判断及复杂表单编辑,确保了前端与后端的数据一致性和操作便捷性。

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

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

相关文章

SpringBoot--springboot简述及快速入门

spring Boot是spring提供的一个子项目,用于快速构建spring应用程序 传统方式: 在众多子项目中,spring framework项目为核心子项目,提供了核心的功能,其他的子项目都需要依赖于spring framework,在我们实际…

INT202 Complexity of Algroithms 算法的复杂度 Pt.7 NP-Completeness NP完全性

文章目录 1.P与NP问题1.1 计算上难以解决的问题(Hard Computational Problems)1.2 决策问题和优化问题(Decision/Optimization problems)1.3 计算问题的正式定义1.4 复杂性类1.4.1 复杂性类 P P P1.4.2 证明(Certifica…

websocketpp 安装及使用

介绍 WebSocket 是从 HTML5 开始支持的一种网页端和服务端保持长连接的消息推送机制。 传统的 web 程序都是属于 "一问一答" 的形式,即客户端给服务器发送了一个 HTTP 请求,服务器给客户端返回一个 HTTP 响应。这种情况下服务器是属于被动…

Android NDK 高版本交叉编译:为何无需配置 FLAGS 和 INCLUDES

引言:NDK 交叉编译的演进 Android NDK(Native Development Kit)是开发高性能C/C代码的核心工具链,而交叉编译(在x86主机上生成ARM架构代码)一直是NDK的核心功能。过去,开发者需要手动配置大量编…

AI+可视化:数据呈现的未来形态

当AI生成的图表开始自动“美化”数据,当动态可视化报告能像人类一样“讲故事”,当你的眼球运动直接决定数据呈现方式——数据可视化的未来形态,正在撕裂传统认知。某车企用AI生成的3D可视化方案,让设计师集体失业;某医…

基于Flink的用户画像 OLAP 实时数仓统计分析

1.基于Flink的用户画像 OLAP 实时数仓统计分析 数据源是来自业务系统的T日数据,利用kakfa进行同步 拼接多个事实表形成大宽表,优化多流Join方式,抽取主键和外键形成主外键前置层,抽取外键和其余内容形成融合层,将4次事…

Java游戏服务器开发流水账(7)网络通信简介

在 Java 游戏服务器开发中,网络通讯是核心组成部分,它主要负责客户端与服务器之间的数据交换。 一、网络通讯基础 1. 网络模型 C/S 架构:游戏服务器采用客户端 / 服务器模式,客户端向服务器发送请求,服务器处理请求…

使用ADB命令操作Android的apk/aab包

keystore文件转换jks文件 操作步骤: 步骤1,生成P12文件: keytool -importkeystore -srckeystore [文件名].keystore -srcstoretype JKS -deststoretype PKCS12 -destkeystore [文件名].p12 步骤2,生成jks文件: keytool…

图文展示HDFS、YARN、MapReduce三者关系

MapReduce架构概述 MapReduce将计算过程分为两个阶段:Map和Reduce (1)Map阶段并行处理输入数据 (2)Reduce阶段对Map结果进行汇总 HDFS、YARN、MapReduce三者关系

DL00219-基于深度学习的水稻病害检测系统含源码

🌾 基于深度学习的水稻病害检测系统 — 智能农业的未来,守护农田的每一寸土地! 🚜 完整系统获取见文末 水稻病害检测,一直是农业领域的一大难题。传统的人工检测不仅耗时耗力,还容易因经验不足导致漏检或误…

github 上的 CI/CD 的尝试

效果 步骤 新建仓库设置仓库的 page 新建一个 vite 的项目,改一下 vite.config.js 中的 base 工作流 在项目的根目录下新建一个 .github/workflows/ci.yml 文件,然后编辑一下内容 name: Build & Deploy Vue 3 Appon:push:branches: [main]permi…

鸿蒙5.0项目开发——鸿蒙天气项目的实现(介绍)

【高心星出品】 文章目录 项目简介:项目运行效果图:主要功能:使用的技能点:开发环境: 项目简介: 这是一个基于鸿蒙系统(HarmonyOS)开发的天气应用,采用 ArkTS 语言开发&…

SpringCloud之Eureka基础认识-服务注册中心

0、认识Eureka Eureka 是 Netflix 开源的服务发现组件,后来被集成到 Spring Cloud 生态中,成为 Spring Cloud Netflix 的核心模块之一。它主要用于解决分布式系统中​​服务注册与发现​​的问题。 Eureka Server 有必要的话,也可以做成集群…

【氮化镓】电子辐照下温度对GaN位移阈能的影响

2024年,华东师范大学的彭胜国等人基于从头算分子动力学(AIMD)方法,研究了低能电子束辐照下温度对氮化镓(GaN)位移阈能(TDE)的影响。实验结果表明,在初始动能40至80 eV的范围内,镓(Ga)和氮(N)原子作为初级击出原子(PKAs)引发的位移对温度呈现不同的敏感性:Ga 的…

Java 中的数据类型误导点!!!

在 Java 中,数据类型分为两大类:基本类型(Primitive Types) 和 引用类型(Reference Types)。它们的存储方式和行为完全不同。 1. 基本类型 Java 有 8 种基本数据类型,它们直接存储值&#xff…

二次封装 el-dialog 组件:打造更灵活的对话框解决方案

文章目录 引言为什么需要二次封装?封装思路代码实现1. 基础封装组件 (Dialog.vue)2. Vue中引入使用示例 封装后的优势进阶优化建议 总结 引言 在 Vue 项目中,Element UI 的 el-dialog 是一个非常实用的对话框组件。但在实际开发中,我们经常会…

框架篇八股(自用)

框架篇 Spring框架中的bean不是线程安全的 Scope() singleton单例 prototype多例 一个类中有可修改的成员变量需要考虑线程安全 bean没有可变状态(service类,DAO类) 某种程度单例bean是线程安全的 AOP面向切面编程…

Go语言安装proto并且使用gRPC服务(2025最新WINDOWS系统)

1.protobuf简介 protobuf 即 Protocol Buffers,是一种轻便高效的结构化数据存储格式,与语言、平台无关,可扩展可序列化。protobuf 性能和效率大幅度优于 JSON、XML 等其他的结构化数据格式。protobuf 是以二进制方式存储的,占用空…

rust-candle学习笔记11-实现一个简单的自注意力

参考:about-pytorch 定义ScaledDotProductAttention结构体: use candle_core::{Result, Device, Tensor}; use candle_nn::{Linear, Module, linear_no_bias, VarMap, VarBuilder, ops};struct ScaledDotProductAttention {wq: Linear,wk: Linear,wv: …

spark MySQL数据库配置

Spark 连接 MySQL 数据库的配置 要让 Spark 与 MySQL 数据库实现连接,需要进行以下配置步骤。下面为你提供详细的操作指南和示例代码: 1. 添加 MySQL JDBC 驱动依赖 你得把 MySQL 的 JDBC 驱动添加到 Spark 的类路径中。可以通过以下两种方式来完成&a…