1. 范围和生命周期
     SqlSessionFactoryBuilder -->SqlSessionFactory-->SqlSession-->Mapper 实例

SqlSessionFactoryBuilder 最佳范围是方法范围, 创建完SqlSessionFactory就可以丢弃了;

SqlSessionFactory最佳范围是应用内;

SqlSession 是线程不安全的, 所以要及时关闭.

Mapper实例可以从SqlSession中获取, 最佳范围是方法内.

String resource = "org/mybatis/example/Configuration.xml";
     Reader reader = Resources.getResourceAsReader(resource);

// 由SqlSessionFactoryBuilder根据配置文件生成SqlSessionFactory,它可以从 XML 配置,注解或手动配置 Java 来创建SqlSessionFactory

SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);

// 由SqlSessionFactory生成SqlSession对象
     SqlSession session = sqlMapper.openSession();
     // 使用SqlSession对象操作数据
     Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
     // 或者
     BlogMapper mapper = session.getMapper(BlogMapper.class);
     Blog blog = mapper.selectBlog(101);
<?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="Blog">
               select * from Blog where id = #{id}
          </select>
     </mapper>

2. XML 映射配置文件

XML 文档的高层级结构如下:
  configuration 配置
       properties 属性
       settings 设置
       typeAliases 类型命名
       typeHandlers 类型处理器
       objectFactory 对象工厂
       plugins 插件
       environments 环境
            environment 环境变量
                 transactionManager 事务管理器
                 dataSource 数据源
       mappers

3. SQL 映射的 XML 文件

SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):
       cache   -   配置给定命名空间的缓存。
       cache- ref  –   从其他命名空间引用缓存配置。
       resultMap  –  最复杂,也是最有力量的元素,用来描述如何从数据库结果集中来加载你的对象。
       parameterMap  –  已经被废弃了!老式风格的参数映射。内联参数是首选,这个元素可能在将来被移除。这里不会记录。
       sql   –  可以重用的 SQL 块,也可以被其他语句引用。
       insert  –  映射插入语句
       update –  映射更新语句
       delete –  映射删除语句
       select –   映射查询语句 


字符串替换

直接在 SQL 语句中插入一个不改变的字符串。比如,像 ORDER BY,你可以这样来使用:
     ORDER BY ${columnName}

resultMap: 代替JDBC代码, 完成从结果集中取出数据的功能
       constructor  –   类在实例化时,用来注入结果到构造方法中
       idArg  –  ID 参数;标记结果作为 ID 可以帮助提高整体效能
       arg  –  注入到构造方法的一个普通结果
       id   –  一个 ID 结果;标记结果作为 ID 可以帮助提高整体效能
       result –   注入到字段或 JavaBean 属性的普通结果
       association –   一个复杂的类型关联;许多结果将包成这种类型
       嵌入结果映射  –   结果映射自身的关联,或者参考一个
       collection   –   复杂类型的集
       嵌入结果映射  –   结果映射自身的集,或者参考一个
       discriminator  –   使用结果值来决定使用哪个结果映射
       case –   基于某些值的结果映射
       嵌入结果映射  –   这种情形结果也映射它本身,因此可以包含很多相同的元素,或者它可以参照一个外部的结果映射。

构造方法

<constructor>

<idArg column="id" javaType="int"/>

<arg column=”username” javaType=”String”/>

</constructor>

public class User {

//…

public User(int id, String username) {

//…

}

//…

}

     关联

<association  property="author" column="blog_author_id" javaType=" Author">
          <id property="id" column="author_id"/>
          <result property="username" column="author_username"/>
     </association>

集合

<collection property="posts" ofType="domain.blog.Post">
          <id property="id" column="post_id"/>
          <result property="subject" column="post_subject"/>
          <result property="body" column="post_body"/>
     </collection>

     鉴别器 相当于switch语句,

<resultMap id="vehicleResult" type="Vehicle">
          <id property=”id” column="id" />
          <result property="vin" column="vin"/>
          <result property="year" column="year"/>
          <result property="make" column="make"/>
          <result property="model" column="model"/>
          <result property="color" column="color"/>
          <discriminator javaType="int" column="vehicle_type">
               <case value="1" resultMap="carResult"/>
               <case value="2" resultMap="truckResult"/>
               <case value="3" resultMap="vanResult"/>
               <case value="4" resultMap="suvResult"/>
          </discriminator>
     </resultMap>

4. 缓存

自定义缓存要实现Cache接口

5. 动态SQL

1. if
<select id=”findActiveBlogWithTitleLike”
parameterType=”Blog” resultType=”Blog”>
SELECT * FROM BLOG
WHERE state = „ACTIVE‟
<if test=”title != null”>
AND title like #{title}
</if>
</select>
2. choose , when, otherwise
<select id=”findActiveBlogLike”
parameterType=”Blog” resultType=”Blog”>
SELECT * FROM BLOG WHERE state = „ACTIVE‟
<choose>
<when test=”title != null”>
AND title like #{title}
</when>
<when test=”author != null and author.name != null”>
AND title like #{author.name}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
</select>
3. trim, where, set
<select id=”findActiveBlogLike”
parameterType=”Blog” resultType=”Blog”>
SELECT * FROM BLOG
<where>
<if test=”state != null”>
state = #{state}
</if>
<if test=”title != null”>
AND title like #{title}
</if>
<if test=”author != null and author.name != null”>
AND title like #{author.name}
</if>
</where>
</select>
<update id="updateAuthorIfNecessary"
parameterType="domain.blog.Author">
update Author
<set>
<if test="username != null">username=#{username},</if>
<if test="password != null">password=#{password},</if>
<if test="email != null">email=#{email},</if>
<if test="bio != null">bio=#{bio}</if>
</set>
where id=#{id}
</update>
4. foreach: 用于构建in条件
<select id="selectPostIn" resultType="domain.blog.Post">
SELECT *
FROM POST P
WHERE ID in
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
</select>

6. JAVA API

MyBatis3用户指南的更多相关文章

  1. Gradle用户指南(1)-Gradle安装

    前置条件 Gradle 需要 Java JDK 或者 JRE,版本是 6 及以上.Gradle 将会装载自己的 Groovy 库,因此,Groovy 不需要被安装.任何存在的 Groovy 安装都会被 ...

  2. Gradle用户指南(章9:Groovy快速入门)

    Gradle用户指南(章9:Groovy快速入门) 你可以使用groovy插件来构建groovy项目.这个插件继承了java插件的功能,且扩展了groovy编译.你的项目可以包含groovy代码.ja ...

  3. Gradle用户指南

    下载安装gradle 2.1 下载地址:http://www.gradle.org/learn 安装先决条件:gradle安装需要1.6或者更高版本的jdk(jre)(可以使用java –versio ...

  4. scons用户指南翻译(附gcc/g++参数详解)

    scons用户指南 翻译 http://blog.csdn.net/andyelvis/article/category/948141 官网文档 http://www.scons.org/docume ...

  5. 阿里云 EDAS-HSF 用户指南

    阿里云 EDAS-HSF 用户指南 针对 EDAS v2.3.0©Alibaba EDAS 项目组2015/8/19 1 前言本文档旨在描述阿里云 EDAS 产品中应用服务化模块的基本概念,以及如何使 ...

  6. 【Flume NG用户指南】(1)设置

    作者:周邦涛(Timen) Email:zhoubangtao@gmail.com 转载请注明出处:  http://blog.csdn.net/zhoubangtao/article/details ...

  7. Android官方技术文档翻译——Gradle 插件用户指南(1-3)

    不知道是什么网络问题,上午一直发不了博客,其它页面基本正常,就是在写博客这里,每次打开都是响应超时.刚才用了VPN,顺便试了一下,竟然能够编辑.想是CDN之类的问题吧. 这次翻译的是Gradle 插件 ...

  8. 【Flume NG用户指南】(2)构造

    作者:周邦涛(Timen) Email:zhoubangtao@gmail.com 转载请注明出处:  http://blog.csdn.net/zhoubangtao/article/details ...

  9. Android官方技术文档翻译——Gradle 插件用户指南(5)

    昨晚把第五章未译完的几句话攻克了.只是第六章没怎么译,明后天又是周末,假设周一前第六章翻译完的话,周一再发第六章. 本文译自Android官方技术文档<Gradle Plugin User Gu ...

随机推荐

  1. 关于报错“syntax error near unexpected token `”和回车换行

    本来是很简单一个事情,转过来是因为打字机这事比较有趣…… http://blog.csdn.net/xyp84/archive/2009/08/11/4435899.aspx 摘要一下: 回车 换行 ...

  2. 从文件/文件流的头字节中得到mime信息

    在写网络爬虫的时候,需要根据链接来获取文件类型,将内容正确存储.之前我都是根据链接的后缀来判断的,比如: http://img12.360buyimg.com/da/20120330/88_31_Zy ...

  3. 框架Iframe的退出,IE 火狐都没问题 到360就不跳转页面 刷新一遍才跳转到登录页

    遇到这种情况 ,郁闷死了,来回折腾好几种跳转方法,最后有一个灵感,当我点击退出按钮的时候,我是用jquery $("#ID").click(function(){}) 这种方法异步 ...

  4. 数论 + 容斥 - HDU 1695 GCD

    problem's Link mean 给定五个数a,b,c,d,k,从1~a中选一个数x,1~b中选一个数y,使得gcd(x,y)=k. 求满足条件的pair(x,y)数. analyse 由于b, ...

  5. 【BZOJ】1611: [Usaco2008 Feb]Meteor Shower流星雨(bfs)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1611 一眼题,bfs. #include <cstdio> #include <c ...

  6. 在化学教学中怎么用ChemOffice

    在21世纪新课程化学教学中,有很多地方要求化学教师使用计算机和应用程序处理各类化学信息,比如课堂教学.撰写教学论文.制作多媒体课件等,这样可以有效增强教学效果.作为化学教师,在新课程的化学教学中掌握一 ...

  7. 网易AI工程师面试常见知识

  8. java并发容器(Map、List、BlockingQueue)具体解释

    Java库本身就有多种线程安全的容器和同步工具,当中同步容器包含两部分:一个是Vector和Hashtable.另外还有JDK1.2中增加的同步包装类.这些类都是由Collections.synchr ...

  9. ArcGIS Android SDK 中文标注乱码

    Android使用如下代码添加标注: TextSymbol ts = new TextSymbol(12, "名称", Color.RED);Graphic gp = new Gr ...

  10. U盘插入拔出提示

    Unit Unit1; Interface Uses Windows, Messages, SysUtils, Variants, classes, Graphics, Controls, Forms ...