## ---------------------------------------------------------------
## Beanクラスの設定
## ---------------------------------------------------------------

package ${propertyList.pkgName}.dao;

import ${propertyList.pkgName}.bean.${propertyList.className};

## ---------------------------------------------------------------
## 外部参照定義 
## ---------------------------------------------------------------
import java.util.List;
import java.util.Map;
import java.util.Iterator;
import java.util.Set;

import org.itscool.commons.dao.BaseDao;
import org.itscool.commons.dao.Criteria;
import org.itscool.commons.dao.FieldMap;

// ----------------------------------------------------------------
// DB-MAP-TOOLが生成したクラスです
// ----------------------------------------------------------------
/**
 * $propertyList.note
 * @author $propertyList.author
 * 作成日 ${propertyList.date}
*/
public class ${propertyList.className}Dao extends BaseDao{
	
	/**
	 * 全データを取得します
	 * @return List 全データ
	*/
	public List getAllData(){
		Criteria crt = new Criteria(${propertyList.className}.class);
	    return select(crt);
	}
	
	/**
	 * 指定された条件のデータを取得します
	 * @param field 検索フィールド
	 * @param key 検索条件
	 * @return List 検索条件に合致するデータリスト
	*/
	public List findData(String field, String key){
		Criteria crt = new Criteria(${propertyList.className}.class);
		String columWithTableName = FieldMap.convColumWithTableName(${propertyList.className}.TABLE, field);
		crt.eq(columWithTableName, key);
		return select(crt);
	}
	
	/**
	 * 指定された条件のデータを取得します
	 * @param searchMap 検索条件リスト
	 * @return List 検索条件に合致するデータリスト
	*/
	public List findData(Map searchMap){
		Criteria crt = new Criteria(${propertyList.className}.class);
		Set keySet = searchMap.keySet();
		Iterator it = keySet.iterator();
		while(it.hasNext()){
			String field = (String)it.next();
			String key = (String)searchMap.get(field);
			
			String columWithTableName = FieldMap.convColumWithTableName(${propertyList.className}.TABLE, field);
			crt.eq(columWithTableName, key);
			if( it.hasNext() ){
				crt.and();
			}
		}
		return select(crt);
	}
	
	/**
	 * 指定された条件リストに該当する最初のデータを取得します
	 * @param searchMap 検索条件リスト
	 * @return Object 条件リストに該当する最初のデータをObject型で返します
	*/
	public Object findFirstData(Map searchMap){
		Criteria crt = new Criteria(${propertyList.className}.class);
		Set keySet = searchMap.keySet();
		Iterator it = keySet.iterator();
		while(it.hasNext()){
			String field = (String)it.next();
			String key = (String)searchMap.get(field);
			
			String columWithTableName = FieldMap.convColumWithTableName(${propertyList.className}.TABLE, field);
			crt.eq(columWithTableName, key);
			if( it.hasNext() ){
				crt.and();
			}
		}
		List list = select(crt);
		if( list.size() == 0 ){
			return null;
		}else{
			return list.get(0);
		}
	}
	
    /**
     * $property.noteを取得します
     * @return $property.propertyNameを返します
    */
    public ${propertyList.className} get${propertyList.className}(${propertyList.className} bean){
        Criteria crt = new Criteria(${propertyList.className}.class);
## ---------------------------------------------------------------
## フィールドの設定
## ---------------------------------------------------------------
#set ( $primary = $writer.parse("daoPrimary.vm", "propertyList", $propertyList) )
## ---------------------------------------------------------------
## 最後の行からカンマを取り除く
## ---------------------------------------------------------------
#if ($primary.length() > 0)
	#set ( $primary = $writer.chop($primary, 12) )
#end
$primary
	    return (${propertyList.className})select(crt).get(0);
    }

	/**
     * 指定した${propertyList.note}を登録します
     * @param bean ${propertyList.note}
     */
    public void save(${propertyList.className} bean){
        Criteria crt = new Criteria(${propertyList.className}.class);

#if ( ${propertyList.isPrimaryIdProperty} == true )
		int id;
		//外部参照キーの指定されていないプライマリーキーに対して
		//IDを自動採番します(プロパティ=id 固定)
		id = getNewIdFromAutoNumber(${propertyList.className}.TABLE);
		bean.${propertyList.primaryIdSetterString}(id);
#end
		this.insert(crt, bean);
    }
    
    /**
     * 指定した${propertyList.note}を更新します
     * @param bean ${propertyList.note}
     */
    public void update(${propertyList.className} bean){
        Criteria crt = new Criteria(${propertyList.className}.class);
## ---------------------------------------------------------------
## フィールドの設定
## ---------------------------------------------------------------
#set ( $primary = $writer.parse("daoPrimary.vm", "propertyList", $propertyList) )
## ---------------------------------------------------------------
## 最後の行からカンマを取り除く
## ---------------------------------------------------------------
#if ($primary.length() > 0)
	#set ( $primary = $writer.chop($primary, 12) )
#end
$primary
		this.update(crt, bean);
    }
    
    /**
     * 指定した${propertyList.note}を削除します
     * @param bean ${propertyList.note}
     */
    public void delete(${propertyList.className} bean){
		Criteria crt = new Criteria(${propertyList.className}.class);
## ---------------------------------------------------------------
## フィールドの設定
## ---------------------------------------------------------------
#set ( $primary = $writer.parse("daoPrimary.vm", "propertyList", $propertyList) )
## ---------------------------------------------------------------
## 最後の行からカンマを取り除く
## ---------------------------------------------------------------
#if ($primary.length() > 0)
	#set ( $primary = $writer.chop($primary, 12) )
#end
$primary
		this.delete(crt);
	}
}
