首页 文章 精选 留言 我的

精选列表

搜索[进度通知],共10000篇文章
优秀的个人博客,低调大师

关于 smart-doc 项目捐赠给同程旅行的重要通知

尊敬的smart-doc社区用户们: 在这个秋高气爽的国庆佳节前夕,我想向大家宣布一个重要消息。我决定将smart-doc捐赠给同程旅行。自2018年以来,smart-doc已经陪伴我们走过了五个春秋。在这五年的时间里,我们一起见证了这个项目的成长和发展,它逐渐成长为备受欢迎的API文档生成工具,也一起度过了无数个难忘的时光。然而,随着时间的推移和社区需求的增加,我的个人精力已经无法满足smart-doc未来更好的发展和国际化推广。因此,我决定将其交给同程旅行,希望同程旅行能够为smart-doc注入新的活力、资源和发展机遇。同程旅行作为一家领先的在线旅游服务提供商,具有丰富的资源和技术实力,他们将能够为smart-doc带来更多的机遇和发展。 在捐赠之后,我将继续参与smart-doc的日常维护工作,并以PMC(Project Management Committee)成员的身份参与项目的决策和推进。我会尽我所能为smart-doc的发展贡献自己的力量。同时,我也希望大家能够继续关注和支持这个项目,让我们携手共进,共同见证smart-doc的成长和发展。 同时,我也要感谢所有给smart-doc点过star的各位用户以及同仁,你们的star,胜过我所读过的诗!此外,我还要感激过去smart-doc的社区贡献者们,你们无私的奉献让smart-doc在过去的时光里更得越来越好。未来,我们也非常欢迎更多的开源小伙伴一起来参与smart-doc的社区共建,为全球开发者用户打造一款好用的API文档生成工具。未来社区也会为优秀的贡献者准备一些小礼品,以示感激和祝贺。 最后,我衷心祝愿每一个人都能够走出半生,归来仍是少年,在漫长的人生道路上保持初心和热情。也祝愿大家在这个国庆节期间有一个美好的旅程,享受快乐和幸福。同程旅行开源社区新的smart-doc版本将在国庆后推出,敬请期待! 再次感谢大家一直以来对smart-doc的支持和关注。我们相信,在同程旅行和社区用户的共同努力下,smart-doc的未来一定会更加美好! 项目地址 GitHub地址:https://github.com/TongchengOpenSource/smart-doc Gitee地址:https://gitee.com/TongchengOpenSource/smart-doc 敬礼! smart-doc作者SunYu(上官胡闹)

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

答了Mybatis这个问题后,面试官叫我回去等通知……

背景 前段时间在我的技术群里,大家讨论起了为什么UserMapper.java是个接口,没有具体实现类,而我们可以直接调用其方法? 关于这个问题,我之前面试过一些人,很多人是这么回答的: 1.我领导叫我们使用Mybatis,大家都这么用就这么用了(没想过,反正就这么用)。 2.虽然我不知道具体是怎么实现的,但我觉得肯定是……(此处略去若干的漫天猜想),但是也不对啊,难道是……(再次略去若干似懂非懂)。 3.使用动态代理实现的(然后就没有下文了)。 对于上面的三种回答,前面两种我们就没必要往下聊了。 但是第三种回答,就有必要往下问:那你说说动态代理有哪些实现方式?Mybatis使用的是哪一种? 如果这个问题你还能回答上来,那么还会继续问:UserMapper.java中大方法能不能重载? 如果你能回答上面的问题,本文就没必要往下看了,已经不适合你了。 问题分析 先来看一张图,这图里的代码就是我们前面写的demo: 为什么一个接口就能和一个xml文件给绑定的呢?这就是今天我们要聊的话题。 可能很多小伙伴不熟悉ibatis,2010年之前,还没有Mybatis,之后ibatis便成了现在的Mybatis,如果有兴趣的朋友,可以看到Mybatis中的包目录。 这个包目录中就还是ibatis,并且ibatis的作者现在就在腾讯上班,开发英雄联盟LOL。 如果有腾讯的小伙伴可以打听打听哈,大佬就在身边。言归正传。 Mapper层在Mybatis中现在是接口形式就搞定了,而在ibatis时代还是必须要有实现类的,我记得2012年的时候,使用的就是ibatis,Dao(Mapper)必须要有实现类。 下面我们就来看看Mybatis中是怎么做的。 使用案例 继续使用我们上一节中的代码。 controller service实现类中 打一个断点,然后使用debug模式启动项目。并访问: http://localhost:9002/test userMapper=org.apache.ibatis.binding.MapperProxy@6da21078 发现Mybatis给UserMapper.java生成了一个代理对象,并且从名字上可以看出是JDK动态代理。 关于动态代理请,这里我推荐我之前写过的一篇文章: https://gitbook.cn/m/mazi/activity/5d44e35e4fbf44126135c292?sut=c93c00a03b4f11eba07ad99b4dfbdab0&utm_source=chatweixinshare 其实,又差不多回到了ibatis时代,只是Mybatis中是通过动态代理的方式生成的代理类不是我们开发的,而是通过JDK动态代理生成的代理类。 下面我们也使用JDK动态代理来模拟一把。 publicclassMapperProxyimplementsInvocationHandler{@SuppressWarnings("unchecked")public<T>TnewInstance(Class<T>clz){return(T)Proxy.newProxyInstance(clz.getClassLoader(),newClass[]{clz},this);}@OverridepublicObjectinvoke(Objectproxy,Methodmethod,Object[]args)throwsThrowable{if(Object.class.equals(method.getDeclaringClass())){try{//诸如hashCode()、toString()、equals()等方法,将target指向当前对象thisreturnmethod.invoke(this,args);}catch(Throwablet){}}//投鞭断流returnnewUser((Integer)args[0],"田维常",22);}} 再写一个测试类 importcom.tian.mybatis.entity.User;importcom.tian.mybatis.mapper.UserMapper;publicclassTestProxy{publicstaticvoidmain(String[]args){MapperProxyproxy=newMapperProxy();UserMappermapper=proxy.newInstance(UserMapper.class);Useruser=mapper.selectById(999);System.out.println(user);System.out.println(mapper.toString());}} 输出 User{id=999,userName='田维常',age=22,gender=null}com.tian.mybatis.proxy.MapperProxy@39a054a5 这便是Mybatis自动映射器Mapper的底层实现原理。 但是在Mybatis中,远远不是这么简单的,但是本质就是这样的。 下面我们就来大致分析一下Mybatis中的这个流程。 接口Mapper内的方法能重载吗? 类似下面: publicUsergetUserById(Integerid);publicUsergetUserById(Integerid,Stringname); 答案:不能 因为Mybatis中是使用package+Mapper+method全限名作为key,去xml内寻找唯一sql来执行的。 类似:key=com.tian.mybatis.UserMapper.getUserById,那么,重载方法时将导致矛盾。 对于Mapper接口,Mybatis禁止方法重载(overLoad) 。 在MapperMethod类的静态内部类中SqlCommand中有个resolveMappedStatement方法。 在Configuration中有个属性,就是项目启动的时候,会把Mapper.xml中信息解析到这个属性里,以我们指定的namespace+method作为key放到Map里面,后面我们调用Mapper接口动态类的某个方法时候再去map获取。 protectedfinalMap<String,MappedStatement>mappedStatements 就是使用类的全路径名.方法作为key存放到Map中的。 总结 常用动态代理方式:JDK动态代理和CGlib动态代理。 Mybatis是采用JDK动态代理+反射+xml来解决接口绑定的,为我们创建可以调用的代理对象。 我们的Mapper中的方法是绝对不能重载的。

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

“2015中国移动医疗产业论坛”召开通知

【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 基于移动互联网技术的当下,很多行业已经在悄然发生改变。马云说:30年后不用医生,您怎么看?身在医疗卫生行业中的您是否感受到了移动互联网的冲击? 移动互联网是否肩负起了颠覆现有医疗模式的重任?移动互联网时代的医疗卫生将走出怎样的商业模式?新技术的研发将为移动医疗带来哪些改变?APP投融资火热的背后又出现了哪些问题?国家又将有怎样的导向与扶持?这个行业的未来走势如何?国内外的移动医疗产业有着怎样的异同? 在春暖花开的四月,由中关村移动互联网产业联盟移动医疗专委会(ZMH)与中国数字医疗网(HC3i)共同主办的“2015中国移动医疗产业论坛”(IFmH2015)将为您带来全新视角。本次论坛以“聚焦 分享 零距离”为主题,为您聚焦移动医疗产业发展,分享移动医疗产业***讯息和产品及解决方案,零距离接触行业专家提供最前沿的行业交流平台。 活动报名现已启动,点击下图进入报名页面! 2月1日前购票7折优惠! 2015中国移动医疗产业论坛 本次论坛为期1天(上午主论坛、下午3个分论坛),出席本次论坛的人员涵盖移动医疗产业相关的政府机关、生产企业、医学院校、科研院所、金融投资、医疗机构、通信运营商等行业内人士。 论坛内容涵盖技术、应用、投融资等,包括: - 移动医疗/健康***技术开发与利用; - 医院移动医疗/健康***应用案例; - 移动医疗/健康应用热点与难点解析; - 行业***政策研究与解读; - 移动医疗服务与慢病管理; - 远程医疗与健康保险; - APP商业模式演变; - 行业成功投融资案例; - 移动医疗健康产业数据利用; - 移动医疗与物联网; - 移动医疗健康管理趋势; - 移动医疗产业***报告; - …… 更多精彩内容将在会议当天呈现! 在此,我们真挚地邀请您踊跃参会,期待在北京与您会面! 联系人 购票咨询:高女士 电话:68476606-8153 email:gaochao@51cto.com 参展咨询:褚女士 电话:68476606-8046 email:chutt@51cto.com 赞助咨询:杨女士 电话:68476606-8083 email:yangww@51cto.com 市场合作:李女士 电话:68476606-8030 email:liyuan@51cto.com 【责任编辑: chenqingxiang TEL:(010)68476606】

资源下载

更多资源
Mario

Mario

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

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

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部分的功能。

用户登录
用户注册