file-type

揭秘Ibatis与MybatisPlus的渊源:从祖师爷到设计思想

版权申诉

TXT文件

7KB | 更新于2024-08-04 | 112 浏览量 | 0 下载量 举报 收藏
download 限时特惠:#29.90
本文将深入探讨Ibatis的历史渊源以及它与Mybatis的关系,带你了解ORM框架设计的思想和发展趋势。Ibatis最初由Apache基金会开发,作为一种Java语言编写的轻量级的对象关系映射(ORM)框架,它在早期的数据库操作中扮演了关键角色。相比于传统的JDBC编程,Ibatis简化了数据访问过程,减少了代码量,提高了开发效率。 在Ibatis的设计中,SQL语句被封装在XML文件中,开发者可以通过配置文件指定执行的SQL语句和参数。这使得代码更加模块化,易于维护。然而,Ibatis的灵活性也意味着开发者需要手动管理SQL的事务处理,通过try-catch块来处理可能出现的异常。 Ibatis的一个重要特性是SQL语句的动态性,允许在运行时根据传入的数据动态构建SQL,增强了其适应复杂查询的能力。此外,它提供了丰富的API,如`SqlSession`用于执行数据库操作,`SqlMapClientBuilder`用于创建SqlMapClient实例,以及`SqlSessionManager`用于管理多个`SqlSession`实例。 与Ibatis相比,MybatisPlus作为Ibatis的增强版本,增加了更多的便捷功能和自动化的特性,如自动填充、懒加载等,进一步降低了开发门槛。然而,Ibatis的基础设计理念和核心原理对于理解ORM框架的本质以及自定义框架具有重要意义。 本文还将讨论Ibatis与Hibernate的区别,如Ibatis更注重轻量级和SQL的灵活性,而Hibernate则提供全面的ORM解决方案和更强大的对象关系映射能力。此外,还会介绍Ibatis的XML配置文件中的不同元素,如`insert`、`select`、`update`和`delete`标签,它们构成了Ibatis的核心操作指令。 最后,文章将提到Ibatis支持的多种数据库连接方式,包括直接使用JDBC连接,以及通过SqlMapClient实现更高级别的抽象。同时,还会探讨关于SqlMapClient的创建和管理,以及XML配置文件如何定义和使用数据源的资源。 阅读这篇文章,你将深入了解Ibatis的诞生背景、核心概念、与Mybatis的差异,以及它对现代ORM框架设计的影响,从而为自己的技术栈增添深厚的理解,并可能启发你去定制自己的ORM框架。

相关推荐

filetype

java.lang.NoSuchMethodError: org.apache.ibatis.executor.resultset.ResultSetWrapper.getMappedColumnNames(Lorg/apache/ibatis/mapping/ResultMap;Ljava/lang/String;)Ljava/util/Set; at com.mybatisflex.core.mybatis.FlexDefaultResultSetHandler.applyPropertyMappings(FlexDefaultResultSetHandler.java:482) at com.mybatisflex.core.mybatis.FlexDefaultResultSetHandler.getRowValue(FlexDefaultResultSetHandler.java:417) at com.mybatisflex.core.mybatis.FlexDefaultResultSetHandler.handleRowValuesForSimpleResultMap(FlexDefaultResultSetHandler.java:365) at com.mybatisflex.core.mybatis.FlexDefaultResultSetHandler.handleRowValues(FlexDefaultResultSetHandler.java:335) at com.mybatisflex.core.mybatis.FlexDefaultResultSetHandler.handleResultSet(FlexDefaultResultSetHandler.java:306) at com.mybatisflex.core.mybatis.FlexDefaultResultSetHandler.handleResultSets(FlexDefaultResultSetHandler.java:191) at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:65) at com.mybatisflex.core.mybatis.FlexStatementHandler.query(FlexStatementHandler.java:101) at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63) at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325) at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:89) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43

filetype

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.hmdp.mapper.ShopTypeMapper.selectList at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:229) ~[mybatis-3.5.14.jar:3.5.14] at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:53) ~[mybatis-3.5.14.jar:3.5.14] at org.apache.ibatis.binding.MapperProxy.lambda$cachedInvoker$0(MapperProxy.java:96) ~[mybatis-3.5.14.jar:3.5.14] at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) ~[na:na] at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:36) ~[mybatis-3.5.14.jar:3.5.14] at org.apache.ibatis.binding.MapperProxy.cachedInvoker(MapperProxy.java:94) ~[mybatis-3.5.14.jar:3.5.14] at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86) ~[mybatis-3.5.14.jar:3.5.14] at jdk.proxy2/jdk.proxy2.$Proxy77.selectList(Unknown Source) ~[na:na] at com.baomidou.mybatisplus.extension.conditions.query.ChainQuery.list(ChainQuery.java:39) ~[mybatis-plus-extension-3.4.3.jar:3.4.3] at com.hmdp.controller.ShopTypeController.queryTypeList(ShopTypeController.java:32) ~[classes/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:257) ~[spring-web-6.2.3.jar:6.2.3] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:190) ~[spring-web-6.2.3.jar:6.2.3] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmv