MyBatis配置文件

一、MyBatis主配置文件

image.png

1.1 屬性(properties)

MyBatis主配置文件中的properties元素的propertie子元素的value屬性的值,便可以直接定義,也能夠在主配置文件中定義而後引用,也能夠引用外部的properties文件。舉例子來講就是,以下的兩個xml的配置效果是同樣的。java

1.1.1 直接配置

<?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"></transactionManager>
            <dataSource type="pooled">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/eesy"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <mapper resource="com/mybatis/dao/UserDao.xml"></mapper>
    </mappers>
    
</configuration>

1.1.2 引用配置

<?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>
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/eesy"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </properties>
    
    <environments default="development">
        <environment id="development">
            <transactionManager type="jdbc"></transactionManager>
            <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="com/mybatis/dao/UserDao.xml"></mapper>
    </mappers>
    
</configuration>

以上兩種形式,在開發過程當中通常不會這麼用。通常是直接類路徑下(在maven工程下就是resources目錄下)定義一個properties文件,而後在MyBatis的主配置文件中引用該文件,而後就能夠在主配置文件中直接引用。以下所示:mysql

1.1.3 引用properties配置文件

1.1.3.1 properties配置文件
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/mybatis
jdbc.username = root
jdbc.password = root
1.1.3.2 MyBatis主配置文件
<?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="datasource.properties"></properties>

    <environments default="development">
        <environment id="development">
            <transactionManager type="jdbc"></transactionManager>
            <dataSource type="pooled">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/mybatis/dao/UserDao.xml"></mapper>
    </mappers>

</configuration>

1.1.3.3 目錄結構

image.png

1.1.3.4 注意事項

  1. properties標籤的resource屬性指向的類路徑下的文件(在maven工程下爲resources目錄下)。
  2. 在${jdbc.driver}中,大括號裏面的值要對應properties文件中定義的變量名,要個要求一一對應。
  3. 若是屬性在不僅一個地方進行了配置,那麼 MyBatis 將按照下面的順序來加載:sql

    1. 在 properties 元素體內指定的屬性首先被讀取。
    2. 而後根據 properties 元素中的 resource 屬性讀取類路徑下屬性文件或根據 url 屬性指定的路徑讀取屬性文件,並覆蓋已讀取的同名屬性。
    3. 最後讀取做爲方法參數傳遞的屬性,並覆蓋已讀取的同名屬性。
    4. 總結:經過方法參數傳遞的屬性具備最高優先級,resource/url 屬性中指定的配置文件次之,最低優先級的是 properties 屬性中指定的屬性。

1.2 設置(settings)

1.3 別名(typeAliases)

在MyBatis的映射配置文件中(也就是接口對應的XxxMapper.xml文件),每當指定一個java類的所屬類型時,都須要拼寫出該類的全限定類名。例以下面的xml配置所示。數據庫

<?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="com.mybatis.dao.UserDao">
    <!-- 查詢全部 -->
    <select id="findAll" resultType="com.mybatis.domain.User">
        SELECT * FROM user
    </select>

    <!-- 保存用戶 -->
    <insert id="saveUser" parameterType="com.mybatis.domain.User">
        INSERT INTO user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
    </insert>
</mapper>

如上這樣配置存在一個問題,當配置文件少的時候還好,若是配置文件的數量一旦增多,就會致使工做量激增。因此就有了給java類的全限定類名取一個簡短的別名,用別名代替全限定類名,減小沒必要要的工做量。具體操做以下。mybatis

主配置文件中使用typeAliases標籤爲pojo的全限定類名去一個別名,而後把映射配置文件中pojo的全限定類名替換成別名便可。別名能夠任意,且當使用了別名後,別名將不區分大小寫。具體配置以下。app

主配置文件dom

<?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>
    <!-- 注意configuration下的子標籤嚴格區分定義順序(使用順序) -->
    <properties resource="datasource.properties"></properties>

    <typeAliases>
        <!--
            type:用於指定pojo的全限定類名;
            alias:用於指定別名
        -->
        <typeAlias type="com.mybatis.domain.User" alias="user"></typeAlias>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="jdbc"></transactionManager>
            <dataSource type="pooled">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/mybatis/dao/UserDao.xml"></mapper>
    </mappers>
</configuration>

映射文件maven

<?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="com.mybatis.dao.UserDao">
    <!-- 查詢全部 -->
    <!-- 使用了別名後pojo的別名不區分大小寫 -->
    <select id="findAll" resultType="user">
        SELECT * FROM user
    </select>

    <!-- 保存用戶 -->
    <insert id="saveUser" parameterType="User">
        INSERT INTO user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
    </insert>
</mapper>

以上操做雖然已經能極大的簡化咱們的開發,可是,一個項目中不可能只有一兩個pojo。因此若是咱們要使用上述的方式指定定義一個項目中全部pojo的話也不現實。typeAliases下除了typeAlias子標籤外,還有一個package子標籤,該標籤的做用是爲某個指定的包下全部的pojo一塊兒取別名,默認類名即爲別名。具體以下所示。url

<?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>
    <!-- 注意configuration下的子標籤嚴格區分定義順序(使用順序) -->
    <properties resource="datasource.properties"></properties>

    <typeAliases>
        <!--
            type:用於指定pojo的全限定類名;
            alias:用於指定別名
        -->
        <typeAlias type="com.mybatis.domain.User" alias="user"></typeAlias>
        <!-- 爲com.mybatis.domain子包下的pojo一塊兒取別名,別名即爲類名 -->
        <package name="com.mybatis.domain"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="jdbc"></transactionManager>
            <dataSource type="pooled">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/mybatis/dao/UserDao.xml"></mapper>
    </mappers>
</configuration>

二、MyBatis映射配置文件

2.1 select標籤

<select id="findById" parameterType="java.lang.Integer" resultType="com.mybatis.domain.User">
  SELECT * FROM user WHERE id = #{id}
</select>

屬性說明spa

  • id:當前select標籤在當前映射配置文件中的惟一標識符;
  • parameterType:參數類型,若是爲非基本類型的pojo,則須要寫出pojo的全限定類名(若是取了別名,可使用別名),若是爲基本類型,能夠直接寫全限定類名,也能夠直接寫類名,若是沒有則省略;
  • resultType:返回值類型,若是爲非基本類型的pojo,則須要寫出pojo的全限定類名(若是取了別名,可使用別名),若是爲基本類型,能夠直接寫全限定類名,也能夠直接寫類名,若是沒有則省略;

2.2 insert標籤

<insert id="saveUser" useGeneratedKeys="true" keyColumn="id" keyProperty="id"  parameterType="com.mybatis.domain.User">
    INSERT INTO user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
</insert>

屬性說明

  • id:當前select標籤在當前映射配置文件中的惟一標識符;
  • parameterType:參數類型,若是爲非基本類型的pojo,則須要寫出pojo的全限定類名(若是取了別名,可使用別名),若是爲基本類型,能夠直接寫全限定類名,也能夠直接寫類名,若是沒有則省略;
  • useGeneratedKeys:開啓主鍵回寫(當咱們向數據庫插入數據時,主鍵是設置的自增的,可是咱們插入好數據庫後,咱們但願獲得剛剛插入的數據的主鍵,mybatis經過useGeneratedKeys、keyColumn、keyProperty能夠實現該需求);
  • keyColumn:keyColumn:主鍵列名(既數據庫表中的列名);
  • keyProperty:主鍵對應的屬性名(實體中的屬性名);

2.3 updata標籤

<update id="updateUser" parameterType="com.mybatis.domain.User">
    UPDATE user
    SET username = #{username},
        birthday = #{birthday},
        sex = #{sex},
        address = #{address}
    WHERE id = #{id}
</update>

屬性說明

  • id:當前select標籤在當前映射配置文件中的惟一標識符;
  • parameterType:參數類型,若是爲非基本類型的pojo,則須要寫出pojo的全限定類名(若是取了別名,可使用別名),若是爲基本類型,能夠直接寫全限定類名,也能夠直接寫類名,若是沒有則省略;

2.4 delete標籤

<delete id="deleteUser" parameterType="java.lang.Integer">
    <!-- 當只有一個參數時,參數名稱能夠任意 -->
    DELETE FROM user WHERE id = #{id}   
</delete>

2.5 #{}和${}的區別

2.5 resultMap標籤

相關文章
相關標籤/搜索