<?xml version="1.0" encoding="UTF-8"?>
<document xmlns="http://maven.apache.org/XDOC/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
	<properties>
		<title>基本型</title>
	</properties>
	<body>
		<section name="目次">
			<ul>
				<li><a href="#概要">概要</a></li>
				<li><a href="#基本型の種類">基本型の種類</a>
					<ul>
						<li><a href="#日付時刻型">日付・時刻型</a></li>
					</ul>
				</li>
				<li><a href="#利用例">利用例</a>
					<ul>
						<li><a href="#エンティティクラス">エンティティクラス</a></li>
						<li><a href="#ドメインクラス">ドメインクラス</a></li>
						<li><a href="#Daoインタフェース">Daoインタフェース</a></li>
					</ul>
				</li>
			</ul>
		</section>
		<section name="概要">
			<p>
				Domaでは、データベースのカラムにマッピング可能なJavaの型を基本型と呼びます。
			</p>
			<p>
				基本型は、<a href="domain.html">ドメインクラス</a>の値型や<a href="entity.html">エンティティクラス</a>の永続フィールドの型として使用されます。
				また、<a href="dao.html">Daoインタフェース</a>のメソッドのパラメータや戻り値にも使用されます。
			</p>
		</section>
		<section name="基本型の種類">
			<p>
				基本型には以下の種類があります。
			</p>
			<ul>
				<li>プリミティブ型とそのラッパー型（ただし、<code>char</code>と<code>java.lang.Character</code>は除く）</li>
				<li>列挙型</li>
				<li>byte[]</li>
				<li>java.lang.String</li>
				<li>java.math.BigDecimal</li>
				<li>java.math.BigInteger</li>
				<li>java.sql.Date</li>
				<li>java.sql.Time</li>
				<li>java.sql.Timestamp</li>
				<li>java.sql.Array</li>
				<li>java.sql.Blob</li>
				<li>java.sql.Clob</li>
				<li>java.sql.NClob</li>
				<li>java.util.Date</li>
			</ul>
			<subsection name="日付・時刻型">
				<p>
					日付・時刻型の違いを説明します。
				</p>
				<dl>
					<dt>java.sql.Date</dt>
					<dd>SQL標準のDATE型 (日付のみ)を表します。</dd>
					<dt>java.sql.Time</dt>
					<dd>SQL標準のTIME型 (時刻のみ)を表します。</dd>
					<dt>java.sql.Timestamp</dt>
					<dd>SQL標準のTIMESTAMP型 (日付と時刻)を表します。RDBMSがサポートしている場合ナノ秒を保持します。</dd>
					<dt>java.util.Date</dt>
					<dd>SQL標準のTIMESTAMP型 (日付と時刻)を表します。ナノ秒を保持しません。</dd>
				</dl>
			</subsection>
		</section>
		<section name="利用例">
			<subsection name="エンティティクラス">
			<p>
				エンティティクラスのフィールドの型での利用例です。
			</p>
<source><![CDATA[@Entity
public class Employee {

    @Id
    Integer employeeId;

    String employeeName;

    @Version
    Long versionNo;
    
    ...
}]]></source>
			</subsection>
			<subsection name="ドメインクラス">
				<p>
					ドメインクラスでの利用例です。
				</p>
<source><![CDATA[@Domain(valueType = String.class)
public class PhoneNumber {

    private final String value;

    public PhoneNumber(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }
}]]></source>
			</subsection>
			<subsection name="Daoインタフェース">
				<p>
					Daoインタフェースのメソッドのパラメータや戻り値での利用例です。
				</p>
<source><![CDATA[@Dao(config = AppConfig.class)
public interface EmployeeDao {

    @Select
    Employee selectById(Integer employeeId);
    
    @Select
    List<String> selectAllName();
}]]></source>
			</subsection>
		</section>
	</body>
</document>