私は mybatis の初心者で、mybatis3-user-guide.pdf に従っています。
最初のアプリケーションをセットアップしました。
しかし、私はマッパーインターフェースについて正確に知らないことがわかりました。
ここまでで、これが私のアプリケーションのすべての構成です (モデル User を例にとります):
mybatis config.xml:
<configuration>
<typeAliases>
<typeAlias alias="User" type="com.king.mapper.User" />
</typeAliases>
<mappers>
<mapper resource="com/king/mapper/UserMapper.xml" />
</mappers>
</configuration>
UserMapper.xml:
<mapper namespace="com.king.mapper.UserMapper">
<select id="selectById" parameterType="int" resultMap="userMap">
select * from users where id = #{id}
</select>
<select id="selectAll" resultType="hashmap">
select * from users order by created_at desc
</select>
<insert id="insert" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into users (name,created_at,updated_at) values (#{name},current_timestamp,current_timestamp)
</insert>
<update id="update" parameterType="User">
update users set name = #{name},updated_at=current_timestamp where id = #{id}
</update>
<delete id="delete" parameterType="int">
delete from users where id = #{id}
</delete>
<resultMap id="userMap" type="User">
<result property="createDate" column="created_at" />
<result property="updateDate" column="updated_at" />
</resultMap>
</mapper>
ダオ:
public abstract class AbstractSimpleDaoImpl<T> extends SqlSessionDaoSupport implements IDao<T> {
@Override
public T query(int id) {
return getSqlSession().selectOne(getMapperNamespace() + ".selectById", id);
}
@Override
public List<T> list() {
return getSqlSession().selectList(getMapperNamespace() + ".selectAll");
}
@Override
public int add(T entity) {
return getSqlSession().insert(getMapperNamespace() + ".insert", entity);
}
@Override
public int update(T entity) {
return getSqlSession().update(getMapperNamespace() + ".update", entity);
}
@Override
public void delete(T entity) {
getSqlSession().delete(getMapperNamespace() + ".delete", entity);
}
protected abstract String getMapperNamespace();
}
ユーザーダオ:
public class UserDao extends AbstractSimpleDaoImpl<User> {
private static String pack = "com.king.mapper.UserMapper";
@Override
protected String getMapperNamespace() {
return pack;
}
}
出来た。しかし、mybatis の例はマッパー インターフェイスを参照することがわかりました。
上記の例では、UserMapper という名前のインターフェイスを作成する必要があるようです。
しかし、それが必要なのだろうか?いつ使用する必要がありますか?
ところで、私の意見では、マッパー インターフェイスの機能は dao の機能とまったく同じであることがわかりました。dao とインターフェイスには、同じ名前のメソッドが多数ある可能性があるためです。