2012-09-05 6 views
0

mybatis에서 새로 왔고 다음 mybatis3-user-guide.pdf를 따르고 있습니다.매퍼 인터페이스가 필요하지 않습니다.

첫 번째 애플리케이션을 설정했습니다.

그러나 나는 매퍼 인터페이스에 대해 정확히 알지 못했다.

의 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> 

지금까지

이 내 응용 프로그램에 대한 모든 구성 (예를 들어 모델 사용을)입니다 Dao :

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(); 
} 

UserDao :

public class UserDao extends AbstractSimpleDaoImpl<User> { 
    private static String pack = "com.king.mapper.UserMapper"; 
    @Override 
    protected String getMapperNamespace() { 
     return pack; 
    } 
} 

효과가있었습니다. 그러나 mybatis의 예제는 매퍼 인터페이스를 참조합니다.

위의 예에서 UserMapper라는 인터페이스를 만들어야하는 것으로 보입니다.

하지만 필요한지 궁금한가요? 내가 그것을 사용해야 할 때?

BTW, 내 의견으로는 매퍼 인터페이스가 DAO의 기능을 좋아한다는 것을 알게되었습니다. DAO와 인터페이스에는 동일한 이름을 가진 여러 메소드가있을 수 있기 때문에

답변

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와 일치해야합니다. 그게 전부입니다.

+0

매퍼가 DAO를 대체 할 수 있습니까? 어떤예요? – hguser

+0

예제는 사용자 자신의 설정 파일과 함께 작성한 인터페이스입니다. 매퍼 사용하기 섹션의 MyBatis doc [here] (http://www.mybatis.org/core/java-api.html)을 살펴보십시오. 직접 연결할 수 없으니 죄송합니다. XML 맵핑 파일을 생략하고 맵퍼 인터페이스에서 주석을 사용할 수도 있습니다. 여기에 많은 예제를 볼 수 있습니다 (http://mybatis.co.uk/). –

관련 문제