(2).Mybatisプロファイルの最適化


最適化1:
前回Mybatisを使用してデータベースを操作するCRUD操作の場合、使用するデータベースはMySQLであり、データベースの構成情報はmybatis-cfgに直接書かれている.xmlファイルでは、Oracle、SqlServerなどの他のデータベースに接続する場合、mybatis-cfgを大幅に変更する必要があります.xmlファイルのdataSourceラベルの情報は、メンテナンスに不利でエラーが発生しやすい.解決策:データベースの構成情報をプロパティファイルに書き込むmybatis-cfg.xmlファイルにプロパティファイルを導入します.これにより、プロファイルにインポートしたプロパティファイル名を変更するだけで済みます.srcの下にfileを新規作成しmysqlDBと名付けます.properties、プロパティファイルの内容:
username=root
password=
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql:///mybatis1?characterEncoding=utf-8

mybatis-cfg.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="mysqlDB.properties"/>

    <!--         environment    ,              -->
    <environments default="dev">
        <environment id="dev">
            <transactionManager type="jdbc" />
            <dataSource type="pooled">
                <!--  EL                 ,${}         key  -->
                <property name="driver" value="${driverClass}"/>
                <!--     characterEncoding=utf-8           -->
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/qcc/mapping/userMapper.xml"/>
    </mappers>
</configuration>

最適化2:
エンティティクラスのマッピングファイルでは、sql文のparameterTypeまたはresultTypeは、エンティティクラスの全クラス名comと書く.qcc.entity.User、冗長、面倒;解決策:mybatis-cfg.xmlファイルでは、エンティティクラスに対応する別名を設定、comの代わりにUserを使用する.qcc.entity.User、はっきりしていて、簡潔です.2つの方法:1.<typeAlias type="com.qcc.entity.User" alias="User"/>ラベルを直接使用して、単一のエンティティクラスの別名を指定します.2.一括パッケージ内のすべてのエンティティークラスの別名<package name="com.qcc.entity"/>を指定します.
<?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="mysqlDB.properties"/>
    <typeAliases>
        <!--                               ,    package    -->
        <typeAlias type="com.qcc.entity.User" alias="User"/>
        <!-- com.qcc.entity                   -->
        <package name="com.qcc.entity"/>
    </typeAliases>
    <!--         environment    ,              -->
    <environments default="dev">
        <environment id="dev">
            <transactionManager type="jdbc" />
            <dataSource type="pooled">
                <!--  EL                 ,${}         key  -->
                <property name="driver" value="${driverClass}"/>
                <!--     characterEncoding=utf-8           -->
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/qcc/mapping/userMapper.xml"/>
    </mappers>
</configuration>

userMapper.xmlファイルのparameterTypeとresultTypeはcomの代わりに別名Userを使用する.qcc.entity.Userはコード作成を簡略化する.
<?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,namespace       +  sql      ,      -->
<mapper namespace="com.qcc.mapping.userMapper">
    <!-- id     ,  mybatis             sql  -->
    <!-- parameterType resultType    User     com.qcc.entity.User     -->
    <select id="getUser" parameterType="int" resultType="User">  
        select id, name, phone, email from users where id = #{id}  <!--  #{}              -->
    </select>
    <select id="getAll" resultType="User">
        select id, name, phone, email from users
    </select>
    <insert id="addUser" parameterType="User">
        insert into users(name, phone, email) values(#{name}, #{phone}, #{email})
    </insert>
    <update id="updateUser" parameterType="User">
        update users set name=#{name}, phone=#{phone}, email=#{email} where id=#{id}
    </update>
    <delete id="delUser" parameterType="int">
        delete from users where id = #{id}
    </delete>
</mapper>

このようにしてxmlファイルではcomが使用されます.qcc.entity.Userの場所は別名Userで代用できます.