首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

Grails中MyBatis插件的批改

2012-09-10 
Grails中MyBatis插件的修改Grails通过命令安装的iBATIS插件版本有些老,有些小限制,不能使用MyBATIS的Confi

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控制就好。

热点排行