针对这些情况可以自己修改一下
1) MyBatis的很多配置功能无法全面利用,例如别名,MyBatis插件,环境信息,缓存等,要利用MyBatis的所有配置功能,添加对配置文件的支持
def doWithSpring = { def ssfb = sqlSesssionFactoryBean(org.mybatis.spring.SqlSessionFactoryBean) { dataSource = ref('dataSource') mapperLocations = mappingSupport.getArtefactResourcePaths(application) configLocation = "classpath:Configuration.xml";//new ClassPathResource("Configuration.xml"); 添加此行代码 } sqlSessionTemplate(org.mybatis.spring.SqlSessionTemplate, ref('sqlSesssionFactoryBean'))
添加一行configLocation属性即可
2)如果想在gateway自己写函数,控制事务,修改如下:
def registerMappings(GrailsClass g, GrailsApplication application) { log.debug("Registering mappings for class " + g) def operationIds = [:] def namespace String filename = getIbatisFilename(g.fullName) try { def mappingXml = loadIbatisFile(filename, g) namespace = [email protected]() operationIds = getOperationIds(mappingXml) } catch (e) { log.error("Failed to load iBATIS SQL map file ${filename}", e) } def mc = g.clazz.metaClass mc.sqlMapper = application.mainContext.getBean('sqlSessionTemplate') //添加此行代码 operationIds.each {String opType, ids -> ids.each {String id ->....
这里添加了sqlMapper的实例注入,你就可以在gateway中这样写代码了,剩下的就是MyBatis的东西了,没什么好说的了。
def myHello(def args){ return sqlMapper.selectOne("selectDirectory",args); }
注意这里自定义的东西最好不要启动事务,统一在Grails 的Service里面由Spring控制就好。