我需要执行在运行时由java代码生成的查询(非静态方法)。我已经知道如何使用注释和静态方法或使用xml mapper来构建动态查询,但它不适合我的情况。
有没有办法直接从java代码执行查询?
答案 0 :(得分:8)
Mybatis已有此功能,但您必须按如下方式使用适配器。
创建适配器类;
public class SQLAdapter { String sql; public SQLAdapter(String sql) { this.sql = sql; } public String getSql() { return sql; } public void setSql(String sql) { this.sql = sql; } }
创建SQLAdapter类的typeAlias
<typeAlias alias="sqladapter" type="com.zj.xxx.xxx.SQLAdapter" />
将select标记放在需要直接执行sql的每个对象xml中。
<select id="findRecords" parameterType="SQLAdapter" resultMap="xxxxxResultMap">
${sql}
</select>
将此选择方法称为
String _sql = "select * from table where... order by... limit..."; xxxxx.findRecords(new SQLAdapter(_sql));
事情已经完成。你不能再在xml文件中编写复杂的sql语言。祝你好运。
答案 1 :(得分:2)
似乎最好的答案是在这种情况下使用JDBC。
答案 2 :(得分:0)
您可以使用SQL查询作为文字参数:
<select id="findRecords" parameterType="string" resultMap="xxxxxResultMap">
${_parameter}
</select>
您只能传递where子句:
<select id="findRecords" parameterType="string" resultMap="xxxxxResultMap">
select * from records where ${_parameter}
</select>