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

【MyBatis详解】——从Xml配置解析到SQL执行过程

目录

  • 整体架构与使用Demo
  • Mybatis核心流程
    • 1. 创建SqlSessionFactory
      • 配置解析——SQL解析(存储MappedStatement到Configuration中)
      • SqlNode
      • MappedStatement
      • SqlSource
      • BoundSql
    • 2. 创建SqlSession
      • SqlSession
      • Executor
    • 3. 获取Mapper
    • 4. 通过Mapper接口调用CRUD方法
      • MapperMethod
    • 5. Executor执行SQL
      • StatementHandler

整体架构与使用Demo

Mybatis的架构整体可以分为3层:
在这里插入图片描述

  1. 接口层
    也就是和数据库进行交互,核心接口为SqlSession,一个SqlSession对应着一次数据库会话,那么其生命周期不是永久的,理论上每次访问数据库时都需要创建它。
    形式分为两种,一种是使用Mapper接口,一种是基于Mybatis提供的Api;
    • Mybatis提供的Api
      需要我们提供StatementId和查询参数,传递给SqlSession对象,提供SqlSession对象实现与数据库的交互;但是这种创建sqlSession的形式不符合面向接口编程的习惯。
    • 使用Mapper接口:
      Mybatis将配置文件中的每一个Mapper节点都抽象为一个Mapper接口,根据SqlSession.getMapper(XXXMapper.class),Mybatis将通过动态代理,生成一个Mapper实例。但当我们调用Mapper接口中的方法时,Mybatis会根据方法名和参数,确定StatementId,底层还是通过SqlSession来实现对数据库的操作。
  2. 数据处理层
    • 配置解析
    • 参数、结果集映射:java数据类型与jdbc数据类型的转换,包括查询阶段和结果返回阶段
    • Sql解析:动态sql生成
    • Sql执行
  3. 框架支持层
    • 事务管理
    • 连接池管理
    • 缓存机制

使用Demo:

String resource = "mybatis-config.xml"; 
InputStream inputStream = Resources.getResourceAsStream(resource); 
// 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 
// 创建SqlSession 
SqlSession sqlSession = sqlSessionFactory.openSession(); 
// 执行SQL语句 (通过StatementId)
List list = sqlSession.selectList("com.example.mapper.personMapper.selectPersonByMap");
// 执行SQL语句(通过Mapper接口)
PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
personMapper.selectPersonByMap();

Mybatis的初始化有两种形式:

  • 基于XML配置文件:通过XML配置文件,将配置信息解析为Configuration对象。
  • 基于Java API:在Java代码中手动创建Configuration对象,然后将配置参数set 进入Configuration对象中。(不推荐)

Mybatis核心流程

1. 创建SqlSessionFactory

String resource = "mybatis-config.xml"; 
InputStream inputStream = Resources.getResourceAsStream(resource); 
// 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 

在这里插入图片描述

将xml配置信息解析为Configuration对象,然后构建一个DefaultSqlSessionFactory类型的工厂:

  1. 创建XMLConfigBuilder,解析xml全局文件
  2. 创建XMLMapperBuilder,解析每个xml
  3. 最后将返回Configuration对象,保存着全部的xml配置信息;

配置解析——SQL解析(存储MappedStatement到Configuration中)

我们重点分析XMLMapperBuilder.parse方法中,对sql相关信息的解析过程:
在这里插入图片描述

  • 解析Mapper节点,获得XNode,再解析XNode中的 select|insert|update|delete 节点,保存为XNode类型的List;遍历CRUD的XNode节点:
  • 新建XMLStatementBuilder,调用parseStatementNode,用于解析每一个CRUD的节点
  • 创建LanguageDriver(默认为XMLLanguageDriver,用于处理xml中的sql部分)
  • 调用LanguageDriver.createSqlSource,获取SqlSource
  • 根据SqlSource创建MappedStatement,并且注册到Configuration中

createSqlSource获取SqlSource的方法:
在这里插入图片描述

  1. 新建XMLScriptBuilder,并调用parse解析各个节点的sql部分
  2. 递归解析,最终得到MixedSqlNode(本质为SqlNode的List集合),并且标记此Sql类型为动态还是静态
  3. 如果是动态类型,返回DynamicSqlSource
  4. 如果是静态类型,返回RawSqlSource
  5. 返回的SqlSource将会保存在MappedStatement中,然后等sql执行的时候,通过getBoundSql方法触发sql的解析

总结

  • XMLConfigBuilder
    解析xml整体文件
  • XMLMapperBuilder
    解析每个xml文件
  • XMLStatementBuilder
    解析xml文件中各个select,insert,update,delete节点
  • XMLScriptBuilder
    解析xml中各个节点sql部分的Builder,产生MapperStatement,保存到Configuration中

SqlNode

节点解析时的工具类,简单理解就是xml中的每个标签,如update,trim,if标签
其实现类包括
在这里插入图片描述
实现动态Sql的关键就是 各个SqlNode的 apply方法
以IfSqlNode为例,如果满足条件,则apply,并返回true

 @Overridepublic boolean apply(DynamicContext context) {if (evaluator.evaluateBoolean(test, context.getBindings())) {contents.apply(context);return true;}return false;}

而StaticTextSqlNode类型静态sql,则直接append

@Overridepublic boolean apply(DynamicContext context) {context.appendSql(text);return true;}

MappedStatement

是Configuration中的属性,表示一个CRUD节点的信息

SqlSource

是MappedStatement的属性,实现类包括:
在这里插入图片描述

  • StaticSqlSource:最终静态SQL语句的封装,其他类型的SqlSource最终都委托给StaticSqlSource。
  • RawSqlSource:原始静态SQL语句的封装,在加载时就已经确定了SQL语句,比动态SQL语句要快,因为不需要运行时解析SQL节点。
    • 如#占位符
  • DynamicSqlSource:动态SQL语句的封装,在运行时需要根据参数处理if等标签或者${} SQL拼接之后才能生成最后要执行的静态SQL语句。
    • 如$占位符或者if等标签
  • ProviderSqlSource:当SQL语句通过指定的类和方法获取时(使用@XXXProvider注解),需要使用本类,它会通过反射调用相应的方法得到SQL语句。

其getBoundSql方法提供BoundSql对象。

BoundSql

是从SqlSource中获取得到的信息,封装mybatis最终产生sql的类,包括sql语句,参数,参数源数据等参数;后续在执行Sql的时候将会使用到BoundSql。
在这里插入图片描述

2. 创建SqlSession

SqlSession sqlSession = sqlSessionFactory.openSession(); 

在这里插入图片描述

  1. 创建Transaction事务:
    1. 根据Configuration配置信息获取Environment环境对象
    2. 根据environment信息获取TransactionFactory,这里获取到的事务工厂,即对应着xml文件中的transactionManager节点
    3. newTransaction创建事务tx
  2. 创建Executor执行器
    1. 调用Configuration对象的newExecutor方法,将事务对象tx传参进去;
    2. newExecutor方法,默认创建的是Simple类型的SimpleExecutor
      (类型一共三种:SIMPLE, REUSE, BATCH)
      如果开启了cacheEnabled(默认开启),那么包装为CachingExecutor:在查询数据之前先查找缓存,没有找到再从数据库查询并加入缓存。
    3. executor = (Executor) interceptorChain.pluginAll(executor);
      使用了执行器链模式,使得Executor对象可以被插件拦截;
  3. 创建DefaultSqlSession:
    1. new DefaultSqlSession(configuration, executor, autoCommit)

SqlSession

Mybatis与数据库交互的核心接口,一个SqlSession对应着一次数据库会话。

Executor

执行器,真正的sql执行并不是SqlSession直接执行的,而是通过Executor去执行。

3. 获取Mapper

PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);

在这里插入图片描述

  1. 通过MapperRegister(Map类型的Mapper注册器Map<Class<?>, MapperProxyFactory<?>>)根据接口Class信息,获取到目标MapperProxyFactory
  2. 通过MapperProxyFactory创建MapperProxy(也就是Mapper接口的代理)
    1. Proxy.newProxyInstance动态代理创建
  3. 至此,我们通过SqlSession.getMapper获取到的personMapper对象,实际上是一个代理类

4. 通过Mapper接口调用CRUD方法

personMapper.selectPersonByMap();

在这里插入图片描述

被代理对象的方法的访问,都会落实到代理者的invoke上来,所以调用的mapper.select等方法,将会经过MapperProxy中的invoke:

  1. 创建MapperMethod对象:
    根据CRUD的类型将调用分发到SqlSession的不同方法上
  2. 处理参数:
    convertArgsToSqlCommandParam:当args数量>1时,将Object[]的参数包装为Map<String, Object>
  3. SqlSession方法的执行:
    1. 根据MapperMethod内部类SqlCommand中存储的statementId,从Configuration中找对应的MappedStatement
    2. 将MappedStatement作为参数,调用Executor中对应的方法

MapperMethod

它是一个分发者,根据CRUD的类型将调用分发到SqlSession的不同方法上。
有两个内部类同时被创建:
- SqlCommand
interfaceName + methodName作为statementId,去Configuration中去找对应的MappedStatement
存储statementId、SqlCommandType(CRUD类型)信息
- MethodSignature
记录方法的参数、返回值等信息

5. Executor执行SQL

在这里插入图片描述

  1. 我们默认为调用的是有缓存的Executor,那么先本地查询缓存,如果没找到再去调用(默认简单类型)SimpleExecutor的query方法
  2. 创建StatementHandler
    默认类型为ParparedStatementHandler,Executor将执行的任务交给它,它才是sql的具体执行者。也可以被插件所拦截(常见的物理分页插件)
    1. prepare:预编译sql,得到Statement对象
    2. 调用ParameterHandler:处理参数
    3. 调用ResultSetHandler:处理执行结果

StatementHandler

由此可见,Executor也不是真正的执行者,而是由StatementHandler完成的。在StatementHandler被创建的过程中,有一个getBoundSql的步骤,触发了动态sql的处理,下节详细分析。

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

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

c++:mt19937生成随机数

随机生成&#xff1a; int rd(){mt19937 rd1(time(NULL));return rd1(); }指定随机数的生成范围&#xff1a; int rd(){mt19937 rd1(time(NULL));uniform_int_distribution<int>t(0,100000);//指定范围return t(rd1); }...

js中find和findIndex的使用

ES6为Array增加了find()&#xff0c;findIndex函数。 find()函数用来查找目标元素&#xff0c;找到就返回该元素&#xff0c;找不到返回undefined。 findIndex()函数也是查找目标元素&#xff0c;找到就返回元素的位置&#xff0c;找不到就返回-1。 他们的都是一个查找回调函…...

投资理财1

1. 投资术语 熔断&#xff1a;也叫自动停盘机制&#xff0c;是指当股指波幅达到规定的熔断点时&#xff0c;交易所为控制风险采取的暂停交易措施。具体说是对某一合约在达到涨跌停板之前&#xff0c;设置一个熔断价格&#xff0c;使合约买卖报价在一段时间内只能在这一价格范围…...

【项目】springboot中使用kaptcha生成验证码,登录时密码加盐处理

记录使用kaptcha的过程 为前后端分离项目&#xff0c;前端vue框架 0.下载jar包 在maven的网站https://mvnrepository.com/search?qcom.github.penggle 搜索下载jar 导入到工程中 1.添加依赖 <dependency><groupId>com.github.penggle</groupId><art…...

Mybatis源码研究之DatabaseIdProvider

借助Mybatis提供的 databaseId特性&#xff0c;我们可以实现让应用同时支持多种类型的数据库。 0. 目录这里写目录标题1. 测试用例2. 原理解析3. databaseId的其它应用4. Links1. 测试用例 相关的配置和测试用例如下 &#xff08;这里我们以源生的mybatis为例&#xff0c;与Sp…...

学生成绩管理系统+打包

文章目录文件管理&#xff1a;D:\hyt\python\pytorch_graduate\file_management成绩管理&#xff1a;D:\hyt\python\pytorch_graduate\stusystem打包&#xff1a;D:\hyt\python\pytorch_graduate\package_test学生成绩管理系统0.基础原理1.文件管理2 学生管理系统Tk打包1.基础原…...

Yocto Build with Bitbake的调试

https://docs.yoctoproject.org/dev-manual/common-tasks.html#recipe-logging-mechanisms 官方文档里有输出调试信息的方法。包含两种&#xff0c;一种是调用python的&#xff0c;一种是bash的。 建议直接使用warning方法&#xff0c;保证输出级别足够。 另外&#xff0c;在…...

IntentService源码分析指南

转载链接&#xff1a;https://www.jianshu.com/p/8a3c44a9173a...

为啥集群小文件治理那么重要,你真的懂吗?

小文件是 Hadoop 集群运维中的常见挑战&#xff0c;尤其对于大规模运行的集群来说可谓至关重要。如果处理不好&#xff0c;可能会导致许多并发症。Hadoop集群本质是为了TB,PB规模的数据存储和计算因运而生的。为啥大数据开发都说小文件的治理重要&#xff0c;说HDFS 存储小文件…...

Flink大数据实时计算系列-第一个程序JAVA版本-分组统计

Flink大数据实时计算系列-第一个程序JAVA版本-分组 在基线版本上增加了分组统计的代码 #Flink代码 package com.flinkniu.flink.operator;import org.apache.flink.api.common.typeinfo.Types; import org.apache.flink...

Ant Design Vue实现a-table表格单元格合并

Ant Design Vue实现a-table表格单元格合并 参考Ant design Vue官网关于行和列合并api https://antdv.com/components/table-cn/ 下面官网对表格合并这块的描述 &#xff01;&#xff01;&#xff01;注意注意注意重要事情说三遍&#xff1a;很多同学都习惯性的将columns写在d…...

【CoppeliaSim】Solidworks中模型导出模型到V-REP

一、下载安装插件 插件名称&#xff1a;sw2urdfSetup 下载地址&#xff1a;https://github.com/ros/solidworks_urdf_exporter/releases/tag/1.6.0 下载后直接安装即可。安装成功后&#xff0c;可在SolidWorks的菜单栏中看到&#xff1a;工具-Tools-Export as URDF 二、导出…...

css中id和class的区别

css中id和class的区别ID是唯一的类不是唯一的语法区别ID是唯一的 每个元素仅可以有一个ID每个页面仅可以有一个元素拥有这个ID 类不是唯一的 你可以在多个元素中使用相同的类你可以使用多个类在一个元素中 语法区别 id对应css是用样式选择符“#”&#xff08;井号&#xff…...

力扣刷题:动态规划篇

目录322. 零钱兑换题目介绍题目实现5. 最长回文子串题目介绍题目实现518. 零钱兑换 II题目介绍题目实现53. 最大子序和题目介绍题目实现63. 不同路径 II题目介绍[62. 不同路径](https://leetcode-cn.com/problems/unique-paths/)题目实现70. 爬楼梯题目介绍题目实现72. 编辑距离…...

Java面试list 和 set 区别

List和Set的区别 List:&#xff1a;有序&#xff0c;按对象进入的的序保存对象&#xff0c;可可允许多个Null元素对象&#xff0c;可以使用lterator迭取出所有元素。在逐一便历&#xff0c;也可以使用get(int index)获取指定下标的元素 Set&#xff1a;无序&#xff0c;不可重复…...

诚意分享:这里有份超全Java体系化进阶学习图谱

摘要 Apache Kafka是一个分布式消息发布订阅系统。它最初由LinkedIn公司基于独特的设计实现为一个分布式的提交日志系统( a distributed commit log)&#xff0c;之后成为Apache项目的一部分。 成千上万的企业都在使用Kafka&#xff0c;三分之一的世界500强公司也在其中&…...

requests+re爬取猫眼电影排行

import requests from requests.exceptions import RequestException import re,json,timedef get_one_page(url):#获取网页信息try:headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/53…...

Twitter教程:如何下载Twitter数据副本?

Twitterrific Mac破解版是一款非常现代化优秀的桌面Twitter客户端,这款软件不仅看起来惊人,它的表现也是非常棒的,本文给大家的带来了如何下载Twitter数据副本的教程。 教程如下 在 iPhone 或 iPad 上打开“Twitter”。&#xff08;您也可以使用 Twitter.com 网站&#xff09…...

4-1 Python常用内置算法与数据结构常考题

一、你使用过哪些常用内置算法和数据结构 仔细回想一下你用过哪些内置的算法数据结构&#xff1f; 1.sorted 2.dict/list/set/tuple… 3.问题&#xff1a;想的不全或者压根没了解和使用过 数据结构/算法语言内置内置库线性结构list(列表)/tuple(元组)array(数组&#xff0c;不…...

【内网学习笔记】8、powercat 的使用

1、下载安装 powercat powercat 可以视为 nc 的 powershell 版本&#xff0c;因此也可以和 nc 进行连接。 powercat 可在 github 进行下载&#xff0c;项目地址为&#xff1a;https://github.com/besimorhino/powercat 下载下来 powercat.ps1 文件后&#xff0c;直接导入即可…...

MVC三层架构

什么是MVC&#xff1a; Model view Controller 模型、视图、控制器 1.以前的架构模型 用户直接访问控制层&#xff0c;控制层就可以直接操作数据库&#xff1b; servlet--CRUD-->数据库 弊端&#xff1a;程序十分臃肿&#xff0c;不利于维护 servlet的代码中&#xff1a…...

天眼查怎么删除信息_天眼查删除信息的方法介绍

天眼查信息怎么删除 天眼查风险信息怎么清除 天眼查问答信息怎么删除 天眼查法律诉讼信息可以删吗 天涯查上的信息删除怎么操作&#xff0c;天眼查成立于2014年&#xff0c;至今发展迅速&#xff0c;已经帮助了无数的企业和消费者&#xff0c;那么很多企业的天眼查信息有时候需…...

教你怎么才能删除百度负面新闻

互联网技术有时是一把双刃刀&#xff0c;我们可以运用它来对企业品牌形象、商品、知名品牌等开展宣传推广&#xff0c;殊不知竞争者亦能够运用它来对公司开展故意污蔑来减少敌人在制造行业里的权重值和权威性&#xff0c;进而给消费者行为引入一些对公司欠佳的信息内容&#xf…...

select使用实例

select函数是多路复用的一种&#xff0c;本文我们给出一个select的通信实例&#xff0c;看下select的代码如何组织&#xff0c;先上代码&#xff1a; #include <unistd.h> #include <iostream> #include <string> #include <sys/socket.h> #include &…...

mysql主从同步可以同步哪些资源

概述 mysql主从同步可以同步哪些资源&#xff1f;视图、存储过程、存储函数、触发器等这些资源到底能不能同步呢&#xff0c;这里我们做一下深入研究&#xff0c;通过查看binlog日志的方式解析每个操作。 做实验前需要了解两个基础知识&#xff1a; &#xff08;1&#xff0…...

单线程+异步I/O的编程模型:协程

现代操作系统对I/O操作的改进中最为重要的就是支持异步I/O。如果充分利用操作系统提供的异步I/O支持&#xff0c;就可以用单进程单线程模型来执行多任务&#xff0c;这种全新的模型称为事件驱动模型。Nginx就是支持异步I/O的Web服务器&#xff0c;它在单核CPU上采用单进程模型就…...

GPIO 初安装2021.6.1

1、参照贴文https://blog.csdn.net/cynophile/article/details/99310678 安装GPIO库 sudo pip install Jetson.GPIO sudo pip3 install Jetson.GPIO 创建一个新的gpio用户组。然后将用户添加到新创建的组中&#xff0c;your_user_name是用户名。 sudo groupadd -f -r gpio …...

【学习笔记】Java 8函数式编程#Lambda表达式#方法引用

全文目录函数式编程&#xff1a;Functional programming函数式编程的一些基本概念函数式编程的定义&#xff1a;程序的副作用&#xff1a;函数编程与数学函数&#xff1a;设计函数式编程应该遵循的原则&#xff1a;First-Class and Higher-Order Functions纯函数不变性引用透明…...

强推!程序员必备!CSDN浏览器插件,让码字效率提升n倍,颜值与实力并存

目 录 一 写在前面 二 测评信息 三 测评体验 3.1 安装方便 3.2 始于颜值 3.2.1 简约美观的主题 3.2.2 多变时尚的风格 3.3 忠于强大 3.3.1 快捷的搜索 3.3.2 丰富的功能 3.3.3 开发者神器 3.4 一些建议 四 写在最后 一 写在前面 你是否对极致的用户体验有很高的…...

Window10 远程连接(校内网实验室电脑连接寝室电脑)

Windows10 远程连接win10远连用途被连机设置密钥升级开启文件打印机共享&#xff08;回显请求-ICMPv4)记住电脑内网IP和你的微软账号&#xff01;临时机开启连接win10远连用途 windows自带的远程连接&#xff0c;使用方便。 我用于校内实验室或者图书馆电脑操作宿舍电脑&#…...

智能网卡的网络加速技术

2021年9月25日&#xff0c;由“科创中国”未来网络专业科技服务团指导&#xff0c;江苏省未来网络创新研究院、网络通信与安全紫金山实验室联合主办、SDNLAB社区承办的2021中国智能网卡研讨会中&#xff0c;多家机构谈到了智能网卡的网络加速实现&#xff0c;我们对此进行整理&…...

【Android FFMPEG 开发】FFMPEG 获取编解码器 ( 获取编解码参数 | 查找编解码器 | 获取编解码器上下文 | 设置上下文参数 | 打开编解码器 )

文章目录博客简介 . FFMPEG 编解码器获取流程I . FFMPEG 获取音视频流的编解码参数 AVCodecParameters *codecparII . FFMPEG 查找解码器 avcodec_find_decoder ( )III . FFMPEG 获取编解码器上下文 avcodec_alloc_context3 ( )IV . FFMPEG 设置编解码器上下文参数 avcodec_par…...

如何给小白解释什么是编解码器

点击上方“LiveVideoStack”关注我们翻译 | Alex技术审校 | 章琦本文来自OTTVerse&#xff0c;作者为Krishna Rao Vijayanagar。编解码器Easy Tech#005#在本篇文章中&#xff0c;我们将学习视频编解码器、视频编码标准以及在数据压缩和解压缩的过程中&#xff0c;视频编码标准是…...

什么是编解码器codec

编解码器&#xff08;英语&#xff1a;codec&#xff09;指的是一个能够对一个信号或者一个数据流进行编解码操作的设备或者程序。这里指的变换既包括将信号或者数据流进行编码&#xff08;通常是为了传输、存储或者加密&#xff09;或者提获取到一个编码流的操作&#xff0c;也…...

编解码学习笔记(一):基本概念

媒体业务是网络的主要业务之间。尤其移动互联网业务的兴起&#xff0c;在运营商和应用开发商中&#xff0c;媒体业务份量极重&#xff0c;其中媒体的编解码服务涉及需求分析、应用开发、释放license收费等等。最近因为项目的关系&#xff0c;需要理清媒体的codec&#xff0c;比…...

人事管理系统开发功能需求

人事管理系统&#xff0c;属于ERP的一个部分。提高企业整体的科技含量与管理效率&#xff0c;该系统提供了对人事管理、调动管理、合同管理、工资管理、培训管理、绩效考核、奖惩管理、辅助功能、基础设置、综合统计等模式录入和表格界面录入 办公自动化&#xff0c;提升工作…...

ajax人力资源管理系统代码,README.md · 偉ing/JSP实现OA办公系统_人事管理系统 - Gitee.com...

# OA办公系统_人事管理系统## 介绍这是一套智能OA办公系统&#xff0c;里面包含了人事管理系统&#xff0c;这套功能的主干都已经完成&#xff0c;大多数功能用到的都是ajax技术&#xff0c;极个别界面采用传统MVC方法。代码规范化&#xff0c;基本上每个类和每个方法都写有注释…...

湖南工程学院+c语言程序设计人事档案管理系统,程序设计人事档案管理系统.doc...

课 程 设 计 报 告课程名称 C语言程序设计课题名称 人事档案管理系统专 业 电子信息班 级 1001班学 号 201001030112姓 名指导教师 肖伟平 黄哲 罗敬2011年 6 月 23 日湖南工程学院课 程 设 计 任 务 书课程名称 C语言程序设计课 题 人事档案管理系统专业班级 电子信息1001班学…...

C#企业人事管理系统使用说明

&#xff08;1&#xff09;用户输入用户名、密码后&#xff0c;进入企业人事管理界面 &#xff08;2&#xff09;单击“基础信息管理”菜单栏中的“基础数据”/“民族类别设置”命令&#xff0c;对民族类别信息进行添加、修改、删除及查看操作。 &#xff08;3&#xff09;单…...

人事管理系统实现(七)

按照进程此节应设计F_Manfile窗体&#xff0c;主要适用于与共信息的录入&#xff0c;以及员工信息的修改&#xff0c;查询&#xff0c;报表等功能。这一节首先设计所有tabControl里面的第一个界面&#xff0c;员工基本信息界面&#xff0c;首先&#xff0c;界面设计如下&#x…...

ssm基于Java的微小企业人事管理系统的设计与实现毕业设计源码231012

ssm微小企业人事管理系统的设计与实现 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在…...

人事管理系统项目(二)

人事管理系统项目&#xff08;二&#xff09; 登录界面写好后&#xff0c;跳转到主页面&#xff0c;主页面显示一张员工信息表&#xff0c;所有员工信息都会显示出来&#xff0c;并且附带添加员工、离职员工、批量离职以及编辑员工信息等功能&#xff0c;这些功能后面会在后端…...

人事管理系统项目(三)

人事管理系统项目&#xff08;三&#xff09; 主页面点击添加员工、离职员工等按钮时也会弹出页面&#xff0c;下面来写这个页面样式&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Tit…...

java web人事管理系统

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…...

Java WEB——人事管理系统

Java WEB——人事管理系统数据库网页网页展示部分代码展示问题这是我的一个小总结~ 数据库 这是我数据库里设计的表&#xff0c;具体的我就不展示了……我用的服务器是tomcat&#xff0c;想要连接数据库就要在tomcat的lib中加入mysql-connector-java-5.1.8-bin.jar&#xff0c…...

一期项目实战:问卷调查—人事管理系统

项目&#xff1a;问卷调查—人事管理系统项目功能框架&#xff1a;项目前后台功能展示&#xff1a;项目整体框架&#xff1a;配置、用户、部门、问卷主要代码部分&#xff1a;pom.xml:db.properties&#xff1a;mybatis-config.xml&#xff1a;spring-mvc.xml:spring-mybatis.x…...

springboot海纳部门人事管理系统毕业设计源码

目 录 摘要 1 绪论 1.1研究背景及意义 1.2开发现状 1.3系统开发技术的特色 1.4论文结构与章节安排 2 海纳部门人事管理系统 系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.3.2数据修改流程 2.3.3数据删除流程 2.3 系统功能分析 2.3.1 功能性分析…...

JAVA制作的人事管理系统

package pdsu.hrms.view; import java.awt.Dimension; import java.awt.Font; import java.awt.Image; import java.awt.Toolkit; import java.net.URL; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; im...

应用现有EXCEL工作簿实现简单人事管理

只是对网上一个excel工作簿的学习&#xff0c;分析实现过程。只是应对百人的企业&#xff0c;作一些基础统计&#xff0c;谈分析&#xff0c;没有。 一、界面的设计&#xff1a; 白色线框&#xff1a;在蓝色单元格底色基础上&#xff0c;将选中单元格属性“边框”颜色选为白色…...

C#大作业——人事管理系统

此文仅为记录在校期间windows应用开发课程学习成果&#xff0c;本项目仍存在很多不足&#xff0c;仅供参考学习使用。 本门课程大作业要求完成一个具有主界面、用户登录、注册、注销、重新登陆、员工信息增删改查等功能的系统。其中有10个类&#xff0c;分别是&#xff1a; 主…...