【Javaお勉強日記】mybatisを使ってDBから情報を取得するところまで

いっこずつ整理していきましょうね。

1:サービスを作る

// BookService.java
public class BookService{
    BookRepository bookRepository;
    public BookService(BookRepository bookRepository){
        this.bookRepository = bookRepository;
    }
    // 中略...
    public boolean isExistBook(String bookCode){
        return bookRepository.isExist(bookCode);
    }       
}

サービスクラスを作って、その中に「このコードの本は存在しているか」をチェックするメソッドを置きます。

メソッド内ではリポジトリを呼ぶだけにしておきます。

メソッド内でリポジトリを呼べるようにコンストラクタインジェクションしておきます。

2:java側のrepositoryを作る

// BookRepository.java

import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

@Mapper
@Repository
public interface BookRepository {
    String isExist(String bookCode);
}

インターフェイスとしてrepositoryを作って、MapperとRepositoryアノテーションを付与。中には

結果を受け取りたい型名 メソッド名(引数の型名 引数名)

という形でメソッドだけ定義する。(裏で良い感じにxmlと紐付けて、DBから取ってきてくれるようにしてくれる)(DB接続の設定は別のファイルに書いてある)(そっちのファイルの書き方は今回は横に置いておく)

3:xmlを書く

src>main>resourcesフォルダ内に、javaフォルダ配下と同じようにフォルダを構成して、BookRepository.xmlを配置する

例えば、BookRepository.javaが

src>main>java>application>repository>book

フォルダに入っていたら、xmlファイルは

src>main>resources>application>repository>book

フォルダに入れる。

<?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.main.java.application.repository.book.BookRepository">
	<select id="isExist" parameterType="string">
        SELECT title FROM sample.database
        WHERE bookcode = #{bookcode}
	</select>
	
</mapper>

select文のxmlはこんな感じで。

最初にmapperタグ内のnamespaceにインターフェイスファイルのパスを書く。これでインターフェイスと紐付きます。

次に、selectタグを使って、idにメソッド名、parameterTypeに引数の型を書いておきます。引数が二つあるときはparameterTypeつかえないので注意。

戻り値の型を書く必要はなく、インターフェイスで指定しておいた型に合わせて良い感じに変換して入れてくれます。

インターフェイスで戻り値の型にlongやintを指定しておくと、取得件数だけ返してくれます。あるなしチェックならそれでもOKかも。

自動変換じゃ無理な、複雑なマッピングが必要な場合、自作クラス用意してマッパーを書けば紐付けもしてくれますが、その辺はまた必要になったらまとめます。とりあえず最低限select文を送るところまで。

この記事が気に入ったらサポートをしてみませんか?