`
denger
  • 浏览: 360904 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MyBatis+Spring基于接口编程的原理分析

    博客分类:
  • Java
阅读更多
move to: http://www.iteye.com/topic/1060588
  • 大小: 12.6 KB
分享到:
评论
17 楼 zhys513 2013-01-16  
  确实是最近看的分析mybatis比较精彩的一篇文章。
16 楼 guazi 2012-12-21  
分析的不错,今天才知道mybatis有这个用法。
15 楼 什么向往 2012-09-21  
最近也在看源码,分析的很透彻,学习了
14 楼 denger 2012-08-24  
kiis 写道
88548886 写道
博客,分析的很透彻,我一直不明白SqlSession.getMapper()的mapper对象是怎么来的,因为并没有任何一个类实现了这个接口,但是JDK的Proxy代理的目标类也需要是一个具体类吧,否则怎么能产生代理对象呢?我觉得问题可能出在定义在Interface方法上的那些注解后面的解释器,例如你文中提到的
@Select("select * from tab_uc_account where id=#{userId}")  
User getUser(@Param("userId") Long userId);  

事实上经过你透彻的分析之后,我还是没有明白它实现的原理,恕我愚钝,实在理解不了这些框架复杂的设计模式,希望博主有空的时候能教教我怎么读源码,在下拜谢了!

和注解应该没关系,这里是动态生成的实现类,并没有真的去实现,只是为了代理去动态生成了实现类

Right!
13 楼 kiis 2012-08-24  
88548886 写道
博客,分析的很透彻,我一直不明白SqlSession.getMapper()的mapper对象是怎么来的,因为并没有任何一个类实现了这个接口,但是JDK的Proxy代理的目标类也需要是一个具体类吧,否则怎么能产生代理对象呢?我觉得问题可能出在定义在Interface方法上的那些注解后面的解释器,例如你文中提到的
@Select("select * from tab_uc_account where id=#{userId}")  
User getUser(@Param("userId") Long userId);  

事实上经过你透彻的分析之后,我还是没有明白它实现的原理,恕我愚钝,实在理解不了这些框架复杂的设计模式,希望博主有空的时候能教教我怎么读源码,在下拜谢了!

和注解应该没关系,这里是动态生成的实现类,并没有真的去实现,只是为了代理去动态生成了实现类
12 楼 88548886 2012-06-29  
有谁能告诉我注解的解释器如何工作,虚心求教,有知道的加我QQ88548886,谢谢了!
11 楼 88548886 2012-06-29  
不甘心又去看了源代码
@SuppressWarnings("unchecked")
  public static <T> T newMapperProxy(Class<T> mapperInterface, SqlSession sqlSession) {
    ClassLoader classLoader = mapperInterface.getClassLoader();
    Class<?>[] interfaces = new Class[]{mapperInterface};
    MapperProxy proxy = new MapperProxy(sqlSession);    return (T) Proxy.newProxyInstance(classLoader, interfaces, proxy);
  }

发现红色字体的位置,把sqlSession封装成一个MapperProxy,这个类实现了InvocationHandler, Serializable接口,还是不找到,接口上定义的注解的解释器是怎么工作的。
10 楼 88548886 2012-06-29  
博客,分析的很透彻,我一直不明白SqlSession.getMapper()的mapper对象是怎么来的,因为并没有任何一个类实现了这个接口,但是JDK的Proxy代理的目标类也需要是一个具体类吧,否则怎么能产生代理对象呢?我觉得问题可能出在定义在Interface方法上的那些注解后面的解释器,例如你文中提到的
@Select("select * from tab_uc_account where id=#{userId}")  
User getUser(@Param("userId") Long userId);  

事实上经过你透彻的分析之后,我还是没有明白它实现的原理,恕我愚钝,实在理解不了这些框架复杂的设计模式,希望博主有空的时候能教教我怎么读源码,在下拜谢了!
9 楼 mojunbin 2012-05-24  
对于mybatis网络上的文章(中文).我感觉博主的文章质量比较好哈..
8 楼 denger 2011-10-22  
看看mybatis 上的 google code 代码,里面有例子呀。
7 楼 lzxz1234 2011-10-22  
哥们源码还有没,传我一份吧,找你说的整的还是有问题跑步起来
6 楼 stkstm 2011-10-20  
怎么我按你的来配置 测试 老报java.lang.NullPointerException 就是我来调用mapper方法的时候
5 楼 obullxl 2011-05-31  
分析很透彻明白,赞!!!
4 楼 yzhw 2011-05-31  
兄弟我现在用seam,一直想用一下spring3,收了,呵呵
3 楼 crskyp 2011-05-31  
学习了。。。。
2 楼 absolute 2011-05-31  
我们最近也在用ibatis,多谢楼主分享
1 楼 liberD 2011-05-31  
非常好!楼主分析的很透彻!有机会交流交流!O(∩_∩)O哈哈~

相关推荐

    金属腐蚀仿真:基于浓度迁移与损伤方程的Python实现及其应用

    内容概要:本文将金属腐蚀现象比作游戏角色受到持续伤害(debuff),并采用浓度迁移和损伤方程来建模这一过程。文中首先介绍了浓度迁移的概念,将其比喻为游戏中使角色持续掉血的毒雾效果,并展示了如何利用Numpy矩阵存储浓度场以及通过卷积操作实现浓度扩散。接着引入了损伤方程,用于评估材料随时间累积的损伤程度,同时考虑到材料自身的抗性特性。作者还提供了完整的Python代码示例,演示了如何在一个二维网格环境中模拟24小时内金属表面发生的腐蚀变化,最终得到类似珊瑚状分形结构的腐蚀形态。此外,文章提到可以通过调整模型参数如腐蚀速率、材料抗性等,使得模拟更加贴近实际情况。 适合人群:对材料科学、物理化学感兴趣的科研工作者和技术爱好者,尤其是那些希望通过编程手段深入理解金属腐蚀机制的人群。 使用场景及目标:适用于希望借助数值模拟方法研究金属腐蚀行为的研究人员;可用于教学目的,帮助学生更好地掌握相关理论知识;也可作为工程项目前期评估工具,预测不同条件下金属构件可能遭受的腐蚀损害。 阅读建议:由于文中涉及较多数学公式和编程细节,建议读者具备一定的Python编程基础以及对线性代数有一定了解。对于想要进一步探索该领域的学者来说,可以尝试修改现有代码中的参数设置或者扩展模型维度,从而获得更丰富的研究成果。

    斐讯丽江大数据产业园项目土石方平场工程开挖施工方案改.doc

    斐讯丽江大数据产业园项目土石方平场工程开挖施工方案改.doc

    无线通信发展历程.doc

    无线通信发展历程.doc

    教务管理系统软件项目计划任务书.doc

    教务管理系统软件项目计划任务书.doc

    数据库系统概论培训课件.pptx

    数据库系统概论培训课件.pptx

    信捷XC PLC与西门子V20变频器通讯程序:原创可直接用于生产的程序(带注释、触摸屏程序及接线设置说明,采用轮询方式,稳定可靠) · PLC

    内容概要:本文详细介绍了信捷XC3 PLC与三台西门子V20变频器之间的通讯程序,涵盖硬件连接、参数设置、PLC程序核心代码以及触摸屏程序。文中提供了详细的接线方法、参数配置步骤、通讯地址说明,并分享了实际操作中的经验和常见问题解决方案。程序采用轮询方式,确保通讯稳定可靠,适用于工业自动化生产线。 适合人群:从事工业自动化领域的工程师和技术人员,特别是对PLC和变频器通讯感兴趣的读者。 使用场景及目标:①帮助工程师快速搭建稳定的PLC与变频器通讯系统;②提供详细的参数设置指导,避免常见的配置错误;③分享实际项目经验,提高系统的稳定性和可靠性。 其他说明:本文不仅提供了理论知识,还包含了大量实战经验和技巧,如终端电阻的正确使用、频率设定的注意事项等,有助于读者更好地理解和应用相关技术。

    新版计算机试题库.doc

    新版计算机试题库.doc

    基于截断核范数张量鲁棒主成分分析.zip

    基于截断核范数张量鲁棒主成分分析.zip

    基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)

    基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目),个人经导师指导并认可通过的高分设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做大作业、毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(

    C#标签打印控制系统:支持条形码二维码的高效二次开发工具

    内容概要:本文介绍了一款基于C#的标签打印控制系统,旨在为企业提供灵活、高效的标签打印解决方案。系统不仅支持标签的编辑,还能够自动生成条形码和二维码,并允许用户自定义其位置和样式。此外,系统集成了自动打印功能,确保高质量的标签输出。该系统的模块化设计使其易于二次开发和扩展,适用于多个行业的应用场景,如物流、零售和生产线管理。文中详细介绍了系统的架构、核心功能以及实际应用案例,展示了其实用性和灵活性。 适合人群:对C#有一定了解的技术人员,尤其是需要开发或改进标签打印系统的开发人员。 使用场景及目标:① 需要在现有系统中集成标签打印功能的企业;② 希望定制化标签打印解决方案的中小企业;③ 对条形码和二维码有特殊需求的应用场景。 阅读建议:本文提供了详细的系统架构和技术实现细节,建议读者结合自身需求,重点关注二次开发和扩展部分,以便更好地利用该系统解决实际问题。

    小区物业管理系统及10大UML模型图设计

    小区物业管理系统是一款基于.NET平台开发的软件应用,用于全面管理住宅小区的日常运营。它通过多种功能提升物业管理效率、优化服务质量,并促进业主与物业之间的沟通。在设计过程中,该系统采用了UML(统一建模语言)来确保其结构化和可维护性。UML是一种标准化的建模工具,通过图形化方式描述系统的结构与行为,帮助开发者理解和实现复杂的软件项目。 本项目涵盖了UML的十大模型图,包括用例图、类图、对象图、序列图、协作图、状态图、活动图、组件图、部署图和包图。这些模型图从不同角度描绘系统,例如用例图展示参与者(如业主、物业人员)与系统功能的交互;类图定义系统中的类、接口及其关系;对象图是类图的实例;序列图和协作图描述对象间的动态交互;状态图和活动图关注行为变化;组件图和部署图关注物理结构;包图则用于组织模块结构。 压缩包中的“杨平.doc”可能是设计者或项目负责人杨平的工作文档,包含项目需求、设计思路等重要信息。“任务书.doc”应明确项目的具体任务要求,如功能需求和性能指标。“小区物业管理系统.mdl”是UML模型文件,记录了系统的详细设计。“小区物业”可能是其他相关文件,如源代码或数据库脚本。整个项目提供了从需求分析到系统实现的完整流程,对于学习.NET开发和理解UML建模技术具有重要参考价值。开发者通过研究这些模型图,能够更好地构建类似的物业管理系统,提升软件工程实践能力。

    基于TMS320F28069的伺服驱动器设计方案与代码解析

    内容概要:本文详细介绍了基于TMS320F28069的伺服驱动器设计方案及其实际应用。首先,文章展示了完整的硬件设计,包括控制板、驱动板、电源板和滤波板的具体构造和功能特点。其次,深入探讨了控制源代码的关键部分,如PWM配置、磁场定向控制(FOC)算法以及ADC校准等。文中还特别提到了一些优化技巧,如降低开关损耗、减少寄生电感和提高电磁兼容性的具体措施。最后,强调了该方案的实际量产经验和调试过程中遇到的问题及解决方案。 适合人群:具有一定嵌入式系统和电机控制基础的研发人员和技术爱好者。 使用场景及目标:适用于希望深入了解TMS320F28069在伺服驱动器中的应用,掌握其硬件设计和软件编程技巧的人群。目标是帮助读者理解并能够独立开发类似的伺服控制系统。 其他说明:由于代码注释较少,建议初学者先从官方例程入手,逐步过渡到复杂项目的学习。同时,为了更好地理解和调试,推荐配备必要的测试设备如红外热像仪和逻辑分析仪。

    麦格米特电子凸轮追剪曲线生成算法程序

    内容概要:本文详细介绍了电子凸轮追剪曲线生成算法的原理、应用以及在麦格米特品牌下的实现方法。电子凸轮追剪曲线生成算法主要用于控制机械设备的运动轨迹,在自动化生产线中尤其重要。文中解释了该算法的数学基础和编程逻辑,展示了如何通过确定追剪曲线的形状和运动轨迹来生成电子凸轮的运动指令。此外,还提供了麦格米特品牌的PLC编程环境和工具的具体实现步骤,并附有简化的伪代码示例。 适合人群:从事自动化设备研发的技术人员、机械工程师、PLC程序员。 使用场景及目标:适用于需要精确控制机械设备运动轨迹的场合,如剪切、冲压等工艺。目标是帮助技术人员理解和实现电子凸轮追剪曲线生成算法,从而提升生产效率和产品质量。 其他说明:随着自动化技术的发展,该算法有望进一步优化并应用于更多的工业场景。

    MATLAB遗传算法GA求解函数极值问题:实数编码、非均匀变异与轮盘选择策略 遗传算法

    内容概要:本文详细介绍了如何在MATLAB环境中使用遗传算法(GA)求解函数极值问题。文中采用了实数编码方式、非均匀变异算子和轮盘赌选择法,提供了完整的MATLAB代码及详细注释,帮助初学者快速理解和应用遗传算法。首先解释了遗传算法的基础概念,如实数编码、非均匀变异和轮盘赌选择法的作用和意义。接着展示了具体的MATLAB代码实现步骤,包括函数定义、参数设置、种群初始化、适应度计算、选择、交叉和变异操作,最后输出最优解。 适合人群:对遗传算法感兴趣的初学者,尤其是有一定MATLAB基础的学生和研究人员。 使用场景及目标:适用于需要解决一元或多维函数极值问题的研究和工程应用。通过本教程的学习,读者可以掌握遗传算法的基本原理和实现方法,能够独立编写简单的遗传算法程序。 其他说明:本文不仅提供理论讲解,还附带完整代码和详细注释,便于读者理解和实践。建议读者跟随代码逐步运行,加深对遗传算法的理解。

    MATLAB Simulink在车辆运动学仿真中的应用:实时位置与车身姿态分析

    内容概要:本文详细介绍了MATLAB Simulink在车辆运动学仿真中的应用,重点探讨了实时位置和车身姿态的仿真过程。首先,文章简述了Simulink作为强大仿真工具的特点及其在车辆运动学建模中的优势。接着,分别从模型搭建、仿真参数设置和结果展示三个方面详细讲解了实时位置仿真的具体步骤。对于车身姿态仿真,则着重于模型构建、边界条件设置及仿真结果解读,展示了车辆在不同速度和转向角下的姿态变化情况。最后,文章指出通过Simulink进行的仿真分析能够为车辆控制、安全驾驶等领域提供技术支持,并有助于提升车辆行驶的安全性和稳定性。 适合人群:对车辆工程、自动化控制感兴趣的科研人员和技术开发者。 使用场景及目标:适用于希望深入了解车辆运动学仿真原理的研究者,以及希望通过仿真手段优化车辆性能的设计工程师。 其他说明:文中不仅提供了理论性的阐述,还结合了具体的实例操作指导,使读者能更好地掌握相关技能并应用于实际项目中。

    Python实现的UDS通信脚本 - Python

    内容概要:本文介绍了Python实现的UDS通信脚本,该脚本主要针对新能源电动汽车行业,支持Vector CAN和PCAN设备。它不仅能满足ISO15765、ISO14229等上位机代码编写需求,还能用于NXP560xB系列芯片和ARM TLE98x系列底层软件代码编写。此外,脚本还支持标定协议CCP代码编写及ASAP2 A2L文件合成工具的上位机代码编写。脚本具有良好的二次开发扩展能力,适用于多种应用场景。 适合人群:新能源电动汽车行业的资深工程师,尤其是那些从事UDS通信协议、CAN设备开发及相关底层软件代码编写的工程师。 使用场景及目标:① 实现UDS通信协议,支持多种CAN设备;② 编写ISO15765、ISO14229的上位机代码;③ 开发NXP560xB系列芯片和ARM TLE98x系列底层软件;④ 进行标定协议CCP代码编写及ASAP2 A2L文件合成工具的上位机代码编写;⑤ 提供二次开发扩展能力,满足不同应用场景的需求。 其他说明:文中还分享了工程师们在实际工作中积累的经验和技巧,强调了熟悉相关标准和技术规范、熟练掌握编程语言和工具、善于进行二次开发扩展的重要性。

    【计算机科学】计算机系统基础与核心技术知识点汇总:涵盖数据结构算法、网络、数据库、软件工程等领域备考指南

    内容概要:本文档系统地介绍了计算机科学多个核心领域的基础知识,涵盖计算机系统基础、数据结构与算法、计算机网络、数据库系统、软件工程、系统架构设计、项目管理、信息安全以及新技术趋势。具体包括计算机组成原理如冯·诺依曼体系结构、操作系统核心机制如进程管理和内存管理;数据结构如线性结构、树与图,经典算法如排序算法和动态规划;计算机网络如OSI与TCP/IP模型、关键协议详解;数据库系统如关系数据库设计和NoSQL;软件工程如开发模型对比、UML建模;系统架构设计如架构模式和性能优化;项目管理如十大知识领域和配置管理;信息安全如密码学基础和攻击与防御;新技术趋势如云计算和大数据与AI。最后还提供了备考策略,包括时间规划和答题技巧。; 适合人群:计算机相关专业学生、初入职场的研发人员或准备相关资格认证考试的考生。; 使用场景及目标:①作为计算机专业课程的学习参考资料;②为备考计算机相关职业资格认证提供系统化的复习指南;③帮助职场新人构建完整的计算机知识体系。; 其他说明:文档内容全面且深入浅出,既适合零散知识点的查漏补缺,也适用于系统的复习备考。建议读者根据自身情况制定合理的阅读计划,重点关注自己薄弱环节的知识点,并结合实际案例进行理解和记忆。

    工业自动化领域信捷PLC上位机Modbus TCP通信C#源代码实例教程 高效版

    内容概要:本文详细介绍了如何利用C#编写信捷PLC上位机程序,实现与PLC的Modbus TCP通信。文中首先简述了工业自动化背景下PLC与上位机通信的重要性,接着逐步指导读者完成开发环境搭建、Modbus TCP/IP协议栈安装以及关键的C#源代码编写步骤。提供的代码示例展示了从建立TCP连接、初始化Modbus主站对象到最后的数据交互(如读取线圈状态),并且强调了错误处理机制和资源管理的最佳实践。最后提醒使用者依据自身情况调整相关参数以适应不同应用场景的需求。 适合人群:对工业自动化感兴趣的技术爱好者、从事自动化控制系统开发的工程师或者正在学习PLC编程的学生。 使用场景及目标:帮助读者掌握用C#实现信捷PLC上位机的基本流程和技术要点,能够独立构建简单但完整的Modbus TCP通信系统,为进一步深入研究打下坚实的基础。 其他说明:本教程不仅提供了理论知识讲解,还附带了实用的操作指南和完整代码片段,便于快速理解和动手实践。同时鼓励读者在此基础上探索更多高级特性和复杂业务逻辑的实现。

    数值分析之幂法及反幂法C语言程序实例.doc

    数值分析之幂法及反幂法C语言程序实例.doc

    西门子PLC动态密码程序解析:适用于1200与1500PLC的SCL编写催款程序及动态密保

    内容概要:本文详细介绍了西门子PLC动态密码程序的设计与实现,特别针对1200PLC和1500PLC型号。该程序主要用于催款业务场景,采用了SCL(结构化控制语言)进行编写,提供了动态密保功能,增强了系统安全性和用户账户的保密性。文章从程序的编写思路、操作步骤到实际应用场景进行了全面解析,强调了其在提升工作效率、减少人为错误以及保障企业信息安全方面的优势。文中还提到,该程序具有高度的通用性和灵活性,适用于不同的业务需求,并配有详细的视频讲解,帮助用户更好地理解和操作。 适合人群:从事工业自动化控制领域的工程师和技术人员,尤其是熟悉或希望深入了解西门子PLC编程的人士。 使用场景及目标:①需要在工业控制系统中实施催款程序的企业;②希望通过增强动态密保功能提升系统安全性的企业;③希望掌握SCL编程技巧并应用于实际项目中的技术人员。 其他说明:该程序不仅提升了系统的安全性和可靠性,还在效率和准确性方面表现出色,为企业带来了更多商业机会和发展空间。

Global site tag (gtag.js) - Google Analytics