0

私は 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 とインターフェイスには、同じ名前のメソッドが多数ある可能性があるためです。

4

1 に答える 1

0

マッパー インターフェイス UserMapper を作成し、Dao オブジェクトでメソッド getSqlSession()... を呼び出さないようにすることができます。したがって、マッパー インターフェイスを使用すると、xml 構成は同じままですが、Dao オブジェクトをまったく回避できます。次のようにインターフェースを定義するだけです:

  public interface UserMapper {

    public List<User> selectAll();

    public User selectById(@Param("id") int id);

    // rest is ommited
  }

メソッドの名前は、マッパー ファイルの select/update/insert/detele の ID と一致する必要があります。それでおしまい。

于 2012-09-06T13:59:51.500 に答える