文档章节

MyBatis-一次查询请求源码解读

 小猪突然地
发布于 2015/06/08 21:21
字数 247
阅读 240
收藏 1
点赞 0
评论 0

   为了分析方便,本文默认mybatis查询数据的环境已经搭建成功,在此就不累述了,我们把重点放在关键的查询代码上。

@Test
public void getById(){
    InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);   
    SqlSession session = sqlSessionFactory.openSession();
    Person person = session.selectList("com.chen.mapper.PersonMapper.getById", 1);
    System.out.println("id:"+person.getId()+", name:"+person.getName()+", age:"+person.getAge());
}

  mapper映射xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"   
	"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">  
        <mapper namespace="com.chen.mapper.PersonMapper">  
        
        <select id="getById" parameterType="integer" resultType="Person">  
        select * from person where id = #{id}   
</select>

  好了,关键代码就已经列出来了,下面我们着重来通过源码解读,看看mybatis做一次查询的流程就进是怎样的。

  其中,我们mybatis入口的重点代码是:

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);   
SqlSession session = sqlSessionFactory.openSession();
Person person = session.selectList("com.chen.mapper.PersonMapper.getById", 1);

   由于时间,后面将具体分析。。。。

© 著作权归作者所有

共有 人打赏支持
粉丝 2
博文 23
码字总数 20045
作品 0
成都
程序员
Mybatis3.4.x技术内幕(十六):Mybatis之sqlFragment(可复用的sql片段)

Mybatis目前最新版本为3.4.0,因此,我也将我的项目由3.3.1替换为3.4.0。在上一篇博文中,详细分析了Mybatis在使用foreach循环进行批量insert,返回主键id列表时,如果使用BatchExecutor,那...

祖大俊 ⋅ 2016/06/05 ⋅ 0

Mybatis3.3.x技术内幕(十四):Mybatis之KeyGenerator

在Mybatis中,执行insert操作时,如果我们希望返回数据库生成的自增主键值,那么就需要使用到KeyGenerator对象。 需要注意的是,KeyGenerator的作用,是返回数据库生成的自增主键值,而不是生...

祖大俊 ⋅ 2016/05/11 ⋅ 3

Mybatis3.4.x技术内幕(二十二):Mybatis一级、二级缓存原理分析

Mybatis的一级缓存,指的是SqlSession级别的缓存,默认开启;Mybatis的二级缓存,指的是SqlSessionFactory级别的缓存,需要配置。缓存是针对select来说的。 1、一级缓存 localCacheScope用于...

祖大俊 ⋅ 2016/09/17 ⋅ 4

【深入浅出MyBatis系列一】MyBatis入门

深入浅出MyBatis系列 【深入浅出MyBatis系列一】MyBatis入门 【深入浅出MyBatis系列二】配置简介(MyBatis源码篇) 【深入浅出MyBatis系列三】Mapper映射文件配置 【深入浅出MyBatis系列四】...

陶邦仁 ⋅ 2015/12/22 ⋅ 0

Mybatis3.3.x技术内幕(十三):Mybatis之RowBounds分页原理

Mybatis可以通过传递RowBounds对象,来进行数据库数据的分页操作,然而遗憾的是,该分页操作是对ResultSet结果集进行分页,也就是人们常说的逻辑分页,而非物理分页。 RowBounds对象的源码如...

祖大俊 ⋅ 2016/05/08 ⋅ 2

Mybatis一级缓存实现原理

Mybatis将缓存设计成两级结构,一级缓存是sqlSession级别的,同一个会话中查询多次相同sql不需要都去查数据库,二级缓存是Mapper级别的,多个会话去执行同一个Mapper的sql数据缓存在同一个地...

Small-Liu ⋅ 2016/11/23 ⋅ 0

《深入理解mybatis原理》 MyBatis的一级缓存实现详解 及使用注意事项

MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓存机制上。MyBatis提供了一级缓存、二级缓存 这两个缓存机制,能够很好地处理和维护缓存,以提高系统的性能...

java梦想家01 ⋅ 2016/01/11 ⋅ 1

Minidao_1.6.1版本发布,超轻量Java持久化框架

Minidao1.6.1版本发布了,超轻量Java持久化框架 升级日志 1,修复minidao参数不支持下划线问题 2,修复minidao接口定义返回类型为基本数据类型,无法传参数问题 3,拓展灵活性,通过sql判断是...

Jeecg ⋅ 2016/09/12 ⋅ 5

Mybatis一级缓存、二级缓存

以下内容来自美团技术博客:聊聊MyBatis缓存机制 前言 MyBatis是常见的Java数据库访问层框架。在日常工作中,开发人员多数情况下是使用MyBatis的默认缓存配置,但是MyBatis缓存机制有一些不足...

为了美好的明天 ⋅ 05/23 ⋅ 0

聊聊 MyBatis 缓存机制

前言 MyBatis是常见的Java数据库访问层框架。在日常工作中,开发人员多数情况下是使用MyBatis的默认缓存配置,但是MyBatis缓存机制有一些不足之处,在使用中容易引起脏数据,形成一些潜在的隐...

鉴客 ⋅ 05/14 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

CENTOS7防火墙命令记录

安装Firewall命令: yum install firewalld firewalld-config Firewall开启常见端口命令: firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-po......

cavion ⋅ 34分钟前 ⋅ 0

【C++】【STL】利用chromo来测量程序运行时间与日志时间打印精确到微秒

直接上代码吧,没啥好说的。头疼。 #include <iostream>#include <string>#include <ctime>#include <sstream>#include <iomanip>#include <thread>#include <chrono>using ......

muqiusangyang ⋅ 37分钟前 ⋅ 0

Mac环境下svn的使用

在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境。在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还需做一下简...

故久呵呵 ⋅ 47分钟前 ⋅ 0

破解公司回应苹果“USB限制模式”:已攻破

本周四,苹果发表声明称 iOS 中加入了一项名为“USB 限制模式”的功能,可以防止 iPhone 在连接其他设备的时候被破解,并且强调这一功能并不是针对 FBI 等执法部门,为的是保护用户数据安全。...

六库科技 ⋅ 48分钟前 ⋅ 0

MyBtais整合Spring Boot整合,TypeHandler对枚举类(enum)处理

概要 问题描述 我想用枚举类来表示用户当前状态,枚举类由 code 和 msg 组成,但我只想把 code 保存到数据库,查询处理,能知道用户当前状态,这应该怎么做呢?在 Spring 整合MyBatis 的时候...

Wenyi_Feng ⋅ 今天 ⋅ 0

synchronized与Lock的区别

# <center>王梦龙的读书笔记第一篇</center> ## <center>-synchronized与Lock的区别</centre> ###一、从使用场景来说 + synchronized 是能够注释代码块、类、方法但是它的加锁是和解锁使用一......

我不想加班 ⋅ 今天 ⋅ 0

VConsole的使用

手机端控制台打印输出,方便bug的排查。 首先需要引入vconsole.min.js 文件,然后在文件中创造实例。就能直接使用了。 var vConsole = new VConsole(); vConsole的文件地址...

大美琴 ⋅ 今天 ⋅ 0

Java NIO之字符集

1 字符集和编解码的概念 首先,解释一下什么是字符集。顾名思义,就是字符的集合。它的初衷是把现实世界的符号映射为计算机可以理解的字节。比如我创造一个字符集,叫做sex字符集,就包含两个...

士别三日 ⋅ 今天 ⋅ 0

Spring Bean基础

1、Bean之间引用 <!--如果Bean配置在同一个XML文件中,使用local引用--><ref bean="someBean"/><!--如果Bean配置在不同的XML文件中,使用ref引用--><ref local="someBean"/> 其实两种......

霍淇滨 ⋅ 今天 ⋅ 0

05、基于Consul+Upsync+Nginx实现动态负载均衡

1、Consul环境搭建 下载consul_0.7.5_linux_amd64.zip到/usr/local/src目录 cd /usr/local/srcwget https://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_linux_amd64.zip 解压consu......

北岩 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部