3,汎用mapper
12000 ワード
汎用mapperには多くの統合形式がありますhttps://github.com/abel533/Mapper/wiki/1.3-spring-boot
JAva符号化方式の集積は最も珍しい状況であるが、この集積を通じて汎用mapper集積の入口を見ることができる.ここでは2つの形式1、最も直接的な形式2を提供し、configurationを入口集積1.1.1として依存を追加する.コードを書き始める前に、まずjava符号化集積方式に依存を追加する.まずmybatisの依存を導入したに違いない
最新バージョン番号http://mvnrepository.com/artifact/tk.mybatis/mapper-spring-boot-starter ユニバーサルマッパーサポートMyBatis 3.2.4+mybatis依存に加え、ユニバーサルマッパー依存を追加すればよい
最新バージョンはこちらをご覧ください.http://mvnrepository.com/artifact/tk.mybatis/mapper
Jarパッケージを使用する場合は、上記のリンクからJarをダウンロードできます.
1.2記述コード統合java符号化方式を使用する場合、通常はsqlsessionFactoryを構築するコードがあります.sqlSessionFactoryオブジェクトを作成する前または後に、mybatis-config.xmlファイルの解析クラスが提供されていないため、作成後の方法で作成することをお勧めします.1.1.2.1作成後、作成後のSqlSessionFactoryの他の呼び出しが発生する前に、次の方法で汎用Mapperを構成します.
configの構成を省略すると、上記のコードは以下のように簡略化されます.
汎用Mapperのデフォルトは、session.getConfiguration()を使用してすべてのMybatisメソッドを取得し、汎用メソッドに属するメソッドを処理します.
1.2.2作成前に作成する前に、mybatis.mapper.session.Configurationを使用してMyBatisのorg.apache.ibatis.session.Configurationを置き換えることで実現します.構成コードは次のとおりです.
実装原理この構成は、元のコンフィギュレーションのaddMappedStatementメソッドを書き換えることによって実現される.
上記のいずれかの方法で構成すると、汎用的な方法が有効になります.次の章の内容を見てみましょう.細分化された方法です.
2.1単純なインスタンス、インスタンスはmysqlデータベース(データベースはプライマリ・キーに大きな影響を及ぼし、insertと密接な関係がある)に対して使用されます.データベースには次の表があります.
対応するjavaエンティティのタイプは次のとおりです.
最も簡単な場合は、@Idタグフィールドがプライマリ・キーである必要があります.データベースのフィールド名とエンティティクラスのフィールド名は完全に同じであり、この場合、死体とテーブルは直接マッピングできます.注意:エンティティクラスに@idタグ付きのフィールドが1つもない場合、ByPrimaryKey付きのメソッドを使用すると、すべてのフィールドが年連合プライマリ・キーとして使用され、wher id=?and countryname =? and countrycode =? の場合、汎用Mapperは多くの汎用インタフェースを提供します.ここでは、最も一般的なMapperインタフェースを例に、このエンティティクラスに対応するデータベース操作インタフェースは次のようになります.
MyBatisを構成するときにそのインタフェースに登録したりスキャンしたりできる限り、そのインタフェースが提供する方法はすべて使用できます.このインタフェースのデフォルトの継承方法は、selectOne select selectAll selectCount selectByPrimaryKey
方法が多すぎてmybatisから取得したインタフェースを省略してそのまま使用できます
自分で書く方法を増やしたいなら、そのままCountryMapperで増やしてもいいです
1,純インタフェース注記方式を使用する場合
ここでは簡単な例を挙げただけで、複雑なクエリーが可能です.
2.xml方式を使用する場合、インタフェースに対応するxmlファイル、例えばCountryMapper.xmlファイルを提供する必要があります.内容は以下の通りです.
インタフェースに対応するメソッドを追加します.
インタフェースに他のメソッドを追加する場合はMybatisのみを使用するのと全く同じですが、対応するXMLでは、インタフェースの同名のメソッドを継承したりすることはできません!
マルチステート~インタフェースでは,注釈によってインタフェースを実現する方法でなければ,インタフェースは重名を許容し,本格的な呼び出しは汎用Mapperが提供する方法を用いる.たとえば、上のCountryMapperでは、ページング付きselectAllメソッドを提供します.
Java 8のインタフェースでは、デフォルトの方法により、public interface CountryMapper extends Mapper//この勢力は、楽観的なロック方法に対するパッケージdefault void updateSuccess(Country country){Assert.assertEquals(1,updateByPrimarykey)}の実装を参照するのに適している.
}
@Table(name ="sys_user") public class User{}
insertableは提供されるinsertメソッドに有効であり、falseを設定するとsqlにupdateableが提供するupdateメソッドに有効ではなく、falseに設定するとsqlには表示されません.
@Column(name ="user_name") private String name;
@Column(name ="'orer' ") private String order;
@ColumnType(column ="countryname",jdbcType =JdbcType.VARCHAR, typeHandler =StringTypeHandler.class) pivate Sring countryname;
@Transient private String otherThings;//データベース表以外のフィールド
@Id private Integer id;
@id private Integer userId; @Id private Integer roleid;
order=after//order=after//またはbefore=false
//spring bootでは、上より接頭辞が多く、orderはmapper.order=after//またはspring boot mapper.before=falseを使用できません.
//properties方式構成時order=before//order=before//またはbefore=true;//Spring bootでは、上記より接頭辞が多く、orderはmapper.order=before//またはmapper.before=trueを使用できません.
notEmpty =true
style =camelhumpAndUppercase
enableMethodAnnotation =true
mapper: mappers: - tk.mybatis.mapper.common.Mapper - tk.mybatis.mapper.common.Mapper2 notEmpty: true
mapper.mappers=tk.mybatis.mapper.common.Mapper,tk.mybatis.mapper.common.Mapper2 mapper.notEmpty=true
@tk.mybatis.spring.annotation.MapperScan(basePackages="スキャンパッケージ")@SpringBootApplication public class SampleMapperApplication implements CommandLineRunner{
}
/**汎用mapperの構成、1行1つの構成/String[]properties()defaulr{};/*また、mapperHelper bean*/String mapperHelperRef()default"を直接構成することもできます.
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"を直接構成することもできます.