m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

doma2で部分一致検索を行う

Doma2で部分一致検索する際

%とかを任意で設定するのは止めたい

組み込み関数を使う

名前 関数名
前方一致 prefix where name like /* @prefix(name) */'smith'
後方一致 suffix where name like /* @suffix(name) */'smith'
前方後方一致 infix where name like /* @infix(name) */'smith'

Dao

KeiyakuDao.java
package com.example.dao;

import java.util.List;

import org.seasar.doma.Dao;
import org.seasar.doma.Select;

import com.example.config.AppConfig;
import com.example.entity.Keiyaku;
import com.example.entity.KeiyakuItem;

@Dao(config = AppConfig.class)
public interface KeiyakuDao {
	
	@Select
	List<KeiyakuItem> findKeiyakuMeisaiAll();
	
	@Select
	List<Keiyaku> findNameStartSearchAll(String name);
	
	@Select
	List<Keiyaku> findNameEndSearchAll(String name);
	
	@Select
	List<Keiyaku> findNameContainSearchAll(String name);
	
}

SQL

findNameStartSearchAll.sql
select
	*
from
	keiyaku
where
	where name like /* @prefix(name) */'smith'
findNameEndSearchAll.sql
select
	*
from
	keiyaku
where
	where name like /* @suffix(name) */'smith'
findNameContainSearchAll.sql
select
	*
from
	keiyaku
where
	where name like /* @infix(name) */'smith'

実行結果

実行時のSQLを記載
select
	*
from
	keiyaku
where name like 'hoge%'

select
	*
from
	keiyaku
where name like '%hoge'

select
	*
from
	keiyaku
where name like '%hoge%'

わかったこと

  • 部分一致検索にはdoma2の組み込み関数を使用することで自動的に%などを設定してくれる