2016-09-11 9 views
1

私は、次の例に示したように私のMyBatisのスプリングを設定しようとしています:MyBatisの-春のJavaの設定@MapperScan注釈

1)コードをstackoverflowの上前の回答、ダウン 少数の答えから(MyBatis-Spring + @Configuration - Can't autowire mapper beans)そのドキュメントから

@Configuration 
@MapperScan("org.mybatis.spring.sample.mapper") 
public class AppConfig 
{ 
    @Bean 
    public DataSource dataSource() 
    {  
     return new EmbeddedDatabaseBuilder().addScript("schema.sql").build(); 
    } 
    @Bean 
    public DataSourceTransactionManager transactionManager() 
    {  
     return new DataSourceTransactionManager(dataSource()); 
    } 
    @Bean 
    public SqlSessionFactory sqlSessionFactory() throws Exception 
    {  
     SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); 
     sessionFactory.setDataSource(dataSource());  
     return sessionFactory.getObject(); 
    } 
} 

2)コード(http://www.mybatis.org/spring/mappers.html

使用法:

public class FooServiceImpl implements FooService { 

    private UserMapper userMapper; 

    public void setUserMapper(UserMapper userMapper) { 
    this.userMapper = userMapper; 
    } 

    public User doSomeBusinessStuff(String userId) { 
    return this.userMapper.getUser(userId); 
    } 
} 
@MapperScanとマッパー登録

:以下に示すように

@Configuration 
@MapperScan("org.mybatis.spring.sample.mapper") 
public class AppConfig { 

    @Bean 
    public DataSource dataSource() { 
    return new EmbeddedDatabaseBuilder().addScript("schema.sql").build() 
    } 

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

が動作していない私のコードは次のとおり

@SpringBootApplication 
@MapperScan(basePackages="com.tjwhalen.game.service.dao") 
public class Application { 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

    //@MapperScan(basePackages="com.tjwhalen.game.service.dao") 
    public class AppConfig { 

     @Autowired 
     DataSource datasource; 

     @Bean 
     public DataSourceTransactionManager transactionManager() { 
      return new DataSourceTransactionManager(datasource); 
     } 

     @Bean 
     public SqlSessionFactory sqlSessionFactory() throws Exception { 
      SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean(); 
      sqlSessionFactory.setDataSource(datasource); 
      //sqlSessionFactory.setTypeAliasesPackage("com.tjwhalen.game.model"); 
      return (SqlSessionFactory) sqlSessionFactory.getObject(); 
     } 

     @Bean 
     public ItemSummaryDbService itemSummaryDbService() { 
      return new ItemSummaryDbServiceImpl(); 
     } 
    } 
} 

マイサービス:ネストされたのAppConfigと

自分のアプリケーション

public class ItemSummaryDbServiceImpl implements ItemSummaryDbService { 

    @Autowired 
    private ItemSummaryMapper itemSummaryMapper; 

    public void setItemSummaryMapper(ItemSummaryMapper itemSummaryMapper) { 
     this.itemSummaryMapper = itemSummaryMapper; 
    } 

    public void writeItemSummarys(List<ItemSummary> itemSummarys) { 

     for(ItemSummary itemSummary : itemSummarys) { 
      itemSummaryMapper.insertItemSummary(itemSummary); 
     } 
    } 

    public List<ItemSummary> lookupItemSummarys() { 
     return itemSummaryMapper.selectItemSummarys(); 
    } 
} 

My mapper in @MapperScan annotaionで示さパッケージ:

package com.tjwhalen.game.service.dao; 

import java.util.List; 

import com.tjwhalen.game.model.ItemSummary; 

public interface ItemSummaryMapper { 

    public void insertItemSummary(ItemSummary itemSummary); 
    public List<ItemSummary> selectItemSummarys(); 
} 

私の使用:

public class LoadItems implements CommandLineRunner { 

    private final static Logger logger = LoggerFactory.getLogger(LoadItems.class); 

    @Autowired 
    private ItemSummaryDbService service; 

    public void run(String... arg0) throws Exception { 
     logger.info("LoadItems is running"); 

     ArrayList<ItemSummary> list = new ArrayList<ItemSummary>(); 
     list.add(new ItemSummary(1, "one", 1)); 
     service.writeItemSummarys(list); 

    } 
} 

私のスタックトレース:

java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransactionFactory.newTransaction(Ljava/sql/Connection;Z)Lorg/apache/ibatis/transaction/Transaction; 
    at org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSessionFromDataSource(DefaultSqlSessionFactory.java:77) ~[ibatis-core-3.0.jar:na] 
    at org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSession(DefaultSqlSessionFactory.java:40) ~[ibatis-core-3.0.jar:na] 
    at org.mybatis.spring.SqlSessionUtils.getSqlSession(SqlSessionUtils.java:102) ~[mybatis-spring-1.3.0.jar:1.3.0] 
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:429) ~[mybatis-spring-1.3.0.jar:1.3.0] 
    at com.sun.proxy.$Proxy41.insert(Unknown Source) ~[na:na] 
    at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:279) ~[mybatis-spring-1.3.0.jar:1.3.0] 
    at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:54) ~[ibatis-core-3.0.jar:na] 
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:35) ~[ibatis-core-3.0.jar:na] 
    at com.sun.proxy.$Proxy42.insertItemSummary(Unknown Source) ~[na:na] 
    at com.tjwhalen.game.service.impl.ItemSummaryDbServiceImpl.writeItemSummarys(ItemSummaryDbServiceImpl.java:32) ~[classes/:na] 
    at com.tjwhalen.game.loader.LoadItems.run(LoadItems.java:28) ~[classes/:na] 
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:798) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:782) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:769) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1185) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1174) [spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE] 
    at com.tjwhalen.game.Application.main(Application.java:37) [classes/:na] 

そして最後に、私のpom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.tjwhalen.game</groupId> 
    <artifactId>Runescape-App</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 


    <properties> 
     <java.version>1.8</java.version> 
    </properties> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.0.RELEASE</version> 
    </parent> 

    <dependencies> 
     <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter --> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter</artifactId> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/org.springframework/spring-web --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/postgresql/postgresql --> 
     <dependency> 
      <groupId>postgresql</groupId> 
      <artifactId>postgresql</artifactId> 
      <version>8.4-702.jdbc4</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --> 
     <dependency> 
      <groupId>org.mybatis</groupId> 
      <artifactId>mybatis-spring</artifactId> 
      <version>1.3.0</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/org.apache.ibatis/ibatis-core --> 
     <dependency> 
      <groupId>org.apache.ibatis</groupId> 
      <artifactId>ibatis-core</artifactId> 
      <version>3.0</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/org.springframework/spring-test --> 
     <!-- <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-test</artifactId> 
      <version>4.3.2.RELEASE</version> 
     </dependency> --> 
     <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test --> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jdbc</artifactId> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp --> 
     <dependency> 
      <groupId>commons-dbcp</groupId> 
      <artifactId>commons-dbcp</artifactId> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> 
     <dependency> 
      <groupId>org.mybatis</groupId> 
      <artifactId>mybatis</artifactId> 
      <version>3.4.0</version> 
     </dependency> 

<!-- https://mvnrepository.com/artifact/org.springframework.batch/spring-batch-infrastructure --> 
<dependency> 
    <groupId>org.springframework.batch</groupId> 
    <artifactId>spring-batch-infrastructure</artifactId> 
</dependency> 




    </dependencies> 



    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 



</project> 

私は多くの問題を抱えていた過去の不正なpom.xmlに関することですので、データベースへのアクセスに関わる各依存関係を調べ、プロジェクトに提供されている依存関係が正しいことを確認しました。私はバージョンが提供された依存関係で述べられているものと同じであることも確認しました。 エラーメッセージAbstractMethodErrorは何を示していますか?

明確な質問があればお気軽に

答えて

0

私はそれを理解しました。私は依存関係を追加しました

<!-- https://mvnrepository.com/artifact/org.apache.ibatis/ibatis-core --> 
    <dependency> 
     <groupId>org.apache.ibatis</groupId> 
     <artifactId>ibatis-core</artifactId> 
     <version>3.0</version> 
    </dependency> 

これを修正しました。なぜこの依存関係がここにあったのか分かりません。残りの部分を調べて、彼らがibatis-coreに依存していないかどうかを確認しました。

だから、それは私の一部に監督だった、とAbstractMethodErrorはおそらく依存関係の問題であることを示しており、それはそれ

に直面したときにチェックする必要がある最初のものです