Java项目:仓库管理系统设计和实现(java+ssm+springboot+layui)
源码获取:博客首页 "资源" 里下载!
主要功能模块
1.用户模块管理:用户登录、用户注册、用户的查询、添加、删除操作、
2.客户信息管理:.客户列表的展示、添加、修改、删除操作、
3.供应商管理:供应商详情列表的查看、添加、删除等操作、
4.退货管理和退货查询
5.公告信息管理:公告信息的查看、添加、修改、删除操作、
6.角色管理:角色查询、添加、删除、
7.系统管理、菜单管理以及权限控制
8.管理员信息管理:管理员信息的查看、修改
给大家截一部分效果图:
主要技术:springboot Java、springmvc mysql layui jquery mybatis
用户信息控制层:
/*** <p>* 前端控制器* </p>**/
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@Autowiredprivate DeptService deptService;@Autowiredprivate RoleService roleService;/*** 用户全查询*/@RequestMapping("loadAllUser")public DataGridView loadAllUser(UserVo userVo) {IPage<User> page=new Page<>(userVo.getPage(), userVo.getLimit());QueryWrapper<User> queryWrapper=new QueryWrapper<>();queryWrapper.eq(StringUtils.isNotBlank(userVo.getName()), "loginname", userVo.getName()).or().eq(StringUtils.isNotBlank(userVo.getName()), "name", userVo.getName());queryWrapper.eq(StringUtils.isNotBlank(userVo.getAddress()), "address", userVo.getAddress());queryWrapper.eq("type", Constast.USER_TYPE_NORMAL);//查询系统用户queryWrapper.eq(userVo.getDeptid()!=null, "deptid",userVo.getDeptid());this.userService.page(page, queryWrapper);System.out.println(userService.getClass().getSimpleName());List<User> list = page.getRecords();for (User user : list) {Integer deptid = user.getDeptid();if(deptid!=null) {Dept one =deptService.getById(deptid);user.setDeptname(one.getTitle());}Integer mgr = user.getMgr();if(mgr!=null) {User one = this.userService.getById(mgr);user.setLeadername(one.getName());}}return new DataGridView(page.getTotal(), list);}/*** 加载最大的排序码* @param deptVo* @return*/@RequestMapping("loadUserMaxOrderNum")public Map<String,Object> loadUserMaxOrderNum(){Map<String, Object> map=new HashMap<String, Object>();QueryWrapper<User> queryWrapper=new QueryWrapper<>();queryWrapper.orderByDesc("ordernum");IPage<User> page=new Page<>(1, 1);List<User> list = this.userService.page(page, queryWrapper).getRecords();if(list.size()>0) {map.put("value", list.get(0).getOrdernum()+1);}else {map.put("value", 1);}return map;}/*** 根据部门ID查询用户*/@RequestMapping("loadUsersByDeptId")public DataGridView loadUsersByDeptId(Integer deptid) {QueryWrapper<User> queryWrapper=new QueryWrapper<>();queryWrapper.eq(deptid!=null, "deptid", deptid);queryWrapper.eq("available", Constast.AVAILABLE_TRUE);queryWrapper.eq("type", Constast.USER_TYPE_NORMAL);List<User> list = this.userService.list(queryWrapper);return new DataGridView(list);}/*** 把用户名转成拼音*/@RequestMapping("changeChineseToPinyin")public Map<String,Object> changeChineseToPinyin(String username){Map<String,Object> map=new HashMap<>();if(null!=username) {map.put("value", PinyinUtils.getPingYin(username));}else {map.put("value", "");}return map;}/*** 添加用户*/@RequestMapping("addUser")public ResultObj addUser(UserVo userVo) {try {userVo.setType(Constast.USER_TYPE_NORMAL);//设置类型userVo.setHiredate(new Date());String salt=IdUtil.simpleUUID().toUpperCase();userVo.setSalt(salt);//设置盐userVo.setPwd(new Md5Hash(Constast.USER_DEFAULT_PWD, salt, 2).toString());//设置密码this.userService.save(userVo);return ResultObj.ADD_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.ADD_ERROR;}}/*** 根据用户ID查询一个用户*/@RequestMapping("loadUserById")public DataGridView loadUserById(Integer id) {return new DataGridView(this.userService.getById(id));}/*** 修改用户*/@RequestMapping("updateUser")public ResultObj updateUser(UserVo userVo) {try {this.userService.updateById(userVo);return ResultObj.UPDATE_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.UPDATE_ERROR;}}/*** 删除用户*/@RequestMapping("deleteUser")public ResultObj deleteUser(Integer id) {try {this.userService.removeById(id);return ResultObj.DELETE_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.DELETE_ERROR;}}/*** 重置用户密码*/@RequestMapping("resetPwd")public ResultObj resetPwd(Integer id) {try {User user=new User();user.setId(id);String salt=IdUtil.simpleUUID().toUpperCase();user.setSalt(salt);//设置盐user.setPwd(new Md5Hash(Constast.USER_DEFAULT_PWD, salt, 2).toString());//设置密码this.userService.updateById(user);return ResultObj.RESET_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.RESET_ERROR;}}/*** 根据用户ID查询角色并选中已拥有的角色*/@RequestMapping("initRoleByUserId")public DataGridView initRoleByUserId(Integer id) {//1,查询所有可用的角色QueryWrapper<Role> queryWrapper=new QueryWrapper<>();queryWrapper.eq("available", Constast.AVAILABLE_TRUE);List<Map<String, Object>> listMaps = this.roleService.listMaps(queryWrapper);//2,查询当前用户拥有的角色ID集合List<Integer> currentUserRoleIds=this.roleService.queryUserRoleIdsByUid(id);for (Map<String, Object> map : listMaps) {Boolean LAY_CHECKED=false;Integer roleId=(Integer) map.get("id");for (Integer rid : currentUserRoleIds) {if(rid==roleId) {LAY_CHECKED=true;break;}}map.put("LAY_CHECKED", LAY_CHECKED);}return new DataGridView(Long.valueOf(listMaps.size()), listMaps);}/*** 保存用户和角色的关系*/@RequestMapping("saveUserRole")public ResultObj saveUserRole(Integer uid,Integer[] ids) {try {this.userService.saveUserRole(uid,ids);return ResultObj.DISPATCH_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.DISPATCH_ERROR;}}
}
系统控制层:
@Controller
@RequestMapping("sys")
public class SystemController {/*** 跳转到登陆页面*/@RequestMapping("toLogin")public String toLogin() {return "system/index/login";}/*** 跳转到首页*/@RequestMapping("index")public String index() {return "system/index/index";}/*** 跳转到工作台*/@RequestMapping("toDeskManager")public String toDeskManager() {return "system/index/deskManager";}/*** 跳转到日志管理* */@RequestMapping("toLoginfoManager")public String toLoginfoManager() {return "system/loginfo/loginfoManager";}/*** 跳转到公告管理* */@RequestMapping("toNoticeManager")public String toNoticeManager() {return "system/notice/noticeManager";}/*** 跳转到部门管理* */@RequestMapping("toDeptManager")public String toDeptManager() {return "system/dept/deptManager";}/*** 跳转到部门管理-left* */@RequestMapping("toDeptLeft")public String toDeptLeft() {return "system/dept/deptLeft";}/*** 跳转到部门管理--right* */@RequestMapping("toDeptRight")public String toDeptRight() {return "system/dept/deptRight";}/*** 跳转到菜单管理* */@RequestMapping("toMenuManager")public String toMenuManager() {return "system/menu/menuManager";}/*** 跳转到菜单管理-left* */@RequestMapping("toMenuLeft")public String toMenuLeft() {return "system/menu/menuLeft";}/*** 跳转到菜单管理--right* */@RequestMapping("toMenuRight")public String toMenuRight() {return "system/menu/menuRight";}/*** 跳转到权限管理* */@RequestMapping("toPermissionManager")public String toPermissionManager() {return "system/permission/permissionManager";}/*** 跳转到权限管理-left* */@RequestMapping("toPermissionLeft")public String toPermissionLeft() {return "system/permission/permissionLeft";}/*** 跳转到权限管理--right* */@RequestMapping("toPermissionRight")public String toPermissionRight() {return "system/permission/permissionRight";}/*** 跳转到角色管理* */@RequestMapping("toRoleManager")public String toRoleManager() {return "system/role/roleManager";}/*** 跳转到用户管理* */@RequestMapping("toUserManager")public String toUserManager() {return "system/user/userManager";}/*** 跳转到缓存管理* */@RequestMapping("toCacheManager")public String toCacheManager() {return "system/cache/cacheManager";}}
部门控制层:
/*** <p>* 前端控制器* </p>**/
@RestController
@RequestMapping("/dept")
public class DeptController {@Autowiredprivate DeptService deptService;/*** 加载部门管理左边的部门树的json*/@RequestMapping("loadDeptManagerLeftTreeJson")public DataGridView loadDeptManagerLeftTreeJson(DeptVo deptVo) {List<Dept> list = this.deptService.list();List<TreeNode> treeNodes=new ArrayList<>();for (Dept dept : list) {Boolean spread=dept.getOpen()==1?true:false;treeNodes.add(new TreeNode(dept.getId(), dept.getPid(), dept.getTitle(), spread));}return new DataGridView(treeNodes);}/*** 查询*/@RequestMapping("loadAllDept")public DataGridView loadAllDept(DeptVo deptVo) {IPage<Dept> page=new Page<>(deptVo.getPage(), deptVo.getLimit());QueryWrapper<Dept> queryWrapper=new QueryWrapper<>();queryWrapper.like(StringUtils.isNotBlank(deptVo.getTitle()), "title", deptVo.getTitle());queryWrapper.like(StringUtils.isNotBlank(deptVo.getAddress()), "address", deptVo.getAddress());queryWrapper.like(StringUtils.isNotBlank(deptVo.getRemark()), "remark", deptVo.getRemark());queryWrapper.eq(deptVo.getId()!=null, "id", deptVo.getId()).or().eq(deptVo.getId()!=null,"pid", deptVo.getId());queryWrapper.orderByAsc("ordernum");this.deptService.page(page, queryWrapper);return new DataGridView(page.getTotal(), page.getRecords());}/*** 加载最大的排序码* @param deptVo* @return*/@RequestMapping("loadDeptMaxOrderNum")public Map<String,Object> loadDeptMaxOrderNum(){Map<String, Object> map=new HashMap<String, Object>();QueryWrapper<Dept> queryWrapper=new QueryWrapper<>();queryWrapper.orderByDesc("ordernum");IPage<Dept> page=new Page<>(1, 1);List<Dept> list = this.deptService.page(page, queryWrapper).getRecords();if(list.size()>0) {map.put("value", list.get(0).getOrdernum()+1);}else {map.put("value", 1);}return map;}/*** 添加* @param deptVo* @return*/@RequestMapping("addDept")public ResultObj addDept(DeptVo deptVo) {try {deptVo.setCreatetime(new Date());this.deptService.save(deptVo);return ResultObj.ADD_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.ADD_ERROR;}}/*** 修改* @param deptVo* @return*/@RequestMapping("updateDept")public ResultObj updateDept(DeptVo deptVo) {try {this.deptService.updateById(deptVo);return ResultObj.UPDATE_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.UPDATE_ERROR;}}/*** 查询当前的ID的部门有没有子部门*/@RequestMapping("checkDeptHasChildrenNode")public Map<String,Object> checkDeptHasChildrenNode(DeptVo deptVo){Map<String, Object> map=new HashMap<String, Object>();QueryWrapper<Dept> queryWrapper=new QueryWrapper<>();queryWrapper.eq("pid", deptVo.getId());List<Dept> list = this.deptService.list(queryWrapper);if(list.size()>0) {map.put("value", true);}else {map.put("value", false);}return map;}/*** 删除* @param deptVo* @return*/@RequestMapping("deleteDept")public ResultObj deleteDept(DeptVo deptVo) {try {this.deptService.removeById(deptVo.getId());return ResultObj.DELETE_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.DELETE_ERROR;}}
}
供应商控制层:
/*** <p>* 前端控制器* </p>**/
@RestController
@RequestMapping("/provider")
public class ProviderController {@Autowiredprivate ProviderService providerService;/*** 查询*/@RequestMapping("loadAllProvider")public DataGridView loadAllProvider(ProviderVo providerVo) {IPage<Provider> page = new Page<>(providerVo.getPage(), providerVo.getLimit());QueryWrapper<Provider> queryWrapper = new QueryWrapper<>();queryWrapper.like(StringUtils.isNotBlank(providerVo.getProvidername()), "providername",providerVo.getProvidername());queryWrapper.like(StringUtils.isNotBlank(providerVo.getPhone()), "phone", providerVo.getPhone());queryWrapper.like(StringUtils.isNotBlank(providerVo.getConnectionperson()), "connectionperson",providerVo.getConnectionperson());this.providerService.page(page, queryWrapper);return new DataGridView(page.getTotal(), page.getRecords());}/*** 添加*/@RequestMapping("addProvider")public ResultObj addProvider(ProviderVo providerVo) {try {this.providerService.save(providerVo);return ResultObj.ADD_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.ADD_ERROR;}}/*** 修改*/@RequestMapping("updateProvider")public ResultObj updateProvider(ProviderVo providerVo) {try {this.providerService.updateById(providerVo);return ResultObj.UPDATE_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.UPDATE_ERROR;}}/*** 删除*/@RequestMapping("deleteProvider")public ResultObj deleteProvider(Integer id) {try {this.providerService.removeById(id);return ResultObj.DELETE_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.DELETE_ERROR;}}/*** 批量删除*/@RequestMapping("batchDeleteProvider")public ResultObj batchDeleteProvider(ProviderVo providerVo) {try {Collection<Serializable> idList = new ArrayList<Serializable>();for (Integer id : providerVo.getIds()) {idList.add(id);}this.providerService.removeByIds(idList);return ResultObj.DELETE_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.DELETE_ERROR;}}/*** 加载所有可用的供应商*/@RequestMapping("loadAllProviderForSelect")public DataGridView loadAllProviderForSelect() {QueryWrapper<Provider> queryWrapper=new QueryWrapper<>();queryWrapper.eq("available", Constast.AVAILABLE_TRUE);List<Provider> list = this.providerService.list(queryWrapper);return new DataGridView(list);}
}
源码获取:博客首页 "资源" 里下载!
相关文章:

Java Web 中的一些问题
http://localhost:8080/struts2demo/online/userLogin.jsp 请求模式 :// 主机名名称(或者服务器名称) : 端口 / Servlet容器的名称(通常为项目名称) / 自定义的网页文件夹名或者映射中的文件包名 / 网页名称及其后缀或者响应动作…

《零成本实现Web自动化测试--基于Selenium》第一章 自动化测试基础
第一篇 Selenium 和WebDriver工具篇 第一章 自动化测试基础 1.1 初识自动化测试 自动化测试有两种常见方式 1.1.1 代码驱动测试,又叫测试驱动开发(TDD) 1.1.2 图形用户接口测试: 测试框架产生用户接口事件(例如键盘敲击&#x…

第11章 AOF持久化
AOF持久化在硬盘上保存的是对Redis进行的逻辑操作,类似InnoDB中的bin log。说白了就是你对一个Redis输入了哪些语句,AOF文件都会原封不动的保存起来,等到需要回复Redis的时候再把这些语句执行一遍。 11.1 AOF持久化的实现 AOF简单的理解是把执…

Go 语言实现字符串匹配算法 -- BF(Brute Force) 和 RK(Rabin Karp)
今天介绍两种基础的字符串匹配算法,当然核心还是熟悉一下Go的语法,巩固一下基础知识 BF(Brute Force)RK(Rabin Karp) 源字符串:src, 目标字符串:dest; 确认dest是否是src 的一部分。 BF算法很简单暴力,维护两个下标…

Java项目:前后端分离网上手机商城平台系统设计和实现(java+vue+redis+springboot+mysql+ssm)
源码获取:博客首页 "资源" 里下载! 主要模块设计如下: 前后端主要技术:Java springboot springMVC mybatis mysql vue jquery node.js redis 1) 用户注册和登录功能:。 2) 用户信息的管理以及角色的…

利用AutoSPSourceBuilder和Autospinstaller自动安装SharePoint Server 2013图解教程——Part 1...
这是一篇对之前 《利用AutoSPSourceBuilder和Autospinstaller自动安装SharePoint Server 2013图解教程——Part 2》的补充。本篇博客将对AutoSPSourceBuilder的使用进行说明。 AutoSPSourceBuilder介绍 下载AutoSPSourceBuilder点击进入AutoSPSourceBuilder的官网,找…

Git 版本还原命令
转载:https://blog.csdn.net/yxlshk/article/details/79944535 1.需求场景: 在利用github实现多人协作开发项目的过程中,有时会出现错误提交的情况,此时我们希望能撤销提交操作,让当前版本回到提交前的样子或者某一个版…

NVME CLI -- nvme 命令查看NVME设备内部状态
文章目录NVME 和 AHCI 性能比较NVME-CLI nvme工具使用1. 安装2. 命令综述3. 基本命令演示4. NVME 固件设备升级近期在做一些rocksdb on 新硬件的性能测试(flash ssd, nvme ssd , nvme optane ssd, optane persistent memory),由于底层一些设备…

Java项目:网上水果蔬菜项目系统设计和实现(java+springboot+mysql+ssm)
源码获取:博客首页 "资源" 里下载! 主主要技术:java springmvc springboot mybatis mysql jquery layui 等技术要模块设计如下: 用户角色的功能: 登录、注册、浏览商品、修改个人信息(上传…

POJ 1189 记忆化搜索
钉子和小球Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 7218 Accepted: 2164Description 有一个三角形木板,竖直立放,上面钉着n(n1)/2颗钉子,还有(n1)个格子(当n5时如图1)。每颗钉子和周围的钉子的距离都等于d&am…

Android短信管家视频播放器代码备份
自己保留备份,增强记忆 这是video的类 public class VideoActivity extends Activity {/*** 解析网络页面*/private WebView wv;/*** 进度条类*/private ProgressDialog pd;/*** 异步处理消息*/private Handler handler;private static final int SHOW 0;private s…

Python常用函数--文档字符串DocStrings
Python 有一个甚是优美的功能称作python文档字符串(Documentation Strings),在称呼它时通常会使用另一个短一些的名字docstrings。DocStrings 是一款你应当使用的重要工具,它能够帮助你更好地记录程序并让其更加易于理解。令人惊叹…

Go 分布式学习利器(17)-- Go并发编程之协程机制:Grountine 原理及使用
文章目录1. Thread VS Groutine2. Groutine 调度原理3. Groutine 示例代码关于Go的底层实现还需要后续持续研究,文中如有一些原理描述有误,欢迎指证。 1. Thread VS Groutine 这里主要介绍一下Go的并发协程相比于传统的线程 的不同点: 创建…

Java项目:美食菜谱分享平台系统设计和实现(java+springboot+mysql+ssm)
源码获取:博客首页 "资源" 里下载! 主要技术实现:spring、 springmvc、 springboot、mybatis 、session、 jquery 、 md5 、bootstarp.js tomcat、拦截器等。 具体主要功能模块如下: 1.用户模块管理:用户…

【leetcode】Roman to Integer
题目描述: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. 解题思路: 首先我们要了解罗马数字怎么写的 个位数举例 I, 1 】II, 2】 III, 3】 IV, 4 】V, 5 】VI, 6】 VII, 7】 VIII,8 】…

Apache Traffic Server管理工具
Traffic Line是命令行程序,可以用来快速监视 Traffic Server 的性能和网络流量,也能配置 TS。Traffic Shell也是命令行工具,进入该 shell 后有自己一套语法,可代替 Traffic Line 完成监控、配置任务。通过 Traffic Line 和 Traffi…

npm使用记录
npm是一个 包管理工具。安装node之后就可以使用npm命令了,为了方便使用,通常我们还要装下 淘宝NPM镜像,之后就可以用cnpm命令了。 注意:以下提到的如-g --save等标签都可以放在 包名前面。 首先一个前端项目下载下来,需…

Go 分布式学习利器(18)-- Go并发编程之lock+WaitGroup实现线程安全
Go语言中通过Groutine 启动一个Go协程,不同协程之间是并发执行的,就像C/Java中线程之间线程安全是一个常见的问题。 如下Go 语言代码: func TestConcurrent(t *testing.T) {var counter int 0for i : 0;i < 5000; i {go func() { // 启动groutine 进…

Java项目:网上家具商城平台设计和实现(java+springboot+mysql+ssm)
源码获取:博客首页 "资源" 里下载! 主要技术:springmvc springboot mybatis mysql jquery layui 等技术 具体功能模块: (1) 用户注册和登录登录功能: ①用户的注册功能 : 访问网站的人根据网站的提示注册…

Linux socket TIME_WAIT 优化
如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,vim /etc/sysctl.conf编辑文件,加入以下内容:net.ipv4.tcp_syncookies 1net.ipv4.tcp_tw_reuse 1net.ipv4.tcp_tw_recycle 1net.ipv4.tcp_fin_timeout 30然后执行…

Android Handler的使用!!!
大家好我们这一节讲的是Android Handler的使用,在讲Handler之前,我们先提个小问题,就是如何让程序5秒钟更新一下Title.首先我们看一下习惯了Java编程的人,在不知道Handler的用法之前是怎么样写的程序,代码如下所示:view plaincopy to clipboa…

git之reset图解
https://blog.csdn.net/longintchar/article/details/81843048 1、三棵树。 此时如果我们运行 git status,会发现没有任何改动,因为现在三棵树完全相同。 修改文件 现在我们想要对文件进行修改然后提交它。我们将会经历同样的过程;首先在工作…

Go 分布式学习利器(19)-- Go并发编程 之 CSP(communicating sequential processes) 机制
文章目录前言CSP 特点CSP代码 演示1. 正常流程的代码2. CSP 未设置buffer 代码3. 设置指定大小的channel buffer总结前言 CSP 这个名词大家会比较陌生,但是说到future 熟悉C / JAVA 线程模型的伙伴可能就会很熟悉了, 通过future机制能够实现两个线程之间…

Java项目:学生学科竞赛管理管理系统设计和实现(java+springboot+ssm+maven)
源码获取:博客首页 "资源" 里下载! 主要技术、spring、 springmvc、 springboot、 mybatis 、 jquery 、 layUI、md5 、bootstarp.js tomcat、、拦截器等项目 主要功能:登录、用户、菜单管理、角色管理、权限管理、立项申请、报名、结、经费…

update 改写 merge into
update语句改写成merge into有时会提高运行速度 看两个案例 1.根据业务将两个嵌套子查询改写成max,速度有3min提升到3s UPDATE OPER_792.LL_SCB_YDKB_20120730 A SET A.DCP (SELECT B.PROD_OFFER_NAME FROM OPER_792.YD_TC B WHERE A.SERV_ID B.SERV_ID AND B.TC_…

CCControlSwitch 、CCControlSlider、CCControlButton
/**bool hasMoved(); 这里获取的不是开关是否正在被用户拨动,而是开关最终的状态是由用户手动拨动开关进行的,*还是用户点击开关进行的状态更改*/CCControlSwitch* pSwitch CCControlSwitch::create(CCSprite::create("switch-mask.png"),CCS…

bzoj2961 共点圆 (CDQ分治, 凸包)
/* 可以发现可行的圆心相对于我们要查询的点是在一个半平面上, 然后我们要做的就是动态维护凸壳然后用这个半平面去切它 看看是否是在合法的那一面然后cdq分治就可以了代码基本是抄的,*/#include<cstdio> #include<algorithm> #include<c…

Rocksdb Iterator实现:从DBIter 到 TwoLevelIter 的漫长链路
文章目录1. 迭代器简单介绍2. 迭代器用户态相关接口3. 迭代器内部架构4. 迭代器的入口实现4.1 DBIter4.2 MergingIterator4.3 Memtable系列Iterator4.4 LevelIterator 和 TwoLevelIteratorps:本文的基础迭代器设计 以及 相关代码 是基于rocksdb 6.4.6版本进行描述的…

Java项目:OA办公自动化系统设计和实现(java+springboot+freemarker+mysql+maven+mybatis+jpa)
源码获取:博客首页 "资源" 里下载! java springbootOA办公自动化系统: 主要功能模块:系统、用户、角色、考勤、流程、公告、邮件、任务、日程、计划、文件、笔记、通讯录、讨论区等多个模块管理 使用Maven进行项目管理…

UIScrollView上面放一个UIScrollView或者UITableView拖动时候 View出现一闪一闪解决办法...
在项目中发现一个问题: 创建一个UIScrollView 上面放一个scrollView或者TableView,拖动scrollview或TableView 画面出现一闪一闪的情况。 解决办法设置一下UIScrollView的contentSize 如果你是上下滑动scrollView.contentSize CGSizeMake(0, self.view.…