Javaブックマーク#SpringBoot + MyBatisは、@ MapperScanを使用して複数のパッケージに注釈を付けます

1.今日のブックマーク

SpringBoot統合MyBatisプロジェクトで、一度に複数のパッケージの下でDAOインターフェイスクラスに注釈を付けてスキャンする方法は?
言い換えると、@ MapperScanを使用して、異なるパッケージパスにある複数のDAOマッピングクラスに注釈を付ける方法は?
言い換えれば、@ MapperScan注釈スキャンインターフェイスクラスの3つの設定メソッドは何ですか?

プロジェクトテクノロジースタックは、SpringBoot 2 + MyBatis 3をアップグレードします。私たちが踏んだピットについて話すと、私たちは夢の中で剣を見ます。
 

2.夢の中で花を探る

各DAOインターフェイスクラス@Mapperノートを追加する場合、これは面倒であるだけでなく、非常に複雑です。SpringBoot MyBatis統合プロジェクトでは、@MapperScan注釈を使用して、マルチパスマルチパケットスキャンを実現できます。

1)次のように使用できます@MapperScan(basePackages = {"", ""})

@Configuration
@MapperScan(basePackages = {
    
    "com.meiwei.tan.dao.mall", "com.meiwei.ping.dao.crm"})
public class MyBatisConfiguration {
    
    

2)@MapperScan(value = {"", ""})同じ効果で使用することもできます:

@Configuration
@MapperScan(value = {
    
    "com.meiwei.tan.dao.mall", "com.meiwei.ping.dao.crm"})
public class MyBatisConfiguration {
    
    

3)@MapperScan(basePackageClasses = {xx1.class, xx2.class})このように使用されることはめったにありませんが指定されたクラスの複数のスキャンを使用することもあります。

@Configuration
@MapperScan(basePackageClasses = {
    
    OrderDao.class, UserDao.class})
public class MyBatisConfiguration {
    
    

上記のもの@MapperScan 注解,三种设置方式は、最終的にスキャンされているターゲットの効果を達成することができます。明確なビューのためにソースコードを見てください、ここに段落があります:

ここに写真の説明を挿入

 

3.悪い操作

それでも構成パッケージパスの下のインターフェイスクラスがスキャンされない場合は、次の構成で問題がないかどうかを確認してください
。1)org.mybatis.spring.bootが

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.1</version>
</dependency>

 
2)Mybatisの依存バージョンがSpringBootのバージョンと互換性があるかどうか
例:org.mybatis.spring.bootの依存バージョンは1.3.2で、springbootはバージョン2.0.2を使用します。@ mapperアノテーションがPOJOエンティティクラスで使用される場合、正常に機能します。動作しますが、@ mapperに注釈を付けて@mapperScanを使用すると、エラーが発生する可能性があります。
 

3)システム構成またはインスタンスがロードおよび作成されているかどうか。
テストケースを使用してローカルで実行する場合は、最初にシステム構成が正常にロードおよび初期化されていることを確認する必要があります。SpringMVCのさまざまな環境およびシステム構成と比較して、SpringBootのゼロ構成機能はいくつかの場所を占めています。構成は見落とされたり、忘れられたりしがちです。チェックリスト:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = App.class)
public class JUnitTestBase {
    
    

    @BeforeClass
    public static void beforeClass(){
    
    
        System.setProperty("app.id","meiwei");
        System.setProperty("apollo.bootstrap.enabled","true");
        System.setProperty("apollo.bootstrap.namespaces","application,db,dubbo,redis,mq");
    }
}
@EnableAutoConfiguration()
@Configuration()
@ComponentScan(value = {
    
    "com.meiwei.tan.service", "com.meiwei.*.service"})
@EnableTransactionManagement
@EnableAspectJAutoProxy
public class App {
    
    
}
public class OrderServiceTest extends JUnitTestBase {
    
    

    @Autowired
    IOrderService iOrderService;

    @Test
    public void testOrderDetail() {
    
    
        OrderDetailQuery orderDetailQuery = new OrderDetailQuery();
        orderDetailQuery.setBizChannel(0);
        OrderDO orderDO = iOrderService.orderDetail(orderDetailQuery);
        System.out.println(JSON.toJSONString(orderDO));
    }
}

おすすめ

転載: blog.csdn.net/itanping/article/details/108648668