`
qixin000
  • 浏览: 20889 次
  • 性别: Icon_minigender_1
  • 来自: 黑龙江
文章分类
社区版块
存档分类
最新评论

Grails中MyBatis插件的修改

阅读更多
Grails通过命令安装的iBATIS插件版本有些老,有些小限制,不能使用MyBATIS的Configuration.xml,建立的gateway里面的函数都是动态根据xml mapper文件自动生成的,如果想自己写,缺少SqlSession的注入
针对这些情况可以自己修改一下

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 = mappingXml.@namespace.text()
      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控制就好。
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics