首页 > 代码库 > 学习mybatis-3 step by step 篇一

学习mybatis-3 step by step 篇一

一、搭建简单mybatis-3环境(详细的中文文档)

集成开发环境:IDEA

项目:maven + mybatis-3

1、创建maven结构项目

含简单,如下图:

技术分享

下一步后,填写groupid和artifactid完成就可以了。本次引入的jar如下:

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.12</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.15</version>
        </dependency>
    </dependencies>

2、配置mybatis

  • 从 XML 中构建 SqlSessionFactory

  每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。

  • mybatis-config.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>
    <properties resource="config.properties">
        <!--<property name="driver" value="http://www.mamicode.com/dev_user"/>-->
        <!--<property name="password" value="http://www.mamicode.com/F2Fa3!33TYyg"/>-->
        <!--<property name="username" value="http://www.mamicode.com/dev_user"/>-->
        <!--<property name="password" value="http://www.mamicode.com/F2Fa3!33TYyg"/>-->
    </properties>
    <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>
    <mappers>
        <mapper resource="sqlmapper/UserMapper.xml"/>
    </mappers>
</configuration>

    以上配置文件注意几点,driver、url、username、password引用的是配置文件中的变量,以上配置引用的的是config.properties中的变量。当然也可以在<properties></properties>中填写,如注释掉的部分。如果都有的话,会有优先级问题,读取配置文件中变量的优先级高于<properties>中配置的值。

  • 属性也可以被传递到 SqlSessionFactoryBuilder.build()方法中。例如:
            Properties properties = new Properties();
            properties.load(new FileInputStream("Test.properties"));
                    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream, properties);

如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:

  • 在 properties 元素体内指定的属性首先被读取。
  • 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
  • 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。

因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的是 properties 属性中指定的属性。

 

3、MyBatis配置之settings标签

一个配置文件如下

    <settings>
        <setting name="cacheEnabled" value="false"/>
        <setting name="useGeneratedKeys" value="true"/>
        <setting name="defaultExecutorType" value="REUSE"/>
        <setting name="lazyLoadingEnabled" value="false"/>
        <setting name="defaultStatementTimeout" value="50"/>
    </settings>
  • cacheEnabled

          该配置影响的所有映射器中配置的缓存的全局开关。默认值:true

  • useGeneratedKeys

        允许 JDBC 支持自动生成主键,需要驱动兼容。 如果设置为 true 则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby)。默认值:false

  • defaultExecutorType

        配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements); BATCH 执行器将重用语句并执行批量更新。(SIMPLE REUSE BATCH),默认值:SIMPLE

  • lazyLoadingEnabled

        延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。(true | false),默认值:false

  • defaultStatementTimeout

        设置超时时间,它决定驱动等待数据库响应的秒数。

更多的setting设置参考:http://www.mybatis.org/mybatis-3/zh/configuration.html#properties

关于defaultExecutorType理解可参考:https://my.oschina.net/HuQingmiao/blog/516378

需要注意的是</settings>标签是有顺序的,不能随便放。需放在<properties>后面,一个完整有效的配置如下:

<?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>
    <properties resource="config.properties">
        <!--<property name="driver" value="http://www.mamicode.com/dev_user"/>-->
        <!--<property name="password" value="http://www.mamicode.com/F2Fa3!33TYyg"/>-->
        <!--<property name="username" value="http://www.mamicode.com/dev_user"/>-->
        <!--<property name="password" value="http://www.mamicode.com/F2Fa3!33TYyg"/>-->
    </properties>
    <settings>
        <setting name="cacheEnabled" value="false"/>
        <setting name="useGeneratedKeys" value="true"/>
        <setting name="defaultExecutorType" value="REUSE"/>
        <setting name="lazyLoadingEnabled" value="false"/>
        <setting name="defaultStatementTimeout" value="50"/>
    </settings>
    <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>
    <mappers>
        <mapper resource="sqlmapper/UserMapper.xml"/>
    </mappers>
</configuration>

 

学习mybatis-3 step by step 篇一