2929import java .util .List ;
3030import java .util .Map ;
3131
32+ import org .apache .ibatis .annotations .Param ;
3233import org .apache .ibatis .annotations .SelectProvider ;
3334import org .apache .ibatis .builder .BuilderException ;
3435import org .apache .ibatis .builder .annotation .ProviderContext ;
@@ -52,6 +53,7 @@ public static void setUp() throws Exception {
5253 Reader reader = Resources
5354 .getResourceAsReader ("org/apache/ibatis/submitted/sqlprovider/mybatis-config.xml" );
5455 sqlSessionFactory = new SqlSessionFactoryBuilder ().build (reader );
56+ sqlSessionFactory .getConfiguration ().addMapper (StaticMethodSqlProviderMapper .class );
5557 reader .close ();
5658
5759 // populate in-memory database
@@ -472,6 +474,66 @@ public void mapperMultipleParamAndProviderContext() {
472474 }
473475 }
474476
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+
475537 public interface ErrorMapper {
476538 @ SelectProvider (type = ErrorSqlBuilder .class , method = "methodNotFound" )
477539 void methodNotFound ();
@@ -508,4 +570,48 @@ public String multipleProviderContext(ProviderContext providerContext1, Provider
508570 }
509571 }
510572
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+
511617}
0 commit comments