MyBatis 入门到精通(一) 了解MyBatis获取SqlSession
MyBatis是什么?
MyBatis是一款一流的支持自定义SQL、存储过程和高级映射的持久化框架。MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去设置参数和获取检索结果。MyBatis能够使用简单的XML格式或者注解进行来配置,能够映射基本数据元素、Map接口和POJOs(普通java对象)到数据库中的记录。
简介
MyBatis工作流程
功能架构

1、API接口层:
2、数据处理层:
3、基础支撑层:
从XML中构建SqlSessionFactory
- String resource = "com/accp/mybatis/data/Configuration.xml";
- Reader reader = Resources.getResourceAsReader(resource);
- sqlMapper = new SqlSessionFactoryBuilder().build(reader);
MyBatis主配置文件
MyBatis配置文件中大标签configuration下子标签包括:
configuration
|--- properties
|--- settings
|--- typeAliases
|--- typeHandlers
|--- objectFactory
|--- plugins
|--- environments
|--- |--- environment
|--- |--- |--- transactionManager
|--- |--- |__ dataSource
|__ mappers
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
- <!--在下面的datasource中可以使用占位符来引用属性文件中的值-->
- <properties resource="properties/datasource.properties" />
- <settings>
- <setting name="cacheEnabled" value="true" />
- <setting name="lazyLoadingEnabled" value="true" />
- <setting name="multipleResultSetsEnabled" value="true" />
- <setting name="useColumnLabel" value="true" />
- <setting name="useGeneratedKeys" value="false" />
- <setting name="defaultExecutorType" value="SIMPLE" />
- <setting name="defaultStatementTimeout" value="25000" />
- </settings>
- <!-- 配置别名 类型别名是Java 类型的简称。它仅仅只是关联到XML 配置,简写冗长的JAVA 类名。-->
- <typeAliases>
- <typeAlias type="com.accp.mybatis.model.Blog" alias="Blog"/>
- </typeAliases>
- <!-- 使用这个配置,"Blog"就能在任何地方代替"com.accp.mybatis.model.Blog"被使用。-->
- <!--
- java 中一些简单类型的别名
- 别名 映射的类型
- _byte byte
- _long long
- _short short
- _int int
- _integer int
- _double double
- _float float
- _boolean boolean
- string String
- byte Byte
- long Long
- short Short
- int Integer
- integer Integer
- double Double
- float Float
- boolean Boolean
- date Date
- decimal BigDecimal
- bigdecimal BigDecimal
- object Object
- map Map
- hashmap HashMap
- list List
- arraylist ArrayList
- collection Collection
- iterator Iterator
- -->
- <!-- 每个数据库(environment)对应一个SqlSessionFactory 实例-->
- <environments default="accp">
- <!--
- environments对于一个应用可能连接多个数据库,那就需要配置不同的环境来连接不同的数据库,
- 每一个SqlSessionFactory对应一个environments也可以设置不同的环境应用于开发或测试的环境如果环境被忽略,
- 那么默认环境将会被加载,也就是default="development"的作用了
- -->
- <environment id="accp">
- <transactionManager type="JDBC" />
- <!--
- transactionManager设置事物的管理类型是 type=”[JDBC|MANAGED]”
- JDBC使用datasource的连接来管理事物范围。
- MANAGED自己不进行事物的提交和回滚,依靠容器来管理事物,设置closeConnection为false,取消自动关闭连接
- -->
- <dataSource type="POOLED">
- <!--
- dataSource设置数据源[UNPOOLED|POOLED|JNDI]
- POOLED:每次被请求时简单打开和关闭连接
- POOLED:JDBC 连接对象的数据源连接池的实现,用来避免创建新的连接实例时必要的初始连接和认证时间。
- poolMaximumActiveConnections – 在任意时间存在的活动(也就是正在使用)连接的数量。默认值:10
- poolMaximumIdleConnections – 任意时间存在的空闲连接数。
- oolMaximumCheckoutTime – 在被强制返回之前,池中连接被检查的时间。默认值:20000 毫秒(也就是 20 秒)
- poolTimeToWait – 这是给连接池一个打印日志状态机会的低层次设置,还有重新尝试获得连接,这些情况下往往需要很长时间(为了避免连接池没有配置时静默失败)。 默认值:20000 毫秒(也就是 20 秒)
- poolPingQuery – 发送到数据的侦测查询,用来验证连接是否正常工作,并且准备接受请求。默认是“NO PING QUERY SET”,这会引起许多数据库驱动连接由一个错误信 息而导致失败。
- poolPingEnabled – 这是开启或禁用侦测查询。如果开启,你必须用一个合法的SQL语句(最好是很快速的)设置 poolPingQuery 属性。默认值:false。
- poolPingConnectionsNotUsedFor – 这是用来配置 poolPingQuery 多次时间被用一次。这可以被设置匹配标准的数据库连接超时时间,来避免不必要的侦测。默认值:0 (也就是所有连接每一时刻都被侦测-但仅仅当 poolPingEnabled 为 true 时适用)。
- JNDI – 这个数据源的实现是为了使用如 Spring 或应用服务器这类的容器,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。
- initial_context – 这个属性用来从初始上下文中寻找环境(也就是initialContext.lookup(init ial——context))。这是个可选属性,如果被忽略,那么data_source 属性将 会直接以 init ialContext 为背景再次寻找。
- data_source – 这是引用数据源实例位置的上下文的路径。它会以由 init ial_context查询返回的环境为背景来查找,如果 init ial_context 没有返回结果时,直接以初始上下 文为环境来查找。
- -->
- <property name="driver" value="${driver}" />
- <property name="url" value="${url}" />
- <property name="username" value="${username}" />
- <property name="password" value="${password}" />
- <property name="driver.encoding" value="${encoding}" />
- </dataSource>
- </environment>
- </environments>
- <!--mappers是告诉MyBatis 去哪寻找映射SQL 的语句。可以使用类路径中的资源引用,或者使用字符,输入确切的URL 引用。-->
- <mappers>
- <mapper resource="com/accp/mybatis/data/BlogMapper.xml" />
- </mappers>
- </configuration>
从SqlSessionFactory中获取SqlSession
- SqlSession session = sqlMapper.openSession();
MyBatis 入门到精通(一) 了解MyBatis获取SqlSession的更多相关文章
- 转)mybatis实战教程(mybatis in action),mybatis入门到精通
mybatis实战教程(mybatis in action),mybatis入门到精通 http://limingnihao.iteye.com/blog/781671 http://blog.csd ...
- MyBatis从入门到精通(二):MyBatis XML方式的基本用法之Select
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 1. 明确需求 书中提到的需求是一个基 ...
- MyBatis从入门到精通(三):MyBatis XML方式的基本用法之多表查询
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 1. 多表查询 上篇博客中,我们示例的 ...
- MyBatis从入门到精通(四):MyBatis XML方式的基本用法之增删改
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 1. insert用法 1.1 简单的 ...
- MyBatis从入门到精通(六):MyBatis动态Sql之if标签的用法
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解如何使用if标签生成动 ...
- MyBatis从入门到精通(九):MyBatis高级结果映射之一对一映射
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解MyBatis中实现查 ...
- MyBatis从入门到精通(十一):MyBatis高级结果映射之一对多映射
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解MyBatis中如何使 ...
- MyBatis从入门到精通(1):MyBatis入门
作为一个自学Java的自动化专业211大学本科生,在学习和实践过程中"趟了不少雷",所以有志于建立一个适合同样有热情学习Java技术的参考"排雷手册". 最近在 ...
- mybatis实战教程(mybatis in action),mybatis入门到精通
转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过hibernate了那这个就非常的简单) (再加 ...
随机推荐
- [转] 软件定义网络(SDN) 的应运而生
原文见51CTO:http://network.51cto.com/art/201103/251425.htm 2012的故事 2012年的某天,你跟往常一样起床,打开电脑,却发现无法登录到邮箱.无法 ...
- Python Snippet
python按行读取文件,如何去掉换行符"\n" for line in file.readlines(): line=line.strip('\n') python没有subst ...
- 用static关键字修饰类
Java里面static一般用来修饰成员变量或函数.但有一种特殊用法是用static修饰内部类,普通类是不允许声明为静态的,只有内部类才可以.被static修饰的内部类可以直接作为一个普通类来使用,而 ...
- Sina App Engine(SAE)入门教程(2)-Mysql使用
如果你还没有SAE的账号,请在http://sae.sina.com.cn 注册新用户.具体的注册流程请参见:Sina App Engine(SAE)入门教程(1)在常规的环境下,我们可以通过http ...
- HTML5 文件API(二)
1.FileSystem概述及浏览器检 2.申请磁盘配额 3.创建文件
- JVM最多可创建多少线程
JVM可支持的最大线程数 JVM最大线程数 (2012-07-04 23:20:15) 转载▼ 标签: jvm 最大线程数 it 分类: java分布式总结 摘自:http://sesame.itey ...
- AngularJS初探:搭建PhoneCat项目的开发与测试环境
AngularJS官方网站提供了一个用于学习的示例项目:PhoneCat.这是一个Web应用,用户可以浏览一些Android手机,了解它们的详细信息,并进行搜索和排序操作. 对于PhoneCat项目的 ...
- PCL—低层次视觉—点云滤波(初步处理)
点云滤波的概念 点云滤波是点云处理的基本步骤,也是进行 high level 三维图像处理之前必须要进行的预处理.其作用类似于信号处理中的滤波,但实现手段却和信号处理不一样.我认为原因有以下几个方面: ...
- MFC多文档中opencv处理图像打开、保存
需要在C**Doc和C**View中进行相应修改 图像打开: Doc.cpp中: BOOL CCVMFCDoc::Load(IplImage** pp, LPCTSTR csFilename) { I ...
- 语言基础:C#运算符
运算符 分类 符号 解释 优先级 算术运算符 ++ -- 加加 减减 由高到低,即执行顺序由上到下.(圆括号的优先级最高) * / % 乘 除 取余 + - 加 减 关系运 ...