Skip to content

Commit 5f74485

Browse files
authored
Merge pull request #379 from kazuki43zoo/gh-378
Support to configure LanguageDriver via SqlSessionFactoryBean
2 parents b4042ad + 54f6166 commit 5f74485

File tree

2 files changed

+82
-0
lines changed

2 files changed

+82
-0
lines changed

src/main/java/org/mybatis/spring/SqlSessionFactoryBean.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.apache.ibatis.plugin.Interceptor;
3737
import org.apache.ibatis.reflection.factory.ObjectFactory;
3838
import org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory;
39+
import org.apache.ibatis.scripting.LanguageDriver;
3940
import org.apache.ibatis.session.Configuration;
4041
import org.apache.ibatis.session.SqlSessionFactory;
4142
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
@@ -125,6 +126,10 @@ public class SqlSessionFactoryBean
125126

126127
private Class<?> typeAliasesSuperType;
127128

129+
private LanguageDriver[] scriptingLanguageDrivers;
130+
131+
private Class<? extends LanguageDriver> defaultScriptingLanguageDriver;
132+
128133
// issue #19. No default provider.
129134
private DatabaseIdProvider databaseIdProvider;
130135

@@ -435,6 +440,28 @@ public void setEnvironment(String environment) {
435440
this.environment = environment;
436441
}
437442

443+
/**
444+
* Set scripting language drivers.
445+
*
446+
* @param scriptingLanguageDrivers
447+
* scripting language drivers
448+
* @since 2.0.2
449+
*/
450+
public void setScriptingLanguageDrivers(LanguageDriver... scriptingLanguageDrivers) {
451+
this.scriptingLanguageDrivers = scriptingLanguageDrivers;
452+
}
453+
454+
/**
455+
* Set a default scripting language driver class.
456+
*
457+
* @param defaultScriptingLanguageDriver
458+
* A default scripting language driver class
459+
* @since 2.0.2
460+
*/
461+
public void setDefaultScriptingLanguageDriver(Class<? extends LanguageDriver> defaultScriptingLanguageDriver) {
462+
this.defaultScriptingLanguageDriver = defaultScriptingLanguageDriver;
463+
}
464+
438465
/**
439466
* {@inheritDoc}
440467
*/
@@ -519,6 +546,15 @@ protected SqlSessionFactory buildSqlSessionFactory() throws Exception {
519546
});
520547
}
521548

549+
if (!isEmpty(this.scriptingLanguageDrivers)) {
550+
Stream.of(this.scriptingLanguageDrivers).forEach(languageDriver -> {
551+
targetConfiguration.getLanguageRegistry().register(languageDriver);
552+
LOGGER.debug(() -> "Registered scripting language driver: '" + languageDriver + "'");
553+
});
554+
}
555+
Optional.ofNullable(this.defaultScriptingLanguageDriver)
556+
.ifPresent(targetConfiguration::setDefaultScriptingLanguage);
557+
522558
if (this.databaseIdProvider != null) {// fix #64 set databaseId before parse mapper xmls
523559
try {
524560
targetConfiguration.setDatabaseId(this.databaseIdProvider.getDatabaseId(this.dataSource));

src/test/java/org/mybatis/spring/SqlSessionFactoryBeanTest.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@
2929
import org.apache.ibatis.reflection.factory.ObjectFactory;
3030
import org.apache.ibatis.reflection.wrapper.DefaultObjectWrapperFactory;
3131
import org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory;
32+
import org.apache.ibatis.scripting.LanguageDriver;
33+
import org.apache.ibatis.scripting.LanguageDriverRegistry;
34+
import org.apache.ibatis.scripting.defaults.RawLanguageDriver;
35+
import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver;
3236
import org.apache.ibatis.session.Configuration;
3337
import org.apache.ibatis.session.ExecutorType;
3438
import org.apache.ibatis.session.SqlSessionFactory;
@@ -440,6 +444,42 @@ void testAddCache() {
440444
assertThat(this.factoryBean.getCache().getId()).isEqualTo("test-cache");
441445
}
442446

447+
@Test
448+
void testScriptingLanguageDriverEmpty() throws Exception {
449+
setupFactoryBean();
450+
this.factoryBean.setScriptingLanguageDrivers();
451+
LanguageDriverRegistry registry = this.factoryBean.getObject().getConfiguration().getLanguageRegistry();
452+
assertThat(registry.getDefaultDriver()).isInstanceOf(XMLLanguageDriver.class);
453+
assertThat(registry.getDefaultDriverClass()).isEqualTo(XMLLanguageDriver.class);
454+
}
455+
456+
@Test
457+
void testScriptingLanguageDriver() throws Exception {
458+
setupFactoryBean();
459+
this.factoryBean.setScriptingLanguageDrivers(new MyLanguageDriver1(), new MyLanguageDriver2());
460+
LanguageDriverRegistry registry = this.factoryBean.getObject().getConfiguration().getLanguageRegistry();
461+
assertThat(registry.getDefaultDriver()).isInstanceOf(XMLLanguageDriver.class);
462+
assertThat(registry.getDefaultDriverClass()).isEqualTo(XMLLanguageDriver.class);
463+
assertThat(registry.getDriver(MyLanguageDriver1.class)).isNotNull();
464+
assertThat(registry.getDriver(MyLanguageDriver2.class)).isNotNull();
465+
assertThat(registry.getDriver(XMLLanguageDriver.class)).isNotNull();
466+
assertThat(registry.getDriver(RawLanguageDriver.class)).isNotNull();
467+
}
468+
469+
@Test
470+
void testScriptingLanguageDriverWithDefault() throws Exception {
471+
setupFactoryBean();
472+
this.factoryBean.setScriptingLanguageDrivers(new MyLanguageDriver1(), new MyLanguageDriver2());
473+
this.factoryBean.setDefaultScriptingLanguageDriver(MyLanguageDriver1.class);
474+
LanguageDriverRegistry registry = this.factoryBean.getObject().getConfiguration().getLanguageRegistry();
475+
assertThat(registry.getDefaultDriver()).isInstanceOf(MyLanguageDriver1.class);
476+
assertThat(registry.getDefaultDriverClass()).isEqualTo(MyLanguageDriver1.class);
477+
assertThat(registry.getDriver(MyLanguageDriver1.class)).isNotNull();
478+
assertThat(registry.getDriver(MyLanguageDriver2.class)).isNotNull();
479+
assertThat(registry.getDriver(XMLLanguageDriver.class)).isNotNull();
480+
assertThat(registry.getDriver(RawLanguageDriver.class)).isNotNull();
481+
}
482+
443483
private void assertDefaultConfig(SqlSessionFactory factory) {
444484
assertConfig(factory, SqlSessionFactoryBean.class.getSimpleName(),
445485
org.mybatis.spring.transaction.SpringManagedTransactionFactory.class);
@@ -464,4 +504,10 @@ private void assertConfig(SqlSessionFactory factory, String environment,
464504
assertThat(factory.getConfiguration().getSqlFragments().size()).isEqualTo(0);
465505
}
466506

507+
private static class MyLanguageDriver1 extends RawLanguageDriver {
508+
}
509+
510+
private static class MyLanguageDriver2 extends RawLanguageDriver {
511+
}
512+
467513
}

0 commit comments

Comments
 (0)