29
29
import java .util .List ;
30
30
import java .util .Map ;
31
31
32
+ import org .apache .ibatis .annotations .Param ;
32
33
import org .apache .ibatis .annotations .SelectProvider ;
33
34
import org .apache .ibatis .builder .BuilderException ;
34
35
import org .apache .ibatis .builder .annotation .ProviderContext ;
@@ -52,6 +53,7 @@ public static void setUp() throws Exception {
52
53
Reader reader = Resources
53
54
.getResourceAsReader ("org/apache/ibatis/submitted/sqlprovider/mybatis-config.xml" );
54
55
sqlSessionFactory = new SqlSessionFactoryBuilder ().build (reader );
56
+ sqlSessionFactory .getConfiguration ().addMapper (StaticMethodSqlProviderMapper .class );
55
57
reader .close ();
56
58
57
59
// populate in-memory database
@@ -472,6 +474,66 @@ public void mapperMultipleParamAndProviderContext() {
472
474
}
473
475
}
474
476
477
+ @ Test
478
+ public void staticMethodNoArgument () {
479
+ SqlSession sqlSession = sqlSessionFactory .openSession ();
480
+ try {
481
+ StaticMethodSqlProviderMapper mapper =
482
+ sqlSession .getMapper (StaticMethodSqlProviderMapper .class );
483
+ assertEquals (1 , mapper .noArgument ());
484
+ } finally {
485
+ sqlSession .close ();
486
+ }
487
+ }
488
+
489
+ @ Test
490
+ public void staticMethodOneArgument () {
491
+ SqlSession sqlSession = sqlSessionFactory .openSession ();
492
+ try {
493
+ StaticMethodSqlProviderMapper mapper =
494
+ sqlSession .getMapper (StaticMethodSqlProviderMapper .class );
495
+ assertEquals (10 , mapper .oneArgument (10 ));
496
+ } finally {
497
+ sqlSession .close ();
498
+ }
499
+ }
500
+
501
+ @ Test
502
+ public void staticMethodMultipleArgument () {
503
+ SqlSession sqlSession = sqlSessionFactory .openSession ();
504
+ try {
505
+ StaticMethodSqlProviderMapper mapper =
506
+ sqlSession .getMapper (StaticMethodSqlProviderMapper .class );
507
+ assertEquals (2 , mapper .multipleArgument (1 , 1 ));
508
+ } finally {
509
+ sqlSession .close ();
510
+ }
511
+ }
512
+
513
+ @ Test
514
+ public void staticMethodOnlyProviderContext () {
515
+ SqlSession sqlSession = sqlSessionFactory .openSession ();
516
+ try {
517
+ StaticMethodSqlProviderMapper mapper =
518
+ sqlSession .getMapper (StaticMethodSqlProviderMapper .class );
519
+ assertEquals ("onlyProviderContext" , mapper .onlyProviderContext ());
520
+ } finally {
521
+ sqlSession .close ();
522
+ }
523
+ }
524
+
525
+ @ Test
526
+ public void staticMethodOneArgumentAndProviderContext () {
527
+ SqlSession sqlSession = sqlSessionFactory .openSession ();
528
+ try {
529
+ StaticMethodSqlProviderMapper mapper =
530
+ sqlSession .getMapper (StaticMethodSqlProviderMapper .class );
531
+ assertEquals ("oneArgumentAndProviderContext 100" , mapper .oneArgumentAndProviderContext (100 ));
532
+ } finally {
533
+ sqlSession .close ();
534
+ }
535
+ }
536
+
475
537
public interface ErrorMapper {
476
538
@ SelectProvider (type = ErrorSqlBuilder .class , method = "methodNotFound" )
477
539
void methodNotFound ();
@@ -508,4 +570,48 @@ public String multipleProviderContext(ProviderContext providerContext1, Provider
508
570
}
509
571
}
510
572
573
+ public interface StaticMethodSqlProviderMapper {
574
+ @ SelectProvider (type = SqlProvider .class , method = "noArgument" )
575
+ int noArgument ();
576
+
577
+ @ SelectProvider (type = SqlProvider .class , method = "oneArgument" )
578
+ int oneArgument (Integer value );
579
+
580
+ @ SelectProvider (type = SqlProvider .class , method = "multipleArgument" )
581
+ int multipleArgument (@ Param ("value1" ) Integer value1 , @ Param ("value2" ) Integer value2 );
582
+
583
+ @ SelectProvider (type = SqlProvider .class , method = "onlyProviderContext" )
584
+ String onlyProviderContext ();
585
+
586
+ @ SelectProvider (type = SqlProvider .class , method = "oneArgumentAndProviderContext" )
587
+ String oneArgumentAndProviderContext (Integer value );
588
+
589
+ class SqlProvider {
590
+ public static String noArgument () {
591
+ return "SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS" ;
592
+ }
593
+
594
+ public static String oneArgument (Integer value ) {
595
+ return "SELECT " + value + " FROM INFORMATION_SCHEMA.SYSTEM_USERS" ;
596
+ }
597
+
598
+ public static String multipleArgument (@ Param ("value1" ) Integer value1 ,
599
+ @ Param ("value2" ) Integer value2 ) {
600
+ return "SELECT " + (value1 + value2 ) + " FROM INFORMATION_SCHEMA.SYSTEM_USERS" ;
601
+ }
602
+
603
+ public static String onlyProviderContext (ProviderContext context ) {
604
+ return "SELECT '" + context .getMapperMethod ().getName ()
605
+ + "' FROM INFORMATION_SCHEMA.SYSTEM_USERS" ;
606
+ }
607
+
608
+ public static String oneArgumentAndProviderContext (Integer value , ProviderContext context ) {
609
+ return "SELECT '" + context .getMapperMethod ().getName () + " " + value
610
+ + "' FROM INFORMATION_SCHEMA.SYSTEM_USERS" ;
611
+ }
612
+
613
+ }
614
+
615
+ }
616
+
511
617
}
0 commit comments