Mybatis使用のパラメータ転送


Mybatis使用のパラメータ転送
 
一:概要
      
       主にMybatisが伝達パラメータをどのようにマッピングしたかを記録しています.4つの種類に分けて記録します.1、java基本タイプの伝達、2、Javaオブジェクト形式の伝達3、マルチパラメータ伝達4、セットタイプのパラメータ伝達
 
具体的な方式
 
      2.1 java基本タイプ
 
       整形を例に、マッピングファイル:
 
    <select id="getAuthorById" parameterType="int" resultType="org.alien.mybatis.samples.model.Author">
        SELECT *
        FROM author
        WHERE id = #{id}
    </select>
       マッピング方法:
    Author getAuthorById(int id);
       テストコード:
 
    private AuthorMapper authorMapper;

    public AuthorMapperTest() {
        authorMapper = MybatisUtil.getSqlSession().getMapper(AuthorMapper.class);
    }

    @Test
    public void testGetAuthorById() throws Exception {
        Author author = authorMapper.getAuthorById(1);
        Assert.assertNotNull(author);
    }
      2.2.javaオブジェクト
      
       Authorクラスを例に、マッピングファイル:
    <select id="getAuthorWithValidate" parameterType="org.alien.mybatis.samples.model.Author"
            resultType="org.alien.mybatis.samples.model.Author">
        SELECT *
        FROM author
        WHERE username = #{username} AND password = #{password}
    </select>
       マッピング方法:
    Author getAuthorWithValidate(Author author);
       テスト方法:
 
    @Test
    public void testGetAuthorWithValidate() throws Exception {
        Author author = authorMapper.getAuthorWithValidate(new Author("star_year", "alien"));
        Assert.assertNotNull(author);
    }
      2.3マルチパラメータ
 
       マルチパラメータは2種類に分けられます.1、パラメータをMapに入れます.2、Mybatisの注釈@Paramで指定します.
 
       Mapタイプマッピングファイル:
 
    <select id="getAuthorByMultiCondition" parameterType="hashMap" resultType="author">
        SELECT *
        FROM
            (
                SELECT
                    A.*,
                    ROWNUM RN
                FROM (SELECT *
                      FROM author
                      WHERE username LIKE '%' || #{username} || '%') A
                WHERE ROWNUM <= #{endRecord}
            )
        WHERE RN >= #{startRecord}
    </select>
       Mapタイプマッピング方法:
 
    List<Author> getAuthorByMultiCondition(Map<String, Object> map);
       Mapタイプのテスト方法:
 
    @Test
    public void testGetAuthorByMultiCondition() throws Exception {
        Map<String, Object> map = new HashMap<>();
        map.put("startRecord", 0);
        map.put("endRecord", 10);
        map.put("username", "star_year");
        List<Author> authors = authorMapper.getAuthorByMultiCondition(map);
        Assert.assertNotNull(authors);
    }
       @パラメータタイプマッピングファイル:
 
    <select id="getAuthorByUsername" resultType="Author">
        SELECT *
        FROM author
        WHERE username LIKE '%' || #{username} || '%' AND email LIKE '%' || #{email} || '%'
    </select>
       @Paramタイプマッピング方法:
 
    List<Author> getAuthorByUsername(@Param("username") String username, @Param("email") String email);
       @パラメータタイプ試験方法:
 
    @Test
    public void testGetAuthorByUsername() throws Exception {
        List<Author> authorList = authorMapper.getAuthorByUsername("star_year", "46185");
        Assert.assertNotNull(authorList);
    }
      2.4セットタイプパラメータ
 
       一連のIDに基づいて、いくつかの操作を行うのが一般的です.
       Authorクラスを例に、マッピングファイル:
    <select id="getAuthorByIdCollection" resultType="author">
        select * from author where id in
        <foreach collection="list" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>
       マッピング方法:
    List<Author> getAuthorByIdCollection(List<Integer> idList);
       テスト方法:
 
    @Test
    public void testGetAuthorByIdCollection() throws Exception {
        List<Integer> idList = new ArrayList<>();
        idList.add(1);
        idList.add(2);
        List<Author> authorList = authorMapper.getAuthorByIdCollection(idList);
        Assert.assertNotNull(authorList);
    }
三、{paramName}と璢{paramName}は違います.
        このパラメータを使用すると、Mybatisはこのパラメータを文字列として認識します.例えば、着信パラメータが「Smith」であれば、SQL(Select*from emyhere name=Naement)で使用すると、Select*from mywhere=Schementに変換されます.使うとSelect*from emp where name=Smithに変換されます.       再度、安全性を考慮して、xiをできるだけ使用して参参を伝えることができます.これはSQL注入の問題を効果的に防ぐことができます.
四:補充
        Mybatisディレクトリ
        githubアドレス:https://github.com/andyChenHuaYing/scattered-items/tree/master/items-mybatis         ソースのダウンロード先:http://download.csdn.net/detail/chenghuaying/8713311
 
       Authorクラス:
public class Author {
    private int id;
    private String username;
    private String password;
    private String email;
    private String bio;
    private String favouriteSection;
  
    //getter setter ...
}