设为首页 收藏本站
查看: 1112|回复: 0

[经验分享] MyBatis官方小例代码剖析

[复制链接]

尚未签到

发表于 2016-11-25 07:07:07 | 显示全部楼层 |阅读模式
     个人认为从技术上来讲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.*包 DSC0000.gif 。几乎完全可以肯定spring dao、hibernate、ibatis技术上归根揭底用都是xml api、java反射(注解)、java.sql.* api 而已。
  ………………

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-305079-1-1.html 上篇帖子: MyBatis 3中文用户手册 下篇帖子: mybatis 自增主键配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表