我正在使用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注释,我无法在界面中调用方法。 我不知道我是否遗漏了什么,有没有办法做到这一点??
感谢您的帮助。
答案 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,以了解如何创建和访问参数映射。