2012-03-16 12 views
1

XML構成からJava構成に移行したいと考えています。JavaのmyBatis構成へのマッパーの追加

sqlSessionFactory.getConfiguration().setEnvironment(new Environment("development", new org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory(), getDataSouroce())); 

私は(私はXML設定ファイルから<environments>を削除した)は、Javaの設定で、すべての<environments>セクションを交換するために管理が、私は取り除くことができません:私は書くことを試みた

<mappers><mapper resource="mailbox/db/map/FileMapper.xml"/> </mappers> 

sqlSessionFactory.getConfiguration()。addMapper(FileMapper.class);

が、例外があります。

SqlSession sqlSession = MyBatisConnectionFactory.instance.getSqlSessionFactory().openSession(); 

    FileExample fe = new FileExample(); 
    Criteria f = fe.createCriteria().andIdBetween(0L, 5L); 
    FileMapper mapper = (FileMapper) sqlSession.getMapper(FileMapper.class); 
    List<File> allRecords = mapper.selectByExample(fe); 

// Mapped Statements collection does not contain value for mailbox.db.dao.FileMapper.selectByExample 

答えて

2

私はDbUtil.getInstance()抽象的なマッパー工場の下に使用していますがをgetDataSource()とregisterMappers()キーポイントです。 DbUtil.getInstance()

public abstract class AbstractMapperFactory implements MapperFactory { 

    private ThreadLocal<SqlSessionManager> sessionManagerThreadLocal = new ThreadLocal<SqlSessionManager>(); 

    public <T> T getMapper(Class<T> clazz) throws DaoException { 
     if(sessionManagerThreadLocal.get() == null) { 
      initialize(); 
     } 
     return sessionManagerThreadLocal.get().getMapper(clazz); 
    } 

    public void closeSession() { 
     if(sessionManagerThreadLocal.get() != null) { 
      sessionManagerThreadLocal.get().close(); 
      sessionManagerThreadLocal.remove(); 
     } 
    } 

    private void initialize() throws DaoException { 
     Environment environment = new Environment("env", new ManagedTransactionFactory(), DbUtil.getInstance().getDataSource()); 
     Configuration configuration = new Configuration(environment); 
     registerMappers(configuration); 
     sessionManagerThreadLocal.set(SqlSessionManager.newInstance(new SqlSessionFactoryBuilder().build(configuration))); 
    } 

    protected abstract void registerMappers(Configuration configuration); 

} 

。をgetDataSource()は、それが管理またはシンプルされているかどうか、は、java.sql.DataSourceインスタンスを取得する責任があります。

registerMappers()サブクラスは、以下のようなコードを使用してマッパを登録することができる抽象メソッドである:

protected void registerMappers(Configuration configuration) { 
    configuration.addMapper(PartMapper.class); 
    configuration.addMapper(StatusMapper.class); 
    configuration.addMapper(NoteTypeMapper.class); 
    configuration.addMapper(AssetTypeMapper.class); 
} 
関連する問題