27 Oktober 2017

Mybatis membuat mapper.xml menggunakan parameter lebih dari satu

Ketika menggunakan framework Mybatis atau dikenal juga dengan iBatis menggunakan mapper xml dengan satu parameter sudah lazim, karena ketika kita mengenerate mybatis maka mybatis generator secara otomatis membuat file-file generator seperti file dao domain mapper.java dan mapper.xml.
Masalah terjadi ketika kita hendak membuat suatu kondisi atau query yang mengharuskan ada lebih dari satu parameter di dalamnya,



contoh query biasa mybatis:

 <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select * from students where students_id = #{students_id,jdbcType=INTEGER}
  </select>

sedangkan query yang kita ingikan adalah

select * from students where students_id = #{students_id,jdbcType=INTEGER} and name= #{name,jdbcType=STRING}

disini ada kebingungan parameter type apa yang digunakan, karena kita menggunakan dua buah parameter yang type datanya berbeda.

maka langkah-langkah yang harus kita lakukan adalah :

Pertama ubah parameterType menjadi "map" dan masukan parameter satunya.

  <select id="selectByPrimaryKey" parameterType="map" resultMap="BaseResultMap">
select * from students where students_id = #{students_id,jdbcType=INTEGER} and name = #{students_id,jdbcType=INTEGER}
  </select>

Kedua pada class mapper.java tambahkan @Param dan masukan juga parameter yang satunya.

import com.project.domain.module.Student;
import org.apache.ibatis.annotations.Param;

import java.util.List;
public interface StudentMapper {
 public List<Student> selectByPrimaryKey(@Param("student_id") Integer student_id,
                                                                        @Param("name") String name);
}
selanjutnya , karena kita sudah menggunakan dua buah parameter maka kita juga harus mengubah interface dari class service dan class service implementasinya (disesuaikan) 


Semoga membantu

Answer HackerRank Cat and Mouse

Two cats and a mouse are at various positions on a line. You will be given their starting positions. Your task is to determine which cat w...