5

mybatis-spring を使用して MyBatis プロジェクトをセットアップしています。実際の SQL 以外のすべてに Java 構成を使用したいと考えています (マッパー インターフェイスに @Select アノテーションがないなど)。

次のセットアップがありますが、これは機能しますが、@Select を使用します。

データソース Bean:

@Configuration
public class DataSourceConfig {

    @Bean
    public DataSource devDataSource() {
        ... set up data source
        return dataSource;
    }
}

MyBatis Bean:

@Configuration
@MapperScan("myproject.persistence")
public class MyBatisConfig {

    @Autowired
    DataSource dataSource;

    @Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        return sessionFactory.getObject();
    }
}

マッパー インターフェイス:

package myproject.persistence;

public interface PersonMapper {

    @Select("SELECT * FROM PersonTable WHERE PersonTable.LAST_NAME = #{lastName}")
    List<Person> getByLastName(@Param("lastName") String lastName);
}

サービス:

@Service
public class PeopleService {

    @Autowired
    PersonMapper personMapper;

    public List<Person> getByLastName(final String lastName) {
        return personMapper.getByLastName(lastName);
    }
}

@Select アノテーションの SQL ステートメントを XML ファイルに移動する方法を探しています (ただし、すべての Bean の Java 構成を維持し、引き続き @MapperScan を使用します)。私が探しているミッシング リンクは、SQL ステートメントを定義する XML "マッパー" とマッパー インターフェイスをペアにする方法です。

4

2 に答える 2

6

myproject.persistence パッケージの下の PersonMapper.xml で sql を定義できます (注意: インターフェイスは xml と同じパッケージにある必要があります)。

<mapper namespace="myproject.persistence.PersonMapper">
   <select id="getByLastName" parameterType="string" resultType="myproject.domain.Person">
      SELECT * FROM PersonTable WHERE PersonTable.LAST_NAME = #{lastName}
   </select>

mybatis は、xml ファイルで定義したメソッドを自動的に探します。

于 2013-11-12T03:03:35.993 に答える