首页 文章 精选 留言 我的

精选列表

搜索[最权威安装],共10030篇文章
优秀的个人博客,低调大师

《微软云计算Windows Azure开发与部署权威指南》——导读

https://yqfile.alicdn.com/3043625418f9de9de0f6111aaef4f0adbb8afaa5.png" > 前言 云计算技术正在快速地发展,业界各大厂商纷纷制定相应的战略,新的概念、观点和产品不断涌现。云计算的技术热点也呈现百花齐放的局面,比如以互联网为平台的虚拟化解决方案的运行平台,基于多租户技术的业务系统在线开发、运行和运营平台,大规模云存储服务,大规模云通信服务等。云计算的出现为信息技术领域带来了新的挑战,也为信息技术产业带来了新的机遇。 微软曾提出这样一个观点——“IT即服务”,也就是怎样能够把云计算的理念真正结合到IT层面,实现用户、合作伙伴在计算机领域的更多创新。在微软的全球布局下,中国市场始终具有重要的战略意义。微软在上海正式成立了云计算创新中心,并安排经验丰富的工程师团队与客户和合作伙伴紧密合作,充分挖掘云计算的潜力。同时,微软中国云计算创新中心的专属实验室可以帮助政府、合作伙伴和客户实施快速建模、概念验证、云计算解决方案的测试。 微软的云计算战略提供了3种不同的运营模式,这与其他公司的云计算战略有很大的不同。 第一种模式是微软自己构建及运营公有云的应用和服务,向个人消费者和企业客户提供云服务的微软运营模式。例如,微软向最终使用者提供Online Services和Windows Live等服务。 第二种模式是ISV/SI等各种合作伙伴基于Windows Azure Platform开发的如ERP、CRM等各种云计算应用,并在Windows Azure Platform上为最终使用者提供服务。另外,微软运营在自己的云计算平台中的Business Productivity Online Suite (BPOS)也可以交给合作伙伴进行托管运营。BPOS主要包括Exchange Online、SharePoint Online、Office Communications Online和LiveMeeting Online等服务,这种属于伙伴运营模式。 第三种模式是客户可以选择微软的云计算解决方案构建自己的云计算平台。微软提供包括产品、技术、平台和运维管理在内的全面支持,这是客户自建的运营模式。 微软陆续为Windows Azure增加了如VM Role、远程桌面管理等新功能。但从整体技术架构和功能上来看,Windows Azure是一个以PaaS为核心定位的云计算平台。从平台的角度来看,可以认为Windows Azure是Windows的延伸。微软希望Windows技术能够在嵌入式设备、手机、平板、个人电脑、服务器和云计算数据中心中应用,也希望基于Windows Azure平台构建新的IT生态系统。 本书主要讲解了微软云计算开发与部署,主要包括Windows Azure平台的基础知识、使用方法、功能特点,以及如何基于Windows Azure平台设计高可靠性、可扩展的应用程序。本书还介绍了Windows Azure平台的高级应用,如何在项目中灵活使用Windows Azure平台的各种功能,以及如何更好地构建基于Windows Azure的应用程序。本书还讲解了微软私有云、公有云迁移、开发与部署。 本书在编写过程中得到许多专家、学者及老师的大力支持,在此一并感谢。前言 第1章 云计算概论第2章 微软云计算概述第3章 微软云计算Windows Azure概述与简单演练第4章 Windows Azure的应用程序 开发第5章 SQL Azure云关系数据库[第6章 Windows Azure平台访问控制与总线AppFabric 6.1 服务导向架构 ](https://yq.aliyun.com/articles/99097)6.2 Azure平台AppFabric概述 6.3 Windows Azure的AppFabric存取控制应用程序设计 6.4 AppFabric访问控制管理服务 6.5 AppFabric服务总线基础概念 6.6 AppFabric服务总线服务Remoting的应用程序开发 6.7 AppFabric服务总线REST的服务开发 6.8 AppFabric服务总线的多播服务开发 6.9 AppFabric消息缓冲区:云端上的信息暂存区 6.10 小结 第7章 开发Windows Phone 8的云计算应用程序第8章 开发iOS的云计算应用程序第9章 开发Android的云计算应用程序第10章 开发Windows 8云计算应用程序第11章 Windows Azure与其他平台的互通性与安全性第12章 云计算部署第13章 微软云计算案例分析

优秀的个人博客,低调大师

🔥 xbatis 1.10.9 正式发版,mybatis 系列最好用最简单最方便的 ORM !!!

推荐理由: 强、强、强 ,单表?连表?不想连表?让你直接少写 1/3 甚至 2/3 的持久层代码;API 简单 快捷 优雅 简洁 构建 SQL 非常强!用过的 没用过的都来体验,虽然有 AI 了,但是真正好用的 ORM 的还不能忽略的,除非你以后不维护。 1.10.8 - 2026-08-21 1:优化部分代码 2:xbatis-ddl-auto 支持 SYNC 模式 1.10.7 - 2026-07-20 1:修复 distinct 多列在 count 时优化错误的问题 2:新增 count 优化开关 3:增强 case when,支持多个条件 1.10.6 - 2026-07-02 1:新增 COALESCE 函数 2:新增 Map 结果 强制包含 value 为 null 的 key 3:新增 Map key 下划线转驼峰处理 4:新增 DDL 自动化(自动建表、索引、列新增、序列) 1.10.5 - 2026-06-21 1:修复插入数据时,未拼上 @Table 的 schema 的问题 2:增加局部某个表 leftJoin 禁止优化的功能 3:其他优化 4:增加 SQL 审计 1.10.3 - 2026-05-27 1:@Fetch fetchFilter 强制调用开关 2:数据库识别支持 p6spy jdbc url 格式 3:其他优化 表名 /schema 支持动态设置(非分表行为) 4:crud 支持自己创建的 lambda getter 方法引用例如: .eq(EntityLambdaUtil.createSetter(SysUser.class, "id"), 1) 5:修复单列 Fetch 数据库为 null 时运行异常的问题 6:增加 nested 方法来替代 orNested 和 andNested 7:增加 where 方法平替 and or 动态方法 8:新增 getValueById (获取单列值) 方法 9:QueryChain 增加 mapGroupWithKey 分组功能 1.10.2 - 2026-04-29 1:实现 @Fetch, 支持生效条件 2:in/notIn 单条时,变成 eq/ne 行为 3:其他优化 1.10.1 - 2026-04-27 1: 优化 @Fetch 功能代码 2:实现 @Fetch 更多合并的功能场景(从 2 层到 1 层转变,减少 VO 创建) 3:@Fetch 注解增加逻辑删除策略(支持忽略逻辑删除) 1.10.0 - 2026-04-18 1:修复主动调用了 fetchFilter/fetchEnable 时,可能出现报错的问题(未使用 fetchFilter/fetchEnable 的不影响) 1.9.9 - 2026-04-13 1:增加 partialUpdate 精准 (局部) 修改方法 2:原生 updateBatch 修改增加 null / 默认值忽略设置方法 3:LambdaUtil 类增加 setter/getter Lambda 生成方法 4:@ResultCalcField 注解支持数据库函数 5:修复 exists/notExists 中子查询嵌套子查询时,别名一致导致无法上下级引用的问题 6:增加 join 子查询的简化写法 7:所有 Mp 开头的类 改为 Xbatis 开头 8:优化 selectIgnore 功能,不再要求先 select 9:增加 orderByAsc 方法,减少从 mybatis-plus 迁移到 xbatis 的工作量 10:优化底层代码 11:增加 resultmap 官方动态映射继承 12:所有查询完美兼容 pageHelper 13:对于顶级类的字段增加列为为字段名的 resultMap 映射 14:支持多列 in-notIn 操作 15:@Fetch 支持合并查询(从 2 层到 1 层转变,减少 VO 创建) 1.8.7 更新内容: 1:为了更好的 JAVA+XML 结合,query 和 where 增加 tableAs (实体类,别名) 方法,用于自定义表名别名 2:XbatisConfig 改为 XbatisGlobalConfig 3:增加逻辑删除拦截器 4:update delete 增加 原生 RETURNING (原生) 功能 5:增加原生 sql 查询方法和 update delete RETURNING 功能 6:增加了一个 Mapper 方法拦截器 7:增加 exists/not exists 简易写法 通用 SQL 扩展: //类型支持 实体类,VO和普通POJO SysUser user = sysUserMapper.select(SysUser.class, "select * from t_sys_user where id =?", 1); //支持增删改,且支持返回数据 String user_name = sysUserMapper.executeAndReturning(String.class, "update t_sys_user set user_name=? where id=1 RETURNING user_name", "xxx"); //ORM写法 删除并返回被删除的数据(数据库原生操作) List list = DeleteChain.of(sysUserMapper) .in(SysUser::getId, 1, 2) .returning(SysUser.class) .returnType(SysUser.class) .executeAndReturningList(); //ORM写法 修改并返回修改后的数据(数据库原生操作)适合金额加减操作返回剩余金额 SysUser sysUser = UpdateChain.of(sysUserMapper) .eq(SysUser::getId, 1) .set(SysUser::getUserName, "abc2") .returning(SysUser.class) .returnType(SysUser.class) .executeAndReturning(); Java 代码解读 复制代码 展开代码 ▼ 分表配置 @Data @SplitTable(SysUserSplitter.class) public class SysUser { @TableId private Integer id; @SplitTableKey private Integer groupId; private String nickname; private String username; } Java 代码解读 复制代码 展开代码 ▼ public class SysUserSplitter implements TableSplitter { @Override public boolean support(Class type) { return type == Integer.class ** type == int.class; } @Override public String split(String sourceTableName, Object splitValue) { Integer groupId = (Integer) splitValue; //分成10个表 return sourceTableName + "_" + groupId % 10; } } Java 代码解读 复制代码 展开代码 ▼ 分表就是这么简单,其他操作和常规无异!!! 1.7.7 更新内容: 1:QueryChain,DeleteChain,InsertChain,UpdateChain 支持 BasicMapper 方法 2:支持通用 BasicMapper,可不需要创建多个实体类 Mapper;一个 BasicMapper 即可使用所有功能 3:正式支持单 Mapper (写一个 Mapper 即可) 为什么推荐 xbatis?: xbatis 是一款超级强大的 ORM 框架 1:可多表 join(不再只能单表了) 2:代码分页,xml 还可以分页(可以不用 pagehelper 了) 3:良好的扩展能力:orm+sql 模板 (让 ORM 框架不再死板,扩展性极强) 4:强大的各种数据库适配,可在一套代码中 实现多个数据库适配;真正的 ORM hibernate 都做不到 6:极简的 api 设计,让开发者 不再迷糊 1. 单表 +@Fetch 注解 + fetchFilter 方法 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; private String password; private Integer roleId; private LocalDateTime create_time; @Fetch(source = SysUser.class, property = "roleId", target = SysRole.class, targetProperty = "id") private List sysRoles; } Java 代码解读 复制代码 展开代码 ▼ List list = QueryChain.of(sysUserMapper) .from(SysUser.class) .fetchFilter(SysUserVO::getRoles,where->where.eq(SysRole::getStatus,1)) .returnType(SysUserVO.class) .list(); Java 代码解读 复制代码 fetchFilter 方法是对 @Fetch 注解的增强,没有特殊要求一般,可忽略 2. 单表查询 SysUser sysUser = QueryChain.of(sysUserMapper) .eq(SysUser::getId, 1) .eq(SysUser::getUserName,'admin') .get(); Java 代码解读 复制代码 3.VO 映射 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; //字段名字不一样时 @ResultEntityField(property = "password") private String pwd; } Java 代码解读 复制代码 展开代码 ▼ SysUserVO sysUserVO = QueryChain.of(sysUserMapper) .eq(SysUser::getId, 1) .eq(SysUser::getUserName,'admin') .returnType(SysUserVO.class) .list(); Java 代码解读 复制代码 4. join 查询 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; //字段名字不一样时 @ResultEntityField(property = "password") private String pwd; //映射一个对象 1对1 @NestedResultEntity(target = SysRole.class) prviate SysRole sysRole; //映射多个对象 1对多 @NestedResultEntity(target = SysRole.class) prviate List sysRoles; } Java 代码解读 复制代码 展开代码 ▼ List list = QueryChain.of(sysUserMapper) .from(SysUser.class) .join(SysUser.class, SysRole.class) .returnType(SysUserRoleVO.class) .list(); Java 代码解读 复制代码 还有很多很多超级方便有趣的写法,欢迎大家来使用 https://xbatis.cn 例如: 1 . 多表 join A 内嵌 B B 内嵌 C 都可以 2 . 不使用 join 使用 @Fetch 注解 + fetchFilter 方法实现 将 A JOIN B 变成 query A + query B 3 . 使用 @Paging 注解 实现你的 xml 自动分页 4 . 使用 SQL 模板,让你 ORM 更简单更容易扩展,再也不怕被框架限制了

优秀的个人博客,低调大师

🔥 xbatis 1.10.8 正式发版,mybatis 系列最好用最简单最方便的 ORM !!!

推荐理由: 强、强、强 ,单表?连表?不想连表?让你直接少写 1/3 甚至 2/3 的持久层代码;API 简单 快捷 优雅 简洁 构建 SQL 非常强!用过的 没用过的都来体验,虽然有 AI 了,但是真正好用的 ORM 的还不能忽略的,除非你以后不维护。 1.10.8 - 2026-08-21 1:优化部分代码 2:xbatis-ddl-auto 支持SYNC模式 1.10.7 - 2026-07-20 1:修复 distinct 多列在 count 时优化错误的问题 2:新增 count 优化开关 3:增强 case when,支持多个条件 1.10.6 - 2026-07-02 1:新增 COALESCE 函数 2:新增 Map 结果 强制包含 value 为 null 的 key 3:新增 Map key 下划线转驼峰处理 4:新增 DDL 自动化(自动建表、索引、列新增、序列) 1.10.5 - 2026-06-21 1:修复插入数据时,未拼上 @Table 的 schema 的问题 2:增加局部某个表 leftJoin 禁止优化的功能 3:其他优化 4:增加 SQL 审计 1.10.3 - 2026-05-27 1:@Fetch fetchFilter 强制调用开关 2:数据库识别支持 p6spy jdbc url 格式 3:其他优化 表名 /schema 支持动态设置(非分表行为) 4:crud 支持自己创建的 lambda getter 方法引用例如: .eq(EntityLambdaUtil.createSetter(SysUser.class, "id"), 1) 5:修复单列 Fetch 数据库为 null 时运行异常的问题 6:增加 nested 方法来替代 orNested 和 andNested 7:增加 where 方法平替 and or 动态方法 8:新增 getValueById (获取单列值) 方法 9:QueryChain 增加 mapGroupWithKey 分组功能 1.10.2 - 2026-04-29 1:实现 @Fetch, 支持生效条件 2:in/notIn 单条时,变成 eq/ne 行为 3:其他优化 1.10.1 - 2026-04-27 1: 优化 @Fetch 功能代码 2:实现 @Fetch 更多合并的功能场景(从 2 层到 1 层转变,减少 VO 创建) 3:@Fetch 注解增加逻辑删除策略(支持忽略逻辑删除) 1.10.0 - 2026-04-18 1:修复主动调用了 fetchFilter/fetchEnable 时,可能出现报错的问题(未使用 fetchFilter/fetchEnable 的不影响) 1.9.9 - 2026-04-13 1:增加 partialUpdate 精准 (局部) 修改方法 2:原生 updateBatch 修改增加 null / 默认值忽略设置方法 3:LambdaUtil 类增加 setter/getter Lambda 生成方法 4:@ResultCalcField 注解支持数据库函数 5:修复 exists/notExists 中子查询嵌套子查询时,别名一致导致无法上下级引用的问题 6:增加 join 子查询的简化写法 7:所有 Mp 开头的类 改为 Xbatis 开头 8:优化 selectIgnore 功能,不再要求先 select 9:增加 orderByAsc 方法,减少从 mybatis-plus 迁移到 xbatis 的工作量 10:优化底层代码 11:增加 resultmap 官方动态映射继承 12:所有查询完美兼容 pageHelper 13:对于顶级类的字段增加列为为字段名的 resultMap 映射 14:支持多列 in-notIn 操作 15:@Fetch 支持合并查询(从 2 层到 1 层转变,减少 VO 创建) 1.8.7 更新内容: 1:为了更好的 JAVA+XML 结合,query 和 where 增加 tableAs (实体类,别名) 方法,用于自定义表名别名 2:XbatisConfig 改为 XbatisGlobalConfig 3:增加逻辑删除拦截器 4:update delete 增加 原生 RETURNING (原生) 功能 5:增加原生 sql 查询方法和 update delete RETURNING 功能 6:增加了一个 Mapper 方法拦截器 7:增加 exists/not exists 简易写法 通用 SQL 扩展: //类型支持 实体类,VO和普通POJO SysUser user = sysUserMapper.select(SysUser.class, "select * from t_sys_user where id =?", 1); //支持增删改,且支持返回数据 String user_name = sysUserMapper.executeAndReturning(String.class, "update t_sys_user set user_name=? where id=1 RETURNING user_name", "xxx"); //ORM写法 删除并返回被删除的数据(数据库原生操作) List list = DeleteChain.of(sysUserMapper) .in(SysUser::getId, 1, 2) .returning(SysUser.class) .returnType(SysUser.class) .executeAndReturningList(); //ORM写法 修改并返回修改后的数据(数据库原生操作)适合金额加减操作返回剩余金额 SysUser sysUser = UpdateChain.of(sysUserMapper) .eq(SysUser::getId, 1) .set(SysUser::getUserName, "abc2") .returning(SysUser.class) .returnType(SysUser.class) .executeAndReturning(); Java 代码解读 复制代码 展开代码 ▼ 分表配置 @Data @SplitTable(SysUserSplitter.class) public class SysUser { @TableId private Integer id; @SplitTableKey private Integer groupId; private String nickname; private String username; } Java 代码解读 复制代码 展开代码 ▼ public class SysUserSplitter implements TableSplitter { @Override public boolean support(Class type) { return type == Integer.class ** type == int.class; } @Override public String split(String sourceTableName, Object splitValue) { Integer groupId = (Integer) splitValue; //分成10个表 return sourceTableName + "_" + groupId % 10; } } Java 代码解读 复制代码 展开代码 ▼ 分表就是这么简单,其他操作和常规无异!!! 1.7.7 更新内容: 1:QueryChain,DeleteChain,InsertChain,UpdateChain 支持 BasicMapper 方法 2:支持通用 BasicMapper,可不需要创建多个实体类 Mapper;一个 BasicMapper 即可使用所有功能 3:正式支持单 Mapper (写一个 Mapper 即可) 为什么推荐 xbatis?: xbatis 是一款超级强大的 ORM 框架 1:可多表 join(不再只能单表了) 2:代码分页,xml 还可以分页(可以不用 pagehelper 了) 3:良好的扩展能力:orm+sql 模板 (让 ORM 框架不再死板,扩展性极强) 4:强大的各种数据库适配,可在一套代码中 实现多个数据库适配;真正的 ORM hibernate 都做不到 6:极简的 api 设计,让开发者 不再迷糊 1. 单表 +@Fetch 注解 + fetchFilter 方法 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; private String password; private Integer roleId; private LocalDateTime create_time; @Fetch(source = SysUser.class, property = "roleId", target = SysRole.class, targetProperty = "id") private List sysRoles; } Java 代码解读 复制代码 展开代码 ▼ List list = QueryChain.of(sysUserMapper) .from(SysUser.class) .fetchFilter(SysUserVO::getRoles,where->where.eq(SysRole::getStatus,1)) .returnType(SysUserVO.class) .list(); Java 代码解读 复制代码 fetchFilter 方法是对 @Fetch 注解的增强,没有特殊要求一般,可忽略 2. 单表查询 SysUser sysUser = QueryChain.of(sysUserMapper) .eq(SysUser::getId, 1) .eq(SysUser::getUserName,'admin') .get(); Java 代码解读 复制代码 3.VO 映射 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; //字段名字不一样时 @ResultEntityField(property = "password") private String pwd; } Java 代码解读 复制代码 展开代码 ▼ SysUserVO sysUserVO = QueryChain.of(sysUserMapper) .eq(SysUser::getId, 1) .eq(SysUser::getUserName,'admin') .returnType(SysUserVO.class) .list(); Java 代码解读 复制代码 4. join 查询 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; //字段名字不一样时 @ResultEntityField(property = "password") private String pwd; //映射一个对象 1对1 @NestedResultEntity(target = SysRole.class) prviate SysRole sysRole; //映射多个对象 1对多 @NestedResultEntity(target = SysRole.class) prviate List sysRoles; } Java 代码解读 复制代码 展开代码 ▼ List list = QueryChain.of(sysUserMapper) .from(SysUser.class) .join(SysUser.class, SysRole.class) .returnType(SysUserRoleVO.class) .list(); Java 代码解读 复制代码 还有很多很多超级方便有趣的写法,欢迎大家来使用 https://xbatis.cn 例如: 1 . 多表 join A 内嵌 B B 内嵌 C 都可以 2 . 不使用 join 使用 @Fetch 注解 + fetchFilter 方法实现 将 A JOIN B 变成 query A + query B 3 . 使用 @Paging 注解 实现你的 xml 自动分页 4 . 使用 SQL 模板,让你 ORM 更简单更容易扩展,再也不怕被框架限制了

优秀的个人博客,低调大师

🔥 xbatis 1.10.7 正式发版,mybatis 系列最好用最简单最方便的 ORM !!!

推荐理由: 强、强、强 ,单表?连表?不想连表?让你直接少写 1/3 甚至 2/3 的持久层代码;API 简单 快捷 优雅 简洁 构建 SQL 非常强!用过的 没用过的都来体验,虽然有 AI 了,但是真正好用的 ORM 的还不能忽略的,除非你以后不维护。 1.10.7 - 2026-07-20 1:修复distinct多列在count时优化错误的问题 2:新增count优化开关 3:增强case when,支持多个条件 1.10.6 - 2026-07-02 1:新增 COALESCE 函数 2:新增Map 结果 强制包含 value 为 null 的 key 3:新增Map key 下划线转驼峰处理 4:新增DDL 自动化(自动建表、索引、列新增、序列) 1.10.5 - 2026-06-21 1:修复插入数据时,未拼上 @Table 的 schema 的问题 2:增加局部某个表 leftJoin 禁止优化的功能 3:其他优化 4:增加SQL 审计 1.10.3 - 2026-05-27 1:@Fetch fetchFilter 强制调用开关 2:数据库识别支持 p6spy jdbc url 格式 3:其他优化 表名 /schema 支持动态设置(非分表行为) 4:crud 支持自己创建的 lambda getter 方法引用例如:.eq(EntityLambdaUtil.createSetter(SysUser.class, "id"), 1) 5:修复单列 Fetch 数据库为 null 时运行异常的问题 6:增加 nested 方法来替代 orNested 和 andNested 7:增加 where 方法平替 and or 动态方法 8:新增 getValueById (获取单列值) 方法 9:QueryChain 增加 mapGroupWithKey 分组功能 1.10.2 - 2026-04-29 1:实现 @Fetch, 支持生效条件 2:in/notIn 单条时,变成 eq/ne 行为 3:其他优化 1.10.1 - 2026-04-27 1: 优化 @Fetch 功能代码 2:实现 @Fetch 更多合并的功能场景(从 2 层到 1 层转变,减少 VO 创建) 3:@Fetch 注解增加逻辑删除策略(支持忽略逻辑删除) 1.10.0 - 2026-04-18 1:修复主动调用了 fetchFilter/fetchEnable 时,可能出现报错的问题(未使用 fetchFilter/fetchEnable 的不影响) 1.9.9 - 2026-04-13 1:增加 partialUpdate 精准 (局部) 修改方法 2:原生 updateBatch 修改增加 null / 默认值忽略设置方法 3:LambdaUtil 类增加 setter/getter Lambda 生成方法 4:@ResultCalcField 注解支持数据库函数 5:修复 exists/notExists 中子查询嵌套子查询时,别名一致导致无法上下级引用的问题 6:增加join 子查询的简化写法 7:所有 Mp 开头的类 改为 Xbatis 开头 8:优化 selectIgnore 功能,不再要求先 select 9:增加 orderByAsc 方法,减少从 mybatis-plus 迁移到 xbatis 的工作量 10:优化底层代码 11:增加 resultmap 官方动态映射继承 12:所有查询完美兼容 pageHelper 13:对于顶级类的字段增加列为为字段名的 resultMap 映射 14:支持多列 in-notIn 操作 15:@Fetch 支持合并查询(从 2 层到 1 层转变,减少 VO 创建) 1.8.7 更新内容: 1:为了更好的 JAVA+XML 结合,query 和 where 增加 tableAs (实体类,别名) 方法,用于自定义表名别名 2:XbatisConfig 改为 XbatisGlobalConfig 3:增加逻辑删除拦截器 4:updatedelete增加 原生 RETURNING (原生) 功能 5:增加原生 sql 查询方法和update delete RETURNING 功能 6:增加了一个Mapper 方法拦截器 7:增加exists/not exists 简易写法 通用 SQL 扩展: //类型支持 实体类,VO和普通POJO SysUser user = sysUserMapper.select(SysUser.class, "select * from t_sys_user where id =?", 1); //支持增删改,且支持返回数据 String user_name = sysUserMapper.executeAndReturning(String.class, "update t_sys_user set user_name=? where id=1 RETURNING user_name", "xxx"); //ORM写法 删除并返回被删除的数据(数据库原生操作) List list = DeleteChain.of(sysUserMapper) .in(SysUser::getId, 1, 2) .returning(SysUser.class) .returnType(SysUser.class) .executeAndReturningList(); //ORM写法 修改并返回修改后的数据(数据库原生操作)适合金额加减操作返回剩余金额 SysUser sysUser = UpdateChain.of(sysUserMapper) .eq(SysUser::getId, 1) .set(SysUser::getUserName, "abc2") .returning(SysUser.class) .returnType(SysUser.class) .executeAndReturning(); Java 代码解读复制代码 展开代码▼ 分表配置 @Data @SplitTable(SysUserSplitter.class) public class SysUser { @TableId private Integer id; @SplitTableKey private Integer groupId; private String nickname; private String username; } Java 代码解读复制代码 展开代码▼ public class SysUserSplitter implements TableSplitter { @Override public boolean support(Class type) { return type == Integer.class ** type == int.class; } @Override public String split(String sourceTableName, Object splitValue) { Integer groupId = (Integer) splitValue; //分成10个表 return sourceTableName + "_" + groupId % 10; } } Java 代码解读复制代码 展开代码▼ 分表就是这么简单,其他操作和常规无异!!! 1.7.7 更新内容: 1:QueryChain,DeleteChain,InsertChain,UpdateChain 支持 BasicMapper 方法 2:支持通用 BasicMapper,可不需要创建多个实体类 Mapper;一个 BasicMapper 即可使用所有功能 3:正式支持单 Mapper (写一个 Mapper 即可) 为什么推荐 xbatis?: xbatis 是一款超级强大的 ORM 框架 1:可多表 join(不再只能单表了) 2:代码分页,xml 还可以分页(可以不用 pagehelper 了) 3:良好的扩展能力:orm+sql 模板 (让 ORM 框架不再死板,扩展性极强) 4:强大的各种数据库适配,可在一套代码中 实现多个数据库适配;真正的 ORM hibernate 都做不到 6:极简的 api 设计,让开发者 不再迷糊 1.单表 +@Fetch 注解 + fetchFilter 方法 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; private String password; private Integer roleId; private LocalDateTime create_time; @Fetch(source = SysUser.class, property = "roleId", target = SysRole.class, targetProperty = "id") private List sysRoles; } Java 代码解读复制代码 展开代码▼ List list = QueryChain.of(sysUserMapper) .from(SysUser.class) .fetchFilter(SysUserVO::getRoles,where->where.eq(SysRole::getStatus,1)) .returnType(SysUserVO.class) .list(); Java 代码解读复制代码 fetchFilter 方法是对 @Fetch 注解的增强,没有特殊要求一般,可忽略 2. 单表查询 SysUser sysUser = QueryChain.of(sysUserMapper) .eq(SysUser::getId, 1) .eq(SysUser::getUserName,'admin') .get(); Java 代码解读复制代码 3.VO 映射 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; //字段名字不一样时 @ResultEntityField(property = "password") private String pwd; } Java 代码解读复制代码 展开代码▼ SysUserVO sysUserVO = QueryChain.of(sysUserMapper) .eq(SysUser::getId, 1) .eq(SysUser::getUserName,'admin') .returnType(SysUserVO.class) .list(); Java 代码解读复制代码 4. join 查询 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; //字段名字不一样时 @ResultEntityField(property = "password") private String pwd; //映射一个对象 1对1 @NestedResultEntity(target = SysRole.class) prviate SysRole sysRole; //映射多个对象 1对多 @NestedResultEntity(target = SysRole.class) prviate List sysRoles; } Java 代码解读复制代码 展开代码▼ List list = QueryChain.of(sysUserMapper) .from(SysUser.class) .join(SysUser.class, SysRole.class) .returnType(SysUserRoleVO.class) .list(); Java 代码解读复制代码 还有很多很多超级方便有趣的写法,欢迎大家来使用https://xbatis.cn 例如: 1 . 多表 join A 内嵌 B B 内嵌 C 都可以 2 . 不使用 join 使用 @Fetch 注解 + fetchFilter 方法实现 将 A JOIN B 变成 query A + query B 3 . 使用 @Paging 注解 实现你的 xml 自动分页 4 . 使用 SQL 模板,让你 ORM 更简单更容易扩展,再也不怕被框架限制了

优秀的个人博客,低调大师

璀璨之星 🔥 xbatis 1.10.6 正式发版,最好用最简单最方便的 ORM !!!

推荐理由: 强、强、强 ,单表?连表?不想连表?让你直接少写 1/3 甚至 2/3 的持久层代码;API 简单 快捷 优雅 简洁 构建 SQL 非常强!用过的 没用过的都来体验,虽然有 AI 了,但是真正好用的 ORM 的还不能忽略的,除非你以后不维护。 1.10.6 - 2026-07-02 1:新增 COALESCE 函数 2:新增Map结果 强制包含value为null的key 3:新增Map key 下划线转驼峰处理 4:新增DDL 自动化(自动建表、索引、列新增、序列) 1.10.5 - 2026-06-21 1:修复插入数据时,未拼上 @Table 的 schema 的问题 2:增加局部某个表 leftJoin 禁止优化的功能 3:其他优化 4:增加SQL 审计 1.10.3 - 2026-05-27 1:@Fetch fetchFilter 强制调用开关 2:数据库识别支持 p6spy jdbc url 格式 3:其他优化 表名 /schema 支持动态设置(非分表行为) 4:crud 支持自己创建的 lambda getter 方法引用例如:.eq(EntityLambdaUtil.createSetter(SysUser.class, "id"), 1) 5:修复单列 Fetch 数据库为 null 时运行异常的问题 6:增加 nested 方法来替代 orNested 和 andNested 7:增加 where 方法平替 and or 动态方法 8:新增 getValueById (获取单列值) 方法 9:QueryChain 增加 mapGroupWithKey 分组功能 1.10.2 - 2026-04-29 1:实现 @Fetch, 支持生效条件 2:in/notIn 单条时,变成 eq/ne 行为 3:其他优化 1.10.1 - 2026-04-27 1: 优化 @Fetch 功能代码 2:实现 @Fetch 更多合并的功能场景(从 2 层到 1 层转变,减少 VO 创建) 3:@Fetch 注解增加逻辑删除策略(支持忽略逻辑删除) 1.10.0 - 2026-04-18 1:修复主动调用了 fetchFilter/fetchEnable 时,可能出现报错的问题(未使用 fetchFilter/fetchEnable 的不影响) 1.9.9 - 2026-04-13 1:增加 partialUpdate 精准 (局部) 修改方法 2:原生 updateBatch 修改增加 null / 默认值忽略设置方法 3:LambdaUtil 类增加 setter/getter Lambda 生成方法 4:@ResultCalcField 注解支持数据库函数 5:修复 exists/notExists 中子查询嵌套子查询时,别名一致导致无法上下级引用的问题 6:增加join 子查询的简化写法 7:所有 Mp 开头的类 改为 Xbatis 开头 8:优化 selectIgnore 功能,不再要求先 select 9:增加 orderByAsc 方法,减少从 mybatis-plus 迁移到 xbatis 的工作量 10:优化底层代码 11:增加 resultmap 官方动态映射继承 12:所有查询完美兼容 pageHelper 13:对于顶级类的字段增加列为为字段名的 resultMap 映射 14:支持多列 in-notIn 操作 15:@Fetch 支持合并查询(从 2 层到 1 层转变,减少 VO 创建) 1.8.7 更新内容: 1:为了更好的 JAVA+XML 结合,query 和 where 增加 tableAs (实体类,别名) 方法,用于自定义表名别名 2:XbatisConfig 改为 XbatisGlobalConfig 3:增加逻辑删除拦截器 4:updatedelete增加 原生 RETURNING (原生) 功能 5:增加原生 sql 查询方法和update delete RETURNING 功能 6:增加了一个Mapper 方法拦截器 7:增加exists/not exists 简易写法 通用 SQL 扩展: //类型支持 实体类,VO和普通POJO SysUser user = sysUserMapper.select(SysUser.class, "select * from t_sys_user where id =?", 1); //支持增删改,且支持返回数据 String user_name = sysUserMapper.executeAndReturning(String.class, "update t_sys_user set user_name=? where id=1 RETURNING user_name", "xxx"); //ORM写法 删除并返回被删除的数据(数据库原生操作) List list = DeleteChain.of(sysUserMapper) .in(SysUser::getId, 1, 2) .returning(SysUser.class) .returnType(SysUser.class) .executeAndReturningList(); //ORM写法 修改并返回修改后的数据(数据库原生操作)适合金额加减操作返回剩余金额 SysUser sysUser = UpdateChain.of(sysUserMapper) .eq(SysUser::getId, 1) .set(SysUser::getUserName, "abc2") .returning(SysUser.class) .returnType(SysUser.class) .executeAndReturning(); Java 代码解读复制代码 展开代码▼ 分表配置 @Data @SplitTable(SysUserSplitter.class) public class SysUser { @TableId private Integer id; @SplitTableKey private Integer groupId; private String nickname; private String username; } Java 代码解读复制代码 展开代码▼ public class SysUserSplitter implements TableSplitter { @Override public boolean support(Class type) { return type == Integer.class ** type == int.class; } @Override public String split(String sourceTableName, Object splitValue) { Integer groupId = (Integer) splitValue; //分成10个表 return sourceTableName + "_" + groupId % 10; } } Java 代码解读复制代码 展开代码▼ 分表就是这么简单,其他操作和常规无异!!! 1.7.7 更新内容: 1:QueryChain,DeleteChain,InsertChain,UpdateChain 支持 BasicMapper 方法 2:支持通用 BasicMapper,可不需要创建多个实体类 Mapper;一个 BasicMapper 即可使用所有功能 3:正式支持单 Mapper (写一个 Mapper 即可) 为什么推荐 xbatis?: xbatis 是一款超级强大的 ORM 框架 1:可多表 join(不再只能单表了) 2:代码分页,xml 还可以分页(可以不用 pagehelper 了) 3:良好的扩展能力:orm+sql 模板 (让 ORM 框架不再死板,扩展性极强) 4:强大的各种数据库适配,可在一套代码中 实现多个数据库适配;真正的 ORM hibernate 都做不到 6:极简的 api 设计,让开发者 不再迷糊 1.单表 +@Fetch 注解 + fetchFilter 方法 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; private String password; private Integer roleId; private LocalDateTime create_time; @Fetch(source = SysUser.class, property = "roleId", target = SysRole.class, targetProperty = "id") private List sysRoles; } Java 代码解读复制代码 展开代码▼ List list = QueryChain.of(sysUserMapper) .from(SysUser.class) .fetchFilter(SysUserVO::getRoles,where->where.eq(SysRole::getStatus,1)) .returnType(SysUserVO.class) .list(); Java 代码解读复制代码 fetchFilter 方法是对 @Fetch 注解的增强,没有特殊要求一般,可忽略 2. 单表查询 SysUser sysUser = QueryChain.of(sysUserMapper) .eq(SysUser::getId, 1) .eq(SysUser::getUserName,'admin') .get(); Java 代码解读复制代码 3.VO 映射 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; //字段名字不一样时 @ResultEntityField(property = "password") private String pwd; } Java 代码解读复制代码 展开代码▼ SysUserVO sysUserVO = QueryChain.of(sysUserMapper) .eq(SysUser::getId, 1) .eq(SysUser::getUserName,'admin') .returnType(SysUserVO.class) .list(); Java 代码解读复制代码 4. join 查询 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; //字段名字不一样时 @ResultEntityField(property = "password") private String pwd; //映射一个对象 1对1 @NestedResultEntity(target = SysRole.class) prviate SysRole sysRole; //映射多个对象 1对多 @NestedResultEntity(target = SysRole.class) prviate List sysRoles; } Java 代码解读复制代码 展开代码▼ List list = QueryChain.of(sysUserMapper) .from(SysUser.class) .join(SysUser.class, SysRole.class) .returnType(SysUserRoleVO.class) .list(); Java 代码解读复制代码 还有很多很多超级方便有趣的写法,欢迎大家来使用https://xbatis.cn 例如: 1 . 多表 join A 内嵌 B B 内嵌 C 都可以 2 . 不使用 join 使用 @Fetch 注解 + fetchFilter 方法实现 将 A JOIN B 变成 query A + query B 3 . 使用 @Paging 注解 实现你的 xml 自动分页 4 . 使用 SQL 模板,让你 ORM 更简单更容易扩展,再也不怕被框架限制了

优秀的个人博客,低调大师

璀璨之星 🔥 xbatis 1.10.5 正式发版,最好用最简单最方便的 ORM !!!

推荐理由: 强、强、强 ,单表?连表?不想连表?让你直接少写 1/3 甚至 2/3 的持久层代码;API 简单 快捷 优雅 简洁 构建 SQL 非常强!用过的 没用过的都来体验,虽然有 AI 了,但是真正好用的 ORM 的还不能忽略的,除非你以后不维护。 1.10.5 - 2026-06-21 1:修复插入数据时,未拼上@Table的schema的问题 2:增加局部某个表leftJoin禁止优化的功能 3:其他优化 4:增加SQL审计 1.10.3 - 2026-05-27 1:@Fetch fetchFilter 强制调用开关 2:数据库识别支持 p6spy jdbc url 格式 3:其他优化 表名 /schema 支持动态设置(非分表行为) 4:crud 支持自己创建的 lambda getter 方法引用例如:.eq(EntityLambdaUtil.createSetter(SysUser.class, "id"), 1) 5:修复单列 Fetch 数据库为 null 时运行异常的问题 6:增加 nested 方法来替代 orNested 和 andNested 7:增加 where 方法平替 and or 动态方法 8:新增 getValueById (获取单列值) 方法 9:QueryChain 增加 mapGroupWithKey 分组功能 1.10.2 - 2026-04-29 1:实现 @Fetch, 支持生效条件 2:in/notIn 单条时,变成 eq/ne 行为 3:其他优化 1.10.1 - 2026-04-27 1: 优化 @Fetch 功能代码 2:实现 @Fetch 更多合并的功能场景(从 2 层到 1 层转变,减少 VO 创建) 3:@Fetch 注解增加逻辑删除策略(支持忽略逻辑删除) 1.10.0 - 2026-04-18 1:修复主动调用了 fetchFilter/fetchEnable 时,可能出现报错的问题(未使用 fetchFilter/fetchEnable 的不影响) 1.9.9 - 2026-04-13 1:增加 partialUpdate 精准 (局部) 修改方法 2:原生 updateBatch 修改增加 null / 默认值忽略设置方法 3:LambdaUtil 类增加 setter/getter Lambda 生成方法 4:@ResultCalcField 注解支持数据库函数 5:修复 exists/notExists 中子查询嵌套子查询时,别名一致导致无法上下级引用的问题 6:增加join 子查询的简化写法 7:所有 Mp 开头的类 改为 Xbatis 开头 8:优化 selectIgnore 功能,不再要求先 select 9:增加 orderByAsc 方法,减少从 mybatis-plus 迁移到 xbatis 的工作量 10:优化底层代码 11:增加 resultmap 官方动态映射继承 12:所有查询完美兼容 pageHelper 13:对于顶级类的字段增加列为为字段名的 resultMap 映射 14:支持多列 in-notIn 操作 15:@Fetch 支持合并查询(从 2 层到 1 层转变,减少 VO 创建) 1.8.7 更新内容: 1:为了更好的 JAVA+XML 结合,query 和 where 增加 tableAs (实体类,别名) 方法,用于自定义表名别名 2:XbatisConfig 改为 XbatisGlobalConfig 3:增加逻辑删除拦截器 4:updatedelete增加 原生 RETURNING (原生) 功能 5:增加原生 sql 查询方法和update delete RETURNING 功能 6:增加了一个Mapper 方法拦截器 7:增加exists/not exists 简易写法 通用 SQL 扩展: //类型支持 实体类,VO和普通POJO SysUser user = sysUserMapper.select(SysUser.class, "select * from t_sys_user where id =?", 1); //支持增删改,且支持返回数据 String user_name = sysUserMapper.executeAndReturning(String.class, "update t_sys_user set user_name=? where id=1 RETURNING user_name", "xxx"); //ORM写法 删除并返回被删除的数据(数据库原生操作) List list = DeleteChain.of(sysUserMapper) .in(SysUser::getId, 1, 2) .returning(SysUser.class) .returnType(SysUser.class) .executeAndReturningList(); //ORM写法 修改并返回修改后的数据(数据库原生操作)适合金额加减操作返回剩余金额 SysUser sysUser = UpdateChain.of(sysUserMapper) .eq(SysUser::getId, 1) .set(SysUser::getUserName, "abc2") .returning(SysUser.class) .returnType(SysUser.class) .executeAndReturning(); Java 代码解读复制代码 展开代码▼ 分表配置 @Data @SplitTable(SysUserSplitter.class) public class SysUser { @TableId private Integer id; @SplitTableKey private Integer groupId; private String nickname; private String username; } Java 代码解读复制代码 展开代码▼ public class SysUserSplitter implements TableSplitter { @Override public boolean support(Class type) { return type == Integer.class ** type == int.class; } @Override public String split(String sourceTableName, Object splitValue) { Integer groupId = (Integer) splitValue; //分成10个表 return sourceTableName + "_" + groupId % 10; } } Java 代码解读复制代码 展开代码▼ 分表就是这么简单,其他操作和常规无异!!! 1.7.7 更新内容: 1:QueryChain,DeleteChain,InsertChain,UpdateChain 支持 BasicMapper 方法 2:支持通用 BasicMapper,可不需要创建多个实体类 Mapper;一个 BasicMapper 即可使用所有功能 3:正式支持单 Mapper (写一个 Mapper 即可) 为什么推荐 xbatis?: xbatis 是一款超级强大的 ORM 框架 1:可多表 join(不再只能单表了) 2:代码分页,xml 还可以分页(可以不用 pagehelper 了) 3:良好的扩展能力:orm+sql 模板 (让 ORM 框架不再死板,扩展性极强) 4:强大的各种数据库适配,可在一套代码中 实现多个数据库适配;真正的 ORM hibernate 都做不到 6:极简的 api 设计,让开发者 不再迷糊 1.单表 +@Fetch 注解 + fetchFilter 方法 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; private String password; private Integer roleId; private LocalDateTime create_time; @Fetch(source = SysUser.class, property = "roleId", target = SysRole.class, targetProperty = "id") private List sysRoles; } Java 代码解读复制代码 展开代码▼ List list = QueryChain.of(sysUserMapper) .from(SysUser.class) .fetchFilter(SysUserVO::getRoles,where->where.eq(SysRole::getStatus,1)) .returnType(SysUserVO.class) .list(); Java 代码解读复制代码 fetchFilter 方法是对 @Fetch 注解的增强,没有特殊要求一般,可忽略 2. 单表查询 SysUser sysUser = QueryChain.of(sysUserMapper) .eq(SysUser::getId, 1) .eq(SysUser::getUserName,'admin') .get(); Java 代码解读复制代码 3.VO 映射 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; //字段名字不一样时 @ResultEntityField(property = "password") private String pwd; } Java 代码解读复制代码 展开代码▼ SysUserVO sysUserVO = QueryChain.of(sysUserMapper) .eq(SysUser::getId, 1) .eq(SysUser::getUserName,'admin') .returnType(SysUserVO.class) .list(); Java 代码解读复制代码 4. join 查询 @Data @ResultEntity(SysUser.class) public class SysUserVo { private Integer id; private String userName; //字段名字不一样时 @ResultEntityField(property = "password") private String pwd; //映射一个对象 1对1 @NestedResultEntity(target = SysRole.class) prviate SysRole sysRole; //映射多个对象 1对多 @NestedResultEntity(target = SysRole.class) prviate List sysRoles; } Java 代码解读复制代码 展开代码▼ List list = QueryChain.of(sysUserMapper) .from(SysUser.class) .join(SysUser.class, SysRole.class) .returnType(SysUserRoleVO.class) .list(); Java 代码解读复制代码 还有很多很多超级方便有趣的写法,欢迎大家来使用https://xbatis.cn 例如: 1 . 多表 join A 内嵌 B B 内嵌 C 都可以 2 . 不使用 join 使用 @Fetch 注解 + fetchFilter 方法实现 将 A JOIN B 变成 query A + query B 3 . 使用 @Paging 注解 实现你的 xml 自动分页 4 . 使用 SQL 模板,让你 ORM 更简单更容易扩展,再也不怕被框架限制了

优秀的个人博客,低调大师

Linus “吃狗粮”最积极!

Linux 6.10 内核目前处于候选开发阶段,在一个关于DRM 图形驱动程序更新补丁的邮件列表中,Linus Torvalds 称自己是"dogfooding"的忠实信徒。 "dogfooding" 是英语俚语 ——"Eating your own dog food"的略称(直译为“吃你自家的狗粮”),常用于描述公司(尤指软件公司)使用自己生产的产品这一情况。 在软件开发过程中,dogfooding 使开发者能够在现实的场景中测试自家公司的产品,这样就能在产品发布前让项目管理者对产品将被如何使用有更好的认知。 dogfooding 的方式多种多样,如建立构建分支、建立个人构建版本与直接进行个人测试,这些方法都能帮助开发者在将修改集成进每日构建版本前进行可行性测试,因而可以使构建版本更加稳定,并且能避免可能的不一致问题与依赖关系问题,尤其是在许多开发者(或者是开发团队)参与同一个产品的开发的时候。 对 Linus 来说,“吃内核狗粮”无疑有助于他亲自体验用户可能遇到的问题,及时调查 bug 报告,并确保通过的代码按预期工作。此外也有助于发现代码中的意外问题,提升内核的稳定性和质量。 Linus 一直在坚持"dogfooding",即使在忙碌的合并窗口期间仍会构建他自己使用的内核——然后在 AMD 开发机器上运行最新的 Linux 内核代码。当然他不是每次拉取新代码都会重启机器,通常是每天重启。 来自https://lore.kernel.org/lkml/CAHk-=wizH1b8vv67xVSoSHqp5B=dNsqtpP+86RM7G5z14nuRHw@mail.gmail.com/ 要知道在合并窗口期间会引入大量新代码(和 bug),所以老爷子的工作量可想而知有多大。但为了全面测试内核变更情况,Linus 并没有因此而松懈,实乃我辈程序员楷模!

优秀的个人博客,低调大师

最菜的Java导入excel

poi Maven <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.14</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>3.14</version> </dependency> 基础代码 package com.peas.mdp.module.util; import com.peas.mdp.dto.Teacher; import org.apache.poi.ss.usermodel.*; import java.io.InputStream; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; public class ExcelUtil { public static List<?> getBankListByExcel(InputStream in) throws Exception { List<Teacher> list = new ArrayList<>(); //创建Excel工作薄 Workbook work = getWorkbook(in); if (null == work) { throw new Exception("创建Excel工作薄为空!"); } Sheet sheet = null; Row row = null; Cell cell = null; //遍历Excel中所有的sheet for (int i = 0; i < work.getNumberOfSheets(); i++) { sheet = work.getSheetAt(i); if (sheet == null) { continue; } //遍历当前sheet中的所有行 for (int j =1; j <= sheet.getLastRowNum(); j++) { row = sheet.getRow(j); if (row == null ) { continue; } Teacher teacher = new Teacher(); //把每个单元格的值付给对象的对应属性 if (row.getCell(0)!=null){ teacher.setAccount(String.valueOf(getCellValue(row.getCell(0)))); } if (row.getCell(1)!=null){ teacher.setName(String.valueOf(getCellValue(row.getCell(1)))); } if (row.getCell(2)!=null){ teacher.setSex(Integer.valueOf((String) getCellValue(row.getCell(2)))); } if (row.getCell(3)!=null){ teacher.setAge(Integer.valueOf((String) getCellValue(row.getCell(3)))); } if (row.getCell(4)!=null){ teacher.setEducation(String.valueOf(getCellValue(row.getCell(4)))); } if (row.getCell(5)!=null){ teacher.setJobTitle(String.valueOf(getCellValue(row.getCell(5)))); } if (row.getCell(6)!=null){ teacher.setPosition(String.valueOf(getCellValue(row.getCell(6)))); } if (row.getCell(7) != null) { teacher.setRole(String.valueOf(getCellValue(row.getCell(7)))); } if (row.getCell(8) != null) { teacher.setPhone(String.valueOf(getCellValue(row.getCell(8)))); } if (row.getCell(9) != null) { teacher.setEmail(String.valueOf(getCellValue(row.getCell(9)))); } if (row.getCell(10) != null) { teacher.setKeyWords(String.valueOf(getCellValue(row.getCell(10)))); } if (row.getCell(11) != null) { teacher.setIntroduction(String.valueOf(getCellValue(row.getCell(11)))); } if (row.getCell(12) != null) { teacher.setIdCard(String.valueOf(getCellValue(row.getCell(12)))); } if (row.getCell(13) != null) { teacher.setType(Integer.valueOf((String)getCellValue(row.getCell(13)))); } //遍历所有的列(把每一行的内容存放到对象中) list.add(teacher); } } return list; } /** * * @param inStr * @return * @throws Exception */ public static Workbook getWorkbook(InputStream inStr) throws Exception { Workbook wb = null; wb = WorkbookFactory.create(inStr); return wb; } /** * 描述:对表格中数值进行格式化 * * @param cell * @return */ public static Object getCellValue(Cell cell) { Object value = null; DecimalFormat df = new DecimalFormat("0"); //格式化number String字符 SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd"); //日期格式化 DecimalFormat df2 = new DecimalFormat("0"); //格式化数字 switch (cell.getCellType()) { case Cell.CELL_TYPE_STRING: value = cell.getRichStringCellValue().getString(); break; case Cell.CELL_TYPE_NUMERIC: if ("General".equals(cell.getCellStyle().getDataFormatString())) { value = df.format(cell.getNumericCellValue()); } else if ("m/d/yy".equals(cell.getCellStyle().getDataFormatString())) { value = sdf.format(cell.getDateCellValue()); } else { value = df2.format(cell.getNumericCellValue()); } break; case Cell.CELL_TYPE_BOOLEAN: value = cell.getBooleanCellValue(); break; case Cell.CELL_TYPE_BLANK: value = ""; break; default: break; } return value; } } Control @ApiOperation("excel导入") @GET @Path("excelFile") public Map<String, String> readExcel(@QueryParam("path") File path) throws Exception { HashMap<String, String> map = new HashMap<>(); //读取excel中的内容 InputStream inputStream = new FileInputStream(path); List<Teacher> teachers = (List<Teacher>) ExcelUtil.getBankListByExcel(inputStream); for (Teacher teacher : teachers) { teacherService.saveOrUpdate(teacher); } return map; } /** * 读取excel更新数据 * * @param upfile * @param * @param * @throws Exception */ /* @RequestMapping(value = "/readExcel") @Transactional public Map<String, String> readExcel(MultipartFile upfile) throws Exception { HashMap<String, String> map = new HashMap<>(); InputStream in = upfile.getInputStream(); //读取excel中的内容 List<LineDownOrder> lineDownOrders = ExcelUtils.getBankListByExcel(in); String s = orderService.updateByExcel(lineDownOrders); map.put("status", s); return map; } */

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册