备注:ibatis 迁入google code 更名为Mybatis

官方文档:http://mybatis.org/mybatis-3/

比较好的教程推荐:http://www.blogjava.net/davidjefiny/archive/2013/12/22/Mybatis.html

Mybaits介绍

Mybatis是一个持久层(ORM)框架,把实体类和POJO之间建立了映射关系,是半自动的ORM实现。

Mybatis 优点:

【1】基于SQL语法,简单易学

【2】能了解底层的组装过程

【3】SQL语句的封装在XML配置文件,便于统一管理和维护,降低了程序的耦合度

【4】程序调试方便

Mybaits基本要素:

【1】configuration.xml 全局配置文件

【2】mapper.xml 核心映射文件

【3】SqlSession 接口

基础配置文件configuration.xml

configuration.xml是系统的核心配置文件,包含数据源和事务管理等设置和属性信息,Xml文档结构如下:

configuration 配置

properties 可以配置在Java属性配置文件中

settings 修改Mybatis在运行时的行为方式

typeAliases 为Java类型命名一个较短的名字

TypeHandlers 类型处理器

objectFactory 对象工厂

plugins 插件

environments 环境

environment 环境变量

transactionManager 事务控制器

dataSource 数据源

mappers 映射器

事务管理:

Mybatis支持两种事务管理类型:

JDBC->利用JDBC的提交和回滚功能,利用连接的数据源来管理事务的作用域。

MANAGED-> 这个类型什么都不做,不提交、不回滚 、不关闭连接。而是让窗口来管理事务的全部生命周期(比如Spring或者J2EE服务器)。

数据源:

数据源有三种:UNPOOLED   POOLED    JNDI

UNPOOLED   这个数据源实现在每次请求的时候简单的打开和关闭一个连接。虽说有点慢,但是一些不需要性能和立即响应的应用来说,是一种选择。

POOLED   数据源缓存JDBC连接独享用于避免每次都要打开连接和生成连接对象需要的验证时间。对于高并发Web,一般采用这种方法。

JNDI   这种数据源是为了和Spring或者应用服务一起使用,可以在外部也可以内部配置这个数据源,然后在JNDI上下文中引用它。

SQL映射文件:

【1】相对路径:

<mappers>
<mapper resource=""org/mybatis/builder/UserManager.xml></mapper>
</mappers>

【2】全路径:

 <mappers>
<mapper url="file:///var/sqlmaps/AuthorMapper.xml"></mapper>
</mappers>

SQL映射文件:

SQL映射文件结构:

cache   ---   配置命名空间的缓存。

cache-ref    ----  从其他命名空间引用缓存配置。

resultMap   ---  最复杂  最给力的元素 用来描述如何从结果集中加载对象

sql  ---  重用的SQL 块,可以被其他语句引用。

insert  update  delete  select

Insert

主键策略:如果表中有自动增长得主键,可以设置 useGeneratedKeys = "true"  keyProperty="主键"

动态SQL:

Mybatis强大功能之一就是动态SQL能力

if

choose(when  otherwise)

trim(where    set )

foreach

SQL映射文件:

SQL  这个元素定义一个可以复用的SQL语句片段,供其他语句调用。

比如:

 <sql id="userColumns">id,username,passwd</sql>
 <select id="selectUser" parameterType="int" resultType="hashmap">

 select <include refid="userColumns"/> from _table where id=#{id}

 </select>

动态SQL:

缓存---cache:缓存技术是一种“以空间换时间”的设计理念,利用内存空间资源来提高数据检索速度的有效手段之一。

Mybaits 默认情况是没有开启缓存的,除了局部的session缓存。需要开启二级缓存,需要在SQL映射文件添加一行

<cache />

比如:<cache eviction = "FIFO" flushInverval = "6000" size = "512" readOnly = ""true>

SqlSessionFactoryBuilder:一旦创建,SqlSessionFactory 就会在应用程序中始终存在。所以没有理由去销毁和再创建,一个应用程序也不建议多次创建SqlSessionFactory。所以作用域做好事Application。可以有很多实现方式:最好就是单例模式或者静态单例模式。但是这种并不被赞成和好用的,反而使用Google Guice 或则Spring来进行依赖反射会更好。允许生成管理器SqlSessionFactory的单例生命周期。

SqlSession 生命周期:

SQLSession  每个线程都有自己的SqlSession实例,SqlSession实例是不能被共享,也不是线程安全的。最好使用Request作用域或者方法体作用域。如果使用Web框架,应该让SqlSession更随HTTP请求的相似作用域。也就是说,在收到一个HTTP请求过后,打开SqlSession,等返回一个回应后,立马关掉Sqlsession。关闭SqlSession非常重要的,,下面是标准的方式关闭:

SqlSession session = sqlSessionFactory.openSession();

try{

//TODO:

}

finally{ session.close(); }

SqlSesson接口:

SqlSession获取方式:

 Reader reader = Resources.getResourceAsReader("configuration.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession();

SqlSession的使用:

调用insert update selectList selectOne delete 等方法执行增删改查等操作。

提取SQL的方法:

 Configuration configuration = sqlSession.getConfiguration();
MappedStatement mStatement = configuration.getMappedStatement(sqlid);
BoundSql boundSql = mStatement.getBoundSql(Param);
String sql = boundSql.getSql();

可以用于自定义打印日志

分页方法:

mybatis(非常详细的哦~~~~)的更多相关文章

  1. (转)springMVC+mybatis+ehcache详细配置

    一. Mybatis+Ehcache配置 为了提高MyBatis的性能,有时候我们需要加入缓存支持,目前用的比较多的缓存莫过于ehcache缓存了,ehcache性能强大,而且位各种应用都提供了解决方 ...

  2. SpringBoot整合Mybatis完整详细版二:注册、登录、拦截器配置

    接着上个章节来,上章节搭建好框架,并且测试也在页面取到数据.接下来实现web端,实现前后端交互,在前台进行注册登录以及后端拦截器配置.实现简单的未登录拦截跳转到登录页面 上一节传送门:SpringBo ...

  3. SpringBoot整合Mybatis完整详细版

    记得刚接触SpringBoot时,大吃一惊,世界上居然还有这么省事的框架,立马感叹:SpringBoot是世界上最好的框架.哈哈! 当初跟着教程练习搭建了一个框架,传送门:spring boot + ...

  4. uploadify在火狐下上传不了的解决方案,java版(Spring+SpringMVC+MyBatis)详细解决方案

     由于技术选型的原因,在一个产品中,我选择了uploadify,选择它的原因是它有完善的技术文档说明(http://www.uploadify.com/documentation/),唯一不足的是 ...

  5. Mybatis初步详细配置

    1.Mybatis所需包 下载地址:https://github.com/mybatis/mybatis-3/releases,其中log4j是日志包,mysql是数据库所需包,需自行下载 2.项目结 ...

  6. springmvc学习总结(二) -- maven+springmvc+spring+mybatis+mysql详细搭建整合过程讲解

    @_@ 写在最前 之前分享过下面这几篇: mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(上)(附demo和搭建过程遇到的问题解决方法) myba ...

  7. Hibernate和Mybatis区别 详细 有用

    1.开发上手难度 hibernate的真正掌握(封装的功能和特性非常多)要比Mybatis来得难. 在真正产品级应用上要用Hibernate,不仅对开发人员的要求高,hibernate往往还不适合(多 ...

  8. maven+springmvc+spring+mybatis+mysql详细搭建整合过程讲解

    转自:https://www.cnblogs.com/lmei/p/7190755.html?utm_source=itdadao&utm_medium=referral @_@ 写在最前 之 ...

  9. 一步步教你整合SSM框架(Spring MVC+Spring+MyBatis)详细教程重要

    前言 SSM(Spring+SpringMVC+Mybatis)是目前较为主流的企业级架构方案,不知道大家有没有留意,在我们看招聘信息的时候,经常会看到这一点,需要具备SSH框架的技能:而且在大部分教 ...

  10. maven+springMVC+mybatis+mysql详细过程

    1.工程目录 a.在src/main/java文件夹中,新建包cn.springmvc.model(存放javabean), cn.springmvc.dao(存放spring与mybatis连接接口 ...

随机推荐

  1. codevs1907 方格取数 3

    «问题描述:在一个有m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法.«编程任务:对于给定的方格棋 ...

  2. Java中finally关键字的使用(转)

    与其他语言的模型相比,finally 关键字是对 Java 异常处理模型的最佳补充.finally 结构使代码总会执行,而不管有无异常发生.使用 finally 可以维护对象的内部状态,并可以清理非内 ...

  3. 怎么用API网关构建微服务

    选择将应用程序构建为微服务时,需要确定应用程序客户端如何与微服务交互.在单体应用程序中,只有一组端点.而在微服务架构中,每个微服务都会暴露一组通常是细粒度的端点.在本文中,我们将讨论一下这对客户端与应 ...

  4. Adobe Reader 的直接下载地址

    页面:https://get.adobe.com/reader/direct/ 选择操作系统.选择语言.选择版本,然后点击立即下载. https://ardownload2.adobe.com/pub ...

  5. centos 6  简单安装mysql

    yum list installed | grep mysql yum -y remove mysql-libs.i686 yum list installed | grep mysql wget d ...

  6. 一种基于Rsync算法的数据库备份方案设计

    根据容灾备份系统对备份类别的要求程度,数据库备份系统可以分为数据级备份和应用级备份.数据备份是指建立一个异地的数据备份系统,该系统是对原本地系统关键应用数据实时复制.当出现故障时,可由异地数据系统迅速 ...

  7. 关于 freetds pymssql 的安装部署

    关于 freetds pymssql 的安装部署一.安装: (freetds-0.91 pymssql 2.0.1) 如果要在linux机器 连mysqlsever 1.需要安装freetds./co ...

  8. ZOJ - 3201 Tree of Tree (树形背包)

    题意:有一棵树,树上每个结点都有一个权值,求恰好包含k个结点的子树的最大权值. 设dp[i][j]为以结点i为根的树中包含j个结点的子树的最大权值,则可以把这个结点下的每棵子树中所包含的所有子树的大小 ...

  9. SQL夯实基础(六):MqSql Explain

    关系型数据库中,互联网相关行业使用最多的无疑是mysql,虽然我们C# Developer很多用的都是sql server ,但是学习一些mysql方面的知识也是必要的,他山之石么. 先上一个expl ...

  10. windowsError:32

    Traceback (most recent call last): File "/usr/lib/python2.7/logging/handlers.py", line 78, ...