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了那这个就非常的简单) (再加 ...
 
随机推荐
- hdu 2717 Catch That Cow(BFS,剪枝)
			
题目 #include<stdio.h> #include<string.h> #include<queue> #include<algorithm> ...
 - POJ 1182 食物链(种类并查集)
			
记得第一次做这道题的时候,推关系感觉有点复杂,而且写完代码后一直WA,始终找不出错误. 在A了十几道并查集后,再做这道题,发现太小儿科了.发现原来之所以WA,就在于查找根节点时,没有同步更新子节点相对 ...
 - Asp.net 身份验证
			
Forms 验证方式对基于用户的验证授权提供了很好的支持,可以通过一个登录页面验证用户的身份,将此用户的身份发回到客户端的Cookie,之后此用户再访问这个 web应用就会连同这个身份Cookie一起 ...
 - hdu 4430 Yukari's Birthday
			
思路: 分析知道1<=r<40:所以可以枚举r,之后再二分k. 代码如下: #include<iostream> #include<stdio.h> #includ ...
 - 转:UGUI与NGUI的区别与优缺点
			
1. NGUI与UGUI的区别 1) uGUI的Canvas 有世界坐标和屏幕坐标 2) uGUI的Image可以使用material 3) UGUI通过Mask来裁剪,而NGUI通过Pa ...
 - 分布式内存对象缓存系统Memcached-概述
			
全面掌握Memcached 1. 概述 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,是为了加快网站http://www. ...
 - jvm垃圾回收的时间问题
			
1.系统崩溃前的一些现象: 每次垃圾回收的时间越来越长,由之前的10ms延长到50ms左右,FullGC的时间也有之前的0.5s延长到4.5s FullGC的次数越来越多,最频繁时隔不到1分钟就进行一 ...
 - Socket称"套接字"
			
Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 二.利用Socket建立网络连接的步骤 建立Socket连接至少需要一对 ...
 - 如何在Android应用程序中使用传感器模拟器SensorSimulator
			
原文地址; 如何在Android应用程序中使用传感器模拟器 - 移动平台应用软件开发技术 - 博客频道 - CSDN.NET http://blog.csdn.net/pku_android/arti ...
 - IntelliJ IDEA 15开发Java Maven项目
			
1.安装好之后开始创建项目