个人认为从技术上来讲mybatis 没什么难的,但或许可以从里面学习一些东西……;最差简历上也可以写:熟悉mybatis , 阅读过去其源代码。
mybatis历史
ibatis本是apache的一个开源项目,2010年这个项目由apache software foundation 迁移到了google code,并且改名为mybatis。
mybatis官方网址
官方首页:http://www.mybatis.org/
因为是第一用,所以运行了的一个官方例子,例子见附件。对了,版本是mybatis-3.1.0。
用到的表如下:
CREATE TABLE `Blog` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(12) DEFAULT NULL,
`remark` varchar(24) DEFAULT NULL,
`createtime` datetime DEFAULT NULL,
`updatetime` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8
insert into `Blog` (`id`, `name`, `remark`, `createtime`, `updatetime`) values('1','博客1','博客1',NULL,NULL);
insert into `Blog` (`id`, `name`, `remark`, `createtime`, `updatetime`) values('2','博客2','博客2',NULL,NULL);
mybatis官方小例运行原理
看了一天,显而易见的是,他的运行原来是和我设想的基本一样。
第一步:加载xml,并解析xml。代码如:
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
//
SqlSession session = sqlSessionFactory.openSession();
其中,可能会把BlogMapper.xml中的信息放到Configuration对象中的“ protected final Map<String, MappedStatement> mappedStatements = new StrictMap<MappedStatement>("Mapped Statements collection");”成员变量中。
在本例中,mappedStatements 对象的key即包含“org.mybatis.example.BlogMapper.selectBlog”。通过map的get方法你可以获取MappedStatement对象,里面包含sql语句等。关于对应的BlogMapper.xml如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" parameterType="int" resultType="org.mybatis.example.Blog">
select *
from Blog where id = #{id}
</select>
</mapper>
第二步:根据map.get("org.mybatis.example.BlogMapper.selectBlog")找到对于的sql语句创建PrepareStatement对象,并执行。
创建PrepareStatement对象的部分代码你可以从类“PreparedStatementHandler”中看到,如:
protected Statement instantiateStatement(Connection connection) throws SQLException {
String sql = boundSql.getSql();
if (mappedStatement.getKeyGenerator() instanceof Jdbc3KeyGenerator) {
String[] keyColumnNames = mappedStatement.getKeyColumns();
if (keyColumnNames == null) {
return connection.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
} else {
return connection.prepareStatement(sql, keyColumnNames);
}
} else if (mappedStatement.getResultSetType() != null) {
return connection.prepareStatement(sql, mappedStatement.getResultSetType().getValue(), ResultSet.CONCUR_READ_ONLY);
} else {
return connection.prepareStatement(sql);//本例中调用的就是这里
}
}
执行sql语句的代码也在此类中,如下
public <E> List<E> query(Statement statement, ResultHandler resultHandler) throws SQLException {
PreparedStatement ps = (PreparedStatement) statement;
ps.execute();
return resultSetHandler.<E> handleResultSets(ps);
}
第三步 ,根据BlogMapper.xml中的resultType="org.mybatis.example.Blog"创建对象Blog。
第四部,利用jdbc中api,java反射中的api把jdbc取出的数据塞入刚才创建的“org.mybatis.example.Blog”对象中,并返回。
唉,数不清的数据库持久层框架,几乎让人没时间去看java.sql.*包。几乎完全可以肯定spring dao、hibernate、ibatis技术上归根揭底用都是xml api、java反射(注解)、java.sql.* api 而已。
………………
分享到:
相关推荐
本文将以五大章节分别阐述系统的开发背景、意义,关键的开发技术:Spring Boot、MySQL、微信小程序,分析思想与方法:用例图、活动图、数据流图;设计理念与设计逻辑,实现效果与实现结果,介绍本系统的设计实现过程...
以Spring Boot项目为例,需要在项目中加入mybatis-plus和mysql等相关依赖。例如,在Maven项目中,加入mysql-connector-java作为MySQL驱动包,并加入MyBatis-Plus驱动包,这些都是通过在pom.xml文件中添加相应的...
在本例中,我们讨论的是"Mybatis-generator-core-1.3.2"版本。 **MyBatis Generator(MBG)基础概念:** 1. **MBG核心组件:** - **GeneratorConfig.xml**:这是MBG的主要配置文件,包含了关于数据库连接、目标...
至于`gbasemybatis.zip`文件,它可能包含了一些示例代码或者对如何在MyBatis中使用GBase的特殊配置和扩展。具体的内容需要解压后查看才能详细解释。 总的来说,将SpringBoot、MyBatis和GBase结合,可以构建出一个...
通过以上分析,我们可以看到Sharding-JDBC与MyBatis的整合使得在不改动大量代码的前提下,实现数据库的水平扩展成为可能,从而提高了系统的可扩展性和处理能力。这个实例"sharding-jdbc-mybatis.zip"提供了一个很好...
以mybatis-sharding插件为例,这是一个开源的Mybatis分库分表解决方案。它提供了丰富的配置选项,如分片策略、数据库和表的映射规则等。通过配置文件,我们可以轻松地设置分片策略和路由规则,实现数据库和表的动态...
本篇文章将深入探讨这个经典组合的集成过程,并以"spring-mybatis-struts2-master"项目为例,解析其主要代码,帮助开发者更好地理解和应用SSM框架。 一、Spring框架 Spring作为核心容器,负责管理对象的生命周期和...
在IT行业中,MyBatis是一个广泛应用的持久层框架,它允许开发者将SQL语句与Java代码相结合,提供了灵活且强大的数据库操作能力。本教程“mybatis学习demo2之分页查询和修改”聚焦于两个核心功能:分页查询和数据修改...
+ mybatis 1.3.1+ + mysql 5.1.21+ **运行爬虫:** 以爬取虎扑步行街的帖子、用户和评论为例。 1. 初始化数据库 在本地MySQL中创建自己的schema,执行初始化数据库的脚本 [`hupu-spider/src/main/resources/db.sql`...
在本项目中,"maven-spring-mybatis小型项目开发环境(3)log4j集成",我们将探讨如何在一个基于Maven、Spring和MyBatis的小型应用中整合Log4j日志框架。Log4j是Java应用程序广泛使用的日志记录工具,它提供灵活的日志...
除此之外,MyBatis-Plus还提供了代码生成器,这使得开发者可以快速生成Mapper、Model、Service、Controller层的代码,同时它还支持模板引擎,通过自定义配置来满足各种不同的代码生成需求。内置的分页插件基于...
接下来,我们以提供的 `Message.xml` 配置文件为例,分析其结构: ```xml ... ... ``` 在这个例子中,`namespace` 是 `IMessageDao` 接口的全限定类名,`id` 为 `queryMessageList` 的 SQL 语句与 `...
本资源以洗衣店系统为例,详细展示了如何利用Mybatis这一流行的Java持久层框架进行数据库操作。Mybatis是一个轻量级的框架,它解决了传统的JavaEE应用程序中数据访问层的复杂性,通过简化SQL映射和对象关系映射(ORM...
在本例中,通过配置文件分配分库模版,可以在不修改业务代码的情况下,灵活地调整分片策略。 6. **扩展性与可伸缩性**:通过动态数据源和分库分表,系统能够随着数据量的增长而平滑扩展,增加新的数据库实例而不...
MyBatis-Plus 是 MyBatis 的一个扩展库,它为 MyBatis 提供了更多的功能,包括自动化 CRUD 操作、动态 SQL、以及更高级的查询能力,如本例中的连表查询。在 "mybatis-plus-join-master.zip" 文件中,我们可以深入...
在整合Spring Boot与MyBatis-Plus的过程中,可能会遇到启动应用时报错的问题。错误信息通常类似于"Error starting ApplicationContext",并提示"UnsatisfiedDependencyException",这表明Spring框架在初始化bean时...
本文将深入探讨这些技术的集成与应用,以"SpringMVC-Mybatis-Shiro-redis-0.2_baichengzhou"项目为例,帮助开发者理解如何在实际项目中进行高效的整合。 首先,SpringMVC作为Spring框架的一部分,是用于构建Web应用...
本项目以"基于Springboot+Mybatis+Redis+MySql+MQ的校园医疗管理系统.zip"为例,深入探讨了这些技术在实际开发中的集成与应用。 首先,Springboot是Java领域广泛使用的微服务框架,它简化了传统Spring框架的配置,...