• MyBatis是什么?

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

  • MyBatis核心--SqlSessionFactory的实例

SqlSessionFactory 实例通过 SqlSessionFactoryBuilder来获得,SqlSessionFactoryBuilder能够从XML配置文件或者通过自 定义编写的配置类( Configuration class),来创建一个SqlSessionFactory实例。

  • XML中创建 SqlSessionFactory 实例


XML中创建SqlSessionFactory实例非常简单。建议您使用类资源路径( classpath
resource)来加载配置文件,但是您也能够使用任何方式, 包括文本文件路径或者以file:// 开

URL 的方式。 MyBatis包括一个叫做Resources 的工具类( utility class), 其中包含了一系
列方法,使之能简单地从classpath 或其它地方加载配置文件。
String resource = "org/mybatis/example/Configuration.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMapper = new SqlSessionFactoryBuilder().build(reader);
XML配置文件包含MyBatis框架的核心设置,包括获取数据库连接的DataSource实例,和包
括决定事务作用域范围和控制的事务管理等。您将能够在后面的章节中找到详细的XML配置,在
这里我们先展示一个简单的例子:

<?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>

<environments default="development">

<environment id="development">

<transactionManager type="JDBC"/>

<dataSource type="POOLED">

<property name="driver" value="${driver}"/>

<property name="url" value="${url}"/>

<property name="username" value="${username}"/>

<property name="password" value="${password}"/>

</dataSource>

</environment>

</environments>

<!--注册mapper-->

<mappers>

<mapper resource="org/mybatis/example/BlogMapper.xml"/>

</mappers>

</configuration>

虽然XML配置文件中还有很多其它的配置细节,但是,上面的示例显示了最重要的部分。注 意 XML配置文件的头部,会使用DTD 验证文档来验证该XML配置文件。 body 部分的environment 元素,包含了事务管理和连接池配置。 Mappers 元素指定了映射配置文件--包含SQL 语句和映射 定义的XML文件。

  • 如何不使用XML来创建SqlSessionFactory

如果您喜欢直接通过java代码而不是通过XML创建配置选项,或者想创建您自己的配置生成 器。 MyBatis 提供了一个完整的配置类( Configuration class),它提供了与XML文件相同的配 置选项。 TransactionFactory transactionFactory = new JdbcTransactionFactory();

Environment environment = new Environment("development", transactionFactory, dataSource);

Configuration configuration = new Configuration(environment); configuration.addMapper(BlogMapper.class);

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

请注意, 这种方式下的配置添加一个映射类( mapper class) 。映射类是包含SQL映射注解 的Java 类, 从而避免了使用XML。 但是,由于注解的一些局限性以及MyBatis 映射的复杂性, XML仍然是一些高级的映射功能(如嵌套连接映射, Nested Join Mapping)所必须的方式。基于 这个原因,如果存在XML文件, MyBatis自动寻找并加载这个XML文件。在这种情况下, BlogMapper.xml 将会被类路径下名称为BlogMapper.class 的类加载。

  • 从 SqlSessionFactory 获取SqlSession

现在您已经创建了一个SqlSessionFactory(指上面的sqlMapper),正如它名字暗示那样,
您可以通过它来创建一个SqlSession 实例。 SqlSession 包含了所有执行数据库SQL 语句的方
法。您能够直接地通过SqlSession 实例执行映射SQL语句。例如:
SqlSession session = sqlMapper.openSession();

try {
Blog blog = (Blog) session.selectOne(
"org.mybatis.example.BlogMapper.selectBlog", 101);
}

finally {
session.close();
}

虽然这种方法很有效, MyBatis以前版本的用户对此也可能很熟悉,但现在有一个更简便的
方式,那就是对给定的映射语句,使用一个正确描述参数与返回值的接口(如
BlogMapper.class),您就能更清晰地执行类型安全的代码,从而避免错误和异常。 如:

SqlSession session = sqlSessionFactory.openSession();

try {
BlogMapper mapper = session.getMapper(BlogMapper.class);

Blog blog = mapper.selectBlog(101);
}

finally {
session.close();
}

QL 映射 XML 文件 MyBatis真正强大之处就在这些映射语句,也就是它的魔力所在。对于它的强大功能, SQL映 射文件的配置却非常简单。如果您比较SQL映射文件配置与JDBC代码,您很快可以发现,使用 SQL映射文件配置可以节省95%的代码量。 MyBatis被创建来专注于SQL,但又给您自己的实现极 大的空间。 如果initial_context没有配置,那么数据源就会直接从InitialContext进行查 找,如: DataSource ds = (DataSource) initialContext.lookup(data_source);

  • SQL 映射XML文件只有一些基本的元素需要配置,并且要按照下面的顺序来定义(in the
    order that they should be defined):


• cache –在特定的命名空间配置缓存。

cache-ref – 引用另外一个命名空间配置的缓存.
• resultMap – 最复杂也是最强大的元素,用来描述如何从数据库结果集里加载对象。
• parameterMap – 不推荐使用! 在旧的版本里使用的映射配置,这个元素在将来可能会被
删除,因此不再进行描述。
• sql – 能够被其它语句重用的SQL块。

insert –INSERT 映射语句
• update –UPDATE 映射语句

delete –DELEETE 映射语句

select –SELECT 映射语句
接下来的章节将会对每一个元素进行描述。
Select元素
Select 是 MyBatis中最常用的元素之一。除非您把数据取回来,否则把数据放在数据库是没
什么意义的,因此大部分的应用查询数据远多于修改数据。对每一次插入、修改、删除数据都可
能伴有大量的查询。这是MyBatis基本设计原则之一,也就是为什么把这么多的焦点和努力放在
查询和结果集映射上。

对简单的查询, select 元素的配置是相当简单的,如:
<select id=” selectPerson” parameterType=” int” resultType=” hashmap” >
SELECT * FROM PERSON WHERE ID = #{id}
</select>
这条语句叫做selectPerson,以int 型(或者Integer 型)作为参数,并返回一个以数据库
列名作为键值的HashMap。
注意这个参数的表示方法: #{id}
它告诉MyBatis 生成PreparedStatement参数。

对于JDBC,像这个参数会被标识为“ ?” ,
然后传递给PreparedStatement,像这样:
// Similar JDBC code, NOT MyBatis…
String selectPerson = “ SELECT * FROM PERSON WHERE ID=?” ;
PreparedStatement ps = conn.prepareStatement(selectPerson);
ps.setInt(1,id);

当然,如果单独使用JDBC 去提取这个结果集并把结果集映射到对象上的话,则需要更多的代 码,而这些, MyBatis 都已经为您做到了。关于参数和结果集映射,还有许多要学的。

select 语句有很多的属性允许您详细配置每一条语句。
<select
id=”selectPerson”
parameterType=” int”
parameterMap=”deprecated”
resultType=” hashmap”
resultMap=” personResultMap”
flushCache=” false”
useCache=” true”
timeout=” 10000”
fetchSize=” 256”
statementType=” PREPARED”
resultSetType=” FORWARD_ONLY”
>

Insert、 update、 delete元素
数据修改语句insert、 update和delete的配置使用都非常相似:
<insert
id="insertAuthor"
parameterType="domain.blog.Author"
flushCache="true"
Attribute Description
id 在这个命名空间下唯一的标识符,可被其它语句引用
parameterType 传给此语句的参数的完整类名或别名
parameterMap 不推荐使用。这个参数将来可能被删除。

resultType --语句返回值类型的完整类名或别名。注意,如果返回的是集合

collections),那么应该是集合所包含的具体子类型,而不是集
合本身。 resultType 与resultMap 不能同时使用

resultMap --引用的外部定义的resultMap。结果集映射是MyBatis 中最强大的特性,同时
又非常好理解。许多复杂的映射都可以轻松解决。

flushCache --如果设为true,则会在每次语句调用的时候就会清空缓存。 select 语句默认
设为false

useCache-- 如果设为true,则语句的结果集将被缓存, select 语句默认设为false

timeout --设置超时时间,默认没有设置,由驱动器自己决定

fetchSize --设置从数据库获得记录的条数,默认没有设置,由驱动器自己决定

statementType-- 可设置为STATEMENT, PREPARED 或CALLABLE 中的任意一个,告诉MyBatis 分
别使用Statement, PreparedStatement或者CallableStatement。默认:
PREPARED

resultSetType -- FORWARD_ONLY 、 SCROLL_SENSITIVE 、 SCROLL_INSENSITIVE 三个中的任意一
个。默认没有设置,由驱动器自己决定。

MyBatis3学习--来源自用户指南的更多相关文章

  1. Jersey用户指南学习笔记1

    Jersey用户指南是Jersey的官方文档, 英文原版在这:https://jersey.github.io/documentation/latest/index.html 中文翻译版在这:http ...

  2. Gradle用户指南

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

  3. Vivado Design Suite用户指南之约束的使用第二部分(约束方法论)

    Constraints Methodology(约束方法论) 关于约束方法论 设计约束定义了编译流程必须满足的要求,以使设计在板上起作用. 并非所有步骤都使用所有约束在编译流程中. 例如,物理约束仅在 ...

  4. 《Apache Velocity用户指南》官方文档

    http://ifeve.com/apache-velocity-dev/ <Apache Velocity用户指南>官方文档 原文链接   译文连接 译者:小村长  校对:方腾飞 Qui ...

  5. Celery-4.1 用户指南: Calling Tasks(调用任务)

    基础 本文档描述 Celery 中任务实例和 Canvas 使用的统一 “Calling API”. API 中定义了一个执行选项的标准集,以及三个方法: - apply_async(args[, k ...

  6. (转)新手学习System Verilog & UVM指南

    从刚接触System Verilog以及后来的VMM,OVM,UVM已经有很多年了,随着电子工业的逐步发展,国内对验证人才的需求也会急剧增加,这从各大招聘网站贴出的职位上也可以看出来,不少朋友可能想尽 ...

  7. CVAT 用户指南

    用户指南 计算机视觉标注工具(CVAT)是基于 Web 为计算机视觉算法标注视频和图像的在线工具. 它的灵感来自Vatic免费的.在线的.交互式的视频注释工具. CVAT有许多强大的功能: 在关键帧之 ...

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

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

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

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

随机推荐

  1. SVN使用手册

    安装Tortoise SVN Icon TortoiseSVN 1.7版本及之后与之前的版本有很大的变化,主要区别如下: 1.7以前的版本会在每个目录中生成一个.svn的隐藏目录.1.7及以后的版本, ...

  2. js float 数据相加,有的正确,有的不对

    转:http://bbs.csdn.net/topics/360259080 //浮点数加法运算function FloatAdd(arg1,arg2){    var r1,r2,m;    try ...

  3. 流媒体测试笔记记录之————阿里云监控、OBS、FFmpeg拉流和推流变化比较记录

    OBS设置视频(512kbps)和音频(128kbps)比特率 阿里云监控结果: 使用FFmpeg拉流到Nginx 服务器测试比特率 第二次测试,修改视频和音频比特率 OBS设置 阿里云监控 Ngin ...

  4. indexOf 用法

    一.字符串的IndexOf()方法: (括号里的为子字符串) 搜索在该字符串上是否出现了作为参数传递的子字符串,如果找到子字符串,则返回子字符串在该字符串上出现的起始位置 (0表示第一个字符,1表示第 ...

  5. ROS学习笔记(六)——创建、编译包

    $ cd ~/catkin_ws #如果新开一个终端,就需要先吧ROS的工作空间配置好 $ source devel/setup.bash #工作空间的环境配置 #正式开始创建包 $ catkin_c ...

  6. hive修改 表/分区语句

    参考 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterTable% ...

  7. dos2unix 命令

    最近在学习shell编程,可是在<Linux程序设计>指定的网站上下载了源码,使用的时候却一直出问题.提示:"bash: ./here1:/bin/sh^M:损坏的解释器: 没有 ...

  8. jquery实现on/off开关按钮

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  9. loadrunner随笔1

    快捷键: 注释快捷键:  ctrl+alt+c 取消注释快捷键:ctrl+alt+u 开始录制快捷键: ctrl+r 运行时设置快捷键: f4 录制设置: ctrl + f7 查找和替换:ctrl + ...

  10. VHDL的参数写在一个vhd文件里

    1 参数文件top_pkg.vhd