3,汎用mapper

12000 ワード

汎用mapperには多くの統合形式がありますhttps://github.com/abel533/Mapper/wiki/1.3-spring-boot
 1,java        

JAva符号化方式の集積は最も珍しい状況であるが、この集積を通じて汎用mapper集積の入口を見ることができる.ここでは2つの形式1、最も直接的な形式2を提供し、configurationを入口集積1.1.1として依存を追加する.コードを書き始める前に、まずjava符号化集積方式に依存を追加する.まずmybatisの依存を導入したに違いない
 
org.mybatis
mybatis
   




最新バージョン番号http://mvnrepository.com/artifact/tk.mybatis/mapper-spring-boot-starter ユニバーサルマッパーサポートMyBatis 3.2.4+mybatis依存に加え、ユニバーサルマッパー依存を追加すればよい

    tk.mybatis
    mapper
        




最新バージョンはこちらをご覧ください.http://mvnrepository.com/artifact/tk.mybatis/mapper
Jarパッケージを使用する場合は、上記のリンクからJarをダウンロードできます.
1.2記述コード統合java符号化方式を使用する場合、通常はsqlsessionFactoryを構築するコードがあります.sqlSessionFactoryオブジェクトを作成する前または後に、mybatis-config.xmlファイルの解析クラスが提供されていないため、作成後の方法で作成することをお勧めします.1.1.2.1作成後、作成後のSqlSessionFactoryの他の呼び出しが発生する前に、次の方法で汎用Mapperを構成します.
//      sqlSessionFactory     session
session =SqlSessionFactory.openSession();
//    MapperHelper
MapperHelper mapperHelper =new MapperHelper();
//    
Config config =new Config();
//        ,    MYSQL
config.setIDENITY("mysql");
//  getter setter      
config.setEnableMethodAnnotation(true);
//      
config.setUseSimpleType(true);
//        -mysql
config.setWrapKeyword(" '{0}' ");
//    
mapperHelper.setConfig(config);
//      ,         mappers       
//4.0     ,    Mapper.class          @RegisterMapper  ,         
mapperHelper.pocessConfiguration(session.getConfiguration());

configの構成を省略すると、上記のコードは以下のように簡略化されます.
       sqlSessionFactory      session
session =sqlSessionFactory.openSession();
//    MapperHelper
MapperHelper  mapperHelper =new MapperHelper();
mapperHelper.processConfiguration(session.getFiguration());



汎用Mapperのデフォルトは、session.getConfiguration()を使用してすべてのMybatisメソッドを取得し、汎用メソッドに属するメソッドを処理します.
1.2.2作成前に作成する前に、mybatis.mapper.session.Configurationを使用してMyBatisのorg.apache.ibatis.session.Configurationを置き換えることで実現します.構成コードは次のとおりです.
  Configuration configuration =new Configuration();
 //                MapperHelper
  configuration.setMapperHelper(new MapperHelper());
sqlSessionFactory =new SqlSessionFactoryBuilder().build(configuration);


実装原理この構成は、元のコンフィギュレーションのaddMappedStatementメソッドを書き換えることによって実現される.
@Override
public  void  addMappedStatement(MappedStatement ms){
  try{
     supper.addMappedStatement  (ms);
//       ,      
  if(this.mapperHelper == null){
        this.mapperHelper =new MapperHelper();
}
   this.mapperHelper.processMappedStatement(ms);
}catch(Excetion e){
   //        Spring           。        ,      
e.printStackTrace(e);
throw new RuntimeException(e);
}

}





上記のいずれかの方法で構成すると、汎用的な方法が有効になります.次の章の内容を見てみましょう.細分化された方法です.
2.1単純なインスタンス、インスタンスはmysqlデータベース(データベースはプライマリ・キーに大きな影響を及ぼし、insertと密接な関係がある)に対して使用されます.データベースには次の表があります.
CREATE TABLE `country` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '  ',
  `countryname` varchar(255) DEFAULT NULL COMMENT '  ',
  `countrycode` varchar(255) DEFAULT NULL COMMENT '  ',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=10011 DEFAULT CHARSET=utf8 COMMENT='    ';


対応するjavaエンティティのタイプは次のとおりです.
   public class Country{
   @Id
private Integer id;
private String countryname;
private String countrycode;
//   getter  setter

}



最も簡単な場合は、@Idタグフィールドがプライマリ・キーである必要があります.データベースのフィールド名とエンティティクラスのフィールド名は完全に同じであり、この場合、死体とテーブルは直接マッピングできます.注意:エンティティクラスに@idタグ付きのフィールドが1つもない場合、ByPrimaryKey付きのメソッドを使用すると、すべてのフィールドが年連合プライマリ・キーとして使用され、wher id=?and countryname =? and countrycode =? の場合、汎用Mapperは多くの汎用インタフェースを提供します.ここでは、最も一般的なMapperインタフェースを例に、このエンティティクラスに対応するデータベース操作インタフェースは次のようになります.
import tk.mybatis.mapper.common.Mapper;

public interface CountryMapper extends Mapper {
}



MyBatisを構成するときにそのインタフェースに登録したりスキャンしたりできる限り、そのインタフェースが提供する方法はすべて使用できます.このインタフェースのデフォルトの継承方法は、selectOne select selectAll selectCount selectByPrimaryKey
方法が多すぎてmybatisから取得したインタフェースを省略してそのまま使用できます
 // mybatis    Spring     countryMapper,    selectAll   
List countries =countryMappr.selectAll();
//      
Country country =countryMapper.selectByPrimaryKey(1);
//        ,                   
Country query =new Country();
query.setId(1);
country =countryMapper.selectByPrimaryKey(query);

自分で書く方法を増やしたいなら、そのままCountryMapperで増やしてもいいです
1,純インタフェース注記方式を使用する場合
   import org.apache.ibatis.annotations.Select;
import tk.mybatis.mapper.common.Mapper;
public interface  CountryMapper extends Mapper{
   @Select(" select  * from country where countryname = #{countryname}")
  Country selectByCountryName(String countryname)
}


ここでは簡単な例を挙げただけで、複雑なクエリーが可能です.
2.xml方式を使用する場合、インタフェースに対応するxmlファイル、例えばCountryMapper.xmlファイルを提供する必要があります.内容は以下の通りです.


    




インタフェースに対応するメソッドを追加します.
import tk.mybatis.mapper.common.Mapper;
public interface CountryMapper  extends Mapper{
    Country selectByCountryName(String countryname);
}



インタフェースに他のメソッドを追加する場合はMybatisのみを使用するのと全く同じですが、対応するXMLでは、インタフェースの同名のメソッドを継承したりすることはできません!
マルチステート~インタフェースでは,注釈によってインタフェースを実現する方法でなければ,インタフェースは重名を許容し,本格的な呼び出しは汎用Mapperが提供する方法を用いる.たとえば、上のCountryMapperでは、ページング付きselectAllメソッドを提供します.
public interface CountryMapper extends Mapper{
 List selectAll(RowBounds rowbounds);

}

Java 8のインタフェースでは、デフォルトの方法により、public interface CountryMapper extends Mapper//この勢力は、楽観的なロック方法に対するパッケージdefault void updateSuccess(Country country){Assert.assertEquals(1,updateByPrimarykey)}の実装を参照するのに適している.
}
2.2        mapping
 2.1           ,             ,           。
   Mapper ,                         ,      
  :    username         user_name  。
              ,         ,  style     。
                    ,            ,            。
  Mapper              ,  JPA          。              ,     jap            。

2..2.1@NameStyle   (Mapper)
             ,         style     。

          :

normal,                     //  
camelhump,                  //      
uppercase,                  //     
lowercase,                  //     
camelhumpAndUppercase,      //          
camelhumpAndLowercase,      //          
   ,         ,  :

@NameStyle(Style.camelhumpAndUppercase)
public class Country
      ,              ,     userName           USER_NAME   。

2.2.2 @table   (JPA)
@table       name,catalog  schema     ,  name    ,                     。  2    ,     ,catalog      schema,       catalog    。
      :


@Table(name ="sys_user") public class User{}
 user       sys_user  。
2.2.3 @Colum   (JPA)
@Column     nam, insertable  updateable     
name        

insertableは提供されるinsertメソッドに有効であり、falseを設定するとsqlにupdateableが提供するupdateメソッドに有効ではなく、falseに設定するとsqlには表示されません.

@Column(name ="user_name") private String name;
       name    user_name      ,         ,        :

@Column(name ="'orer' ") private String order;
         ,  mapper       ,            wrapKeyword  。

2.2.4 @ColumnType   (mapper)
         column     @Colum         。  @column       ,  name   ,         jdbcType    typeHandler  。
jdbcTYpe                    jdbcType。
typeHandler            ,      。
      :

@ColumnType(column ="countryname",jdbcType =JdbcType.VARCHAR, typeHandler =StringTypeHandler.class) pivate Sring countryname;
2.2.5 @Transient   (JPA)
      ,                    ,                         ,     ,      @Transient        Mapper        。

     ,                 (        useSimpleType)
          java         ;
byte,short,int,Long, float, double,char,boolean
       ,         , mybatis                ,             。            。

         ,  Map, Lit            。
                ,       enumAsSimpleType   。

    :

@Transient private String otherThings;//データベース表以外のフィールド
2.2.6 @Id   (JPA)
            ,@Id        ,         ,             。
     ,               @Id      ,               ,        ,        ,
         @Id       ,                  ,     ByPrimaryKey        ,  where      ,          。
    :

@Id private Integer id;
      

@id private Integer userId; @Id private Integer roleid;
2.2.7 @KeySql   
      ,          
    mapper      ,          @GeneratedValue   
2.2.8 @GeneratedValue   (JPA)
      ,        
2.2.9 @version    (Mapper)
@Version            ,       
‘’2.2.10 @RegisterMapper   、
      Mapper                   ,            ,         

3,  
              ,              。
    Mapper                       。

  mapper          
1mappers
2,IDENTITY
3,ORDER(  : order,before)
4,catalog
5,schema
6,notEmpty
7,style
8, enableMethodAnnotation
9.useSimpleTypes
10,usePrimitiveType;
11,simpleTypes;
12,enumAsSimpleType;
13,wrapKeyword
14,checkExampleEntityClass
15,safeDelete
16,safeUpdate
17,useJavaType
             

3.1 mappers
3.2 IDENTITY
       ,
        , IDENTITY =MYSQL

3.3 ORDER(  : order,before)
  order   ,      BEFORE  AFTER
       springboot      ,  boot  ,   order  before 2   
       ,    
properties      

order=after//order=after//またはbefore=false
//spring bootでは、上より接頭辞が多く、orderはmapper.order=after//またはspring boot mapper.before=falseを使用できません.
    Oracle        UUID ,    :


//properties方式構成時order=before//order=before//またはbefore=true;//Spring bootでは、上記より接頭辞が多く、orderはmapper.order=before//またはmapper.before=trueを使用できません.
            ,           ,      
3.4 catalog
    catalog,      ,        catalog     
35, shcema
  catalog,catalog      schema
36,notEmpty
insertSelective   updateByPrimarykeySelective  ,           !='  '.
    :

notEmpty =true
3.7style
            ,     
normal:   
camelhump:       
uppercase:      
lowercase:      
camelhumpAndUppercase:            
camelhumpAndLowercase:           

      :


style =camelhumpAndUppercase
3.8 enableMethodAnnotation
        (getter  setter)         ,   false.
      

enableMethodAnnotation =true
   ,      








        mapper    。    spring boot          mapper.     
   yml      :

mapper: mappers: - tk.mybatis.mapper.common.Mapper - tk.mybatis.mapper.common.Mapper2 notEmpty: true
  properties    :

mapper.mappers=tk.mybatis.mapper.common.Mapper,tk.mybatis.mapper.common.Mapper2 mapper.notEmpty=true
  Springboot    Relax     ,       notEmpty       not-empty,  n    spring boot                    

1.3.2@MapperScan      
       @Configuration        ,        spring boot     ,  :

@tk.mybatis.spring.annotation.MapperScan(basePackages="スキャンパッケージ")@SpringBootApplication public class SampleMapperApplication implements CommandLineRunner{
}
  :      tk.mybatis.spring.annotation.MapperScan !

       Spring Boot              Mapper(  1.3.1    ),                   :

/**汎用mapperの構成、1行1つの構成/String[]properties()defaulr{};/*また、mapperHelper bean*/String mapperHelperRef()default"を直接構成することもできます.