05-springBootエンジニアリングにおけるMyBatisフレームワークの統合実現と原理分析

6902 ワード

05-springBootエンジニアリングにおけるMyBatisフレームワークの統合実現と原理分析
springboot
9月29日にリリース
MyBatisの初歩的な分析を統合
概要
Mybatisは優れた永続層フレームワークであり、下位層はJDBCに基づいてデータベースとのインタラクションを実現している.そしてJDBC操作の基礎の上でパッケージングと最適化をして、それは柔軟なSQLのカスタマイズ、パラメータと結果セットのマッピング方式を借りて、もっとよく現在のインターネット技術の発展に適応しました.Mybatisフレームワークの簡単なアプリケーションアーキテクチャを図に示します.現在のインターネットアプリケーションでは、mybatisフレームワークは通常springフレームワークによってリソース統合され、データ層技術としてデータインタラクティブな操作を実現します.
準備作業
ステップ1:プロジェクトmoduleを作成します.たとえば、次のようにします.
ステップ2:依存の追加
mysql駆動依存

   mysql
   mysql-connector-java
   runtime

Spring jdbc依存

   org.springframework.boot
   spring-boot-starter-data-jdbc

mybatis starter依存

 org.mybatis.spring.boot
 mybatis-spring-boot-starter
 2.1.1
 

ステップ2:アプリケーション.propertiesプロファイルに簡易構成を追加する
接続プールの構成
spring.datasource.url=jdbc:mysql:///dbgoods?serverTimezone=GMT%2B8&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root

mybatis構成
mybatis.mapper-locations=classpath:/mapper/*/*.xml

環境テストコード実装
src/test/javaディレクトリにテストクラスを追加し、mybatisフレームワークの統合を基本テストします.コードは以下の通りです.
package com.cy.pj.goods.dao;
import java.sql.Connection;
import org.apache.ibatis.session.SqlSession;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class MyBatisTests {
       @Autowired
       private SqlSession sqlSession;
       @Test
       public void testGetConnection() {
           Connection conn=sqlSession.getConnection();
           System.out.println("connection="+conn);
       }
}

SpringBoot足場プロジェクトでは、SpringフレームワークはMyBatisフレームワークの下位構成に基づいてSqlSessionFactoryオブジェクトを作成し、このファクトリオブジェクトからSqlSessionを作成し、最後にSpringkuフレームワークに基づいてテストクラスにSqlSessionオブジェクトを注入します.次に、SqlSessionオブジェクトを介してデータベースとのセッションを実現できます.
MyBatisビジネスコードの統合と原理分析
ビジネスの説明
SpringBoot足場エンジニアリングによるMyBatisフレームワークの統合により、商品ライブラリ内の商品データの照会業務を実現します.
APIアーキテクチャ設計
ビジネスタイミングチャート分析
ビジネスコードの設計と実現
ステップ1:商品モジュールPOJOオブジェクトタイプ(このオブジェクトに基づいて商品データを格納する)を定義し、コードは以下の通りである.
package com.cy.pj.goods.pojo;
import java.util.Date;
/**         pojo  */
public class Goods {
    private Long id;
    private String name;
    private String remark;
    private Date createdTime;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public Date getCreatedTime() {
        return createdTime;
    }
    public void setCreatedTime(Date createdTime) {
        this.createdTime = createdTime;
    }
}

第2歩:商品モジュール持続層オブジェクトGoodsDaoインタフェースと方法マッピングを定義し、コードは以下の通りである.
GoodsDaoインタフェースおよびメソッド定義
package com.cy.pj.goods.dao;
import com.cy.pj.goods.pojo.Goods;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**         ,                  
 * @Mapper MyBatis     ,         ,  mybatis
 *          mybatis  ,    spring    .
 * */
@Mapper
public interface GoodsDao {
    List findGoods();
}

GoodsDaoインタフェースマッピングファイルおよびSQLマッピング定義



     

テストコードの作成と実行
ユニットテストクラスを定義し、GoodsDaoメソッドのユニットテストを行います.たとえば、次のようにします.
package com.cy.pj.goods.dao;
@SpringBootTest
public class GoodsDaoTests {
    @Autowired
 private GoodsDao goodsDao;
    @Test
 void testFindGoods(){
        List list=goodsDao.findGoods();
        for(Goods g:list){
            System.out.println(g);
        }
    }
}

図に示すように、テスト実行、下位API分析:
テスト運転中のBUG分析
  • idea@autowired注記エラープロンプト構成(図:
  • )
  • BindingException、図示:
  • ユニットテストクラス位置エラー、図に示すように:
  • 対応するマッピング要素が見つかりません.図に示すように、
  • ビジネス・レベルの記録MyBatis最下位SQLセッションの時間
    ビジネスの説明
    データ永続層apiメソッド呼び出しの実行時間を記録するビジネスがあります.どのように実現しますか?要求:1)ログをユニットテストクラスに直接書き込むことはできません.2)データ永続層実装クラスを変更することはできません.
    APIアーキテクチャ設計
    図に示すように、ログ記録業務に基づいてAPI設計を行う.
    ビジネスタイミングチャート分析
    図に示すように、商品の照会とログ記録を行い、その運行タイミング分析を行う.
    ビジネスコードの設計と実現
    ステップ1:GoodsServiceインタフェースを定義します.コードは次のとおりです.
    package com.cy.pj.goods.service;
    import com.cy.pj.goods.pojo.Goods;
    import java.util.List;
    public interface GoodsService {
          List findGoods();
    }

    ステップ2:GoodsServiceImpl実装クラスを定義し、ログを記録します.コードは次のとおりです.
    package com.cy.pj.goods.service;
    import com.cy.pj.goods.dao.GoodsDao;
    import com.cy.pj.goods.pojo.Goods;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import java.util.List;
    @Service
    public class GoodsServiceImpl implements GoodsService{
       private static final Logger log= 
       LoggerFactory.getLogger(GoodsServiceImpl.class);
        @Autowired
     private GoodsDao goodsDao;
        @Override
     public List findGoods() {
            long t1=System.currentTimeMillis();
            List list=goodsDao.findGoods();
            long t2=System.currentTimeMillis();
            log.info("findGoods()->t2-t1={}",t2-t1);//    
     return list;
        }
    }

    図に示すように、ログAPIアプリケーション分析:
    テストコードの作成と実行
    ユニットテストクラスGoodsServiceTestsを作成し、GoodsServiceオブジェクトメソッドのユニットテストを行います.たとえば、次のようにします.
    package com.cy.pj.goods.service;
    import com.cy.pj.goods.pojo.Goods;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import java.util.List;
    @SpringBootTest
    public class GoodsServiceTests {
        @Autowired
     private GoodsService goodsService;
        @Test
     void testFindGoods(){
            List list=goodsService.findGoods();
            for(Goods g:list){
                System.out.println(g);
            }
        }
    }

    テスト運転中のBUG分析
  • NullPointerException、図に示すように:
  • NoSuchBeanDefinitionException(図示:
  • )