调用java方法在myBatis中生成SQL查询

时间:2014-05-22 10:25:52

标签: java sql mybatis ibatis

我正在使用myBatis编写一些SQL查询,问题是我的表有几列(大约50列)。所以写这样的insert查询:

<insert id="insert" parameterType="com.atos.tables.Table1>
  insert into ot ( id, c1, c2, ....,c50) values (#{id}, #{c1},#{c2},... #{c50})
</insert>

非常乏味。

我可以在java中创建一个自动生成String查询的方法,但是如何从mapper.xml调用此方法?

如果我使用myBatis注释,我无法在界面中调用方法。 我不知道我是否遗漏了什么,有没有办法做到这一点??

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我没有任何方法直接这样做。

您可以尝试在编译或部署时在您的映射器文件中根据需要在<sql> elements and then include them单独的文件中生成列。

MyBatis中还添加了这个statement-builders功能,它允许您从代码构建SQL,所以也许可以查看它。

答案 1 :(得分:1)

主要问题不在于查询字符串生成:这可以使用脚本支持轻松完成,例如使用mybatis-velocity

主要问题是动态设置参数。这可以通过定义将动态创建org.apache.ibatis.mapping.ParameterMapping的自定义指令在mybatis-velocity中完成。

它可以在mapper中使用:

<insert id="insert">
   insert into ot (
     #field_names('com.atos.tables.Table1')
   ) values ( @{id},
     #params_for_fields('com.atos.tables.Table1')
   )
</insert>

此处#field_names adn #params_for_fields是您需要实施的自定义指令。 field_names应该遍历作为参数传递的类字段,并生成以逗号分隔的字段列表。

params_for_fields应该创建新的参数映射,并将它们添加到由velocity语言驱动程序维护的参数列表中。

您可以查看内置的repeat指令和ParameterMappingCollector,以了解如何创建和访问参数映射。