【MyBatisラーニング06】入力マッピングと出力マッピング


前のいくつかのブログの例でもmybatisの入力マッピングと出力マッピングの姿が見えますが、システム的なまとめはありません.このブログは主にこの2つをまとめています.mybatisでは入力マッピングと出力マッピングが基本データ型、hashmapまたはpojoのパッケージ型であることが知られています.ここでは主にpojoパッケージ型の使用をまとめます.これは開発でよく使われているからです.
1.入力マッピング
入力マッピングは、マッピングファイルでparameterTypeで入力パラメータを指定するタイプで、タイプは単純タイプ、hashmap、pojoのパッケージタイプであってもよい.現在、複雑なクエリー要件があると仮定します.ユーザー情報の総合クエリーを完了するには、クエリー条件が複雑である必要があります(商品や注文などのユーザー情報、その他の情報が含まれている可能性があります).では、単純にUserをインポートするだけではだめです.まず、クエリー条件に基づいて、新しいpojoをカスタマイズしなければなりません.このpojoにはすべてのクエリー条件が含まれています.
1.1梱包タイプpojoの定義
UserQueryVoクラスを定義し、クエリーする条件をパッケージします.ここでは、単純化のため、他のクエリー条件は追加されません.UserQueryVoには、複雑なクエリー条件がUserに含まれていると仮定したUserが含まれています.
public class UserQueryVo {

    //             

    //      ,      User     
    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }   

    //           ,    、   
    //...... 
}

1.2 UserMapperを構成する.xmlマッピングファイル
私たち自身のpojoを定義したら、UserMapが必要です.xmlマッピングファイルでクエリーを構成するstatementは、次のとおりです.
<select id="findUserList" parameterType="mybatis.po.UserQueryVo" resultType="mybatis.po.User">
    select * from user where user.sex = #{user.sex} and user.username like '%${user.username}%'
</select>

入力したparameterTypeの値は私たちが自分で定義したpojoであり、出力はUserであることがわかります.もちろん、ここのUserは別のユーザーがカスタマイズしたpojoに変えることもできます.ユーザーに必要な条件を含めて、Userだけでなく、何でもいいです.次にクエリ条件はOGLL式を使用して、UserQueryVoの対応する属性を取り出します.そしてSqlMapperConfigでxmlにこのUserMapperを配置します.xmlマッピングファイル.
1.3 Mapperインタフェースの定義
public interface UserMapper {

    //      

    //        
    public List<User> findUserList(UserQueryVo userQueryVo) throws Exception;
}   

ここまで、カスタムpojo入力マッピングを作成しましたが、実際には難しくありません.このプログラムが正しいかどうかをテストします.
@Test
public void testFindUserList() throws Exception {

    SqlSession sqlSession = sqlSessionFactory.openSession();
    //  UserMapper  ,mybatis    mapper    
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

    //      ,      
    UserQueryVo userQueryVo = new UserQueryVo();
    User user = new User();
    user.setSex(" ");
    user.setUsername("   ");
    userQueryVo.setUser(user);

    //  userMapper   
    List<User> list = userMapper.findUserList(userQueryVo);
    System.out.println(list);
}

入力マッピングは比較的簡単で,それほど歪門邪道がない東東~出力マッピングに関する東東をまとめてみる.
2.出力マッピング
出力マッピングにも同様に多くの中オブジェクトタイプがありますが、ここでは主に出力pojoオブジェクトについてまとめます.mybatisの出力マッピングに関連するresultTypeはもう熟睡していません.以下の博文ではすでに述べていますが、ここでは主に別のresultMapの使い方をまとめます.resultTypeでマッピングを出力する場合、クエリされたカラム名とpojoの対応する属性名が一致してこそ正しいマッピングが可能であり、一致しないとマッピングエラーが発生することを知っています.でも一致しなかったら?この問題をどう解決すればいいですか.これでresultMapを使用してマッピングされます.マッピングファイルにsql文:SELECT id_があるとします.username username_ FROMUSER WHERE id=#{id}というsql文から分かるように、idとusernameの2列がクエリされていますが、別名が付けられています.つまり、現在resultTypeでUserにマッピングされていると問題になるので、クエリ結果列とUserの属性の間のマッピングをresultMapを定義します.
2.1 resultMapの定義
まずresultMapを定義します.次のようにします.
<resultMap type="user" id="userResultMap">
    <id column="id_" property="id"/>
    <result column="username_" property="username"/>
</resultMap>

resultMapのいくつかのプロパティについて、その役割を簡単に説明します.<resultMap>のtype属性はresultMapが最終的にマッピングしたjavaオブジェクトタイプを表します.上では別名を使用していますが、別名が定義されていない場合は、完全限定名<resultMap>のid属性を使用する必要があります.このresultMapに対する一意の識別です.<resultMap>のサブタブ<id>は、idがプライマリ・キーであるため、クエリ結果セットの一意の識別子を表す.<resultMap>のサブタブ<result>は、クエリ結果セットの一般名マッピングの定義を表す.サブラベルのcolumnプロパティ:クエリーされたカラム名を表すサブラベルのpropertyプロパティ:上のtypeで指定したpojoタイプのプロパティ名を表す
2.2 UserMapperを構成する.xmlマッピングファイル
<select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">
    SELECT id id_,username username_ from user where id = #{id}
</select>

2.3 Mapperインタフェースの定義
public interface UserMapper {

    //      

    //  id      ,  resultMap  
    public User findUserByIdResultMap(int id) throws Exception;
}   

resultMapの構成とインタフェースの処理が終わったら、テストプログラムを書いてテストします.
@Test
public void testFindUserByIdResultMap() throws Exception {

    SqlSession sqlSession = sqlSessionFactory.openSession();
    //  UserMapper  ,mybatis    mapper    
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

    User user = userMapper.findUserByIdResultMap(1);
    System.out.println(user);
}

最後の結果から,印刷されたuserではsexとusernameのみが値を有し,その他はnullであり,sqlではこの2つの属性しか持たないため正常であることが分かった.最後に、resultTypeを使用して出力マッピングを行い、クエリされたカラム名とpojoのプロパティ名が一致している場合にのみ、そのカラムをマッピングできます.クエリされたカラム名とpojoのプロパティ名が一致しない場合は、resultMapを定義してカラム名とpojoのプロパティ名のマッピング関係を行います. 
関連情報:http://blog.csdn.net/column/details/smybatis.html 学習ノートのソースコードのダウンロードアドレス:https://github.com/eson15/MyBatis_Study
-分かち合い、共に進歩する!-詳細については、以下を参照してください.http://blog.csdn.net/eson_15