eri*_*223 9 java database mybatis
我有一个使用mybatis进行对象持久化的应用程序.但是我有机会运行任意的sql(来自用户).我可以用mybatis做吗?
更新:
我选择使用dbutils(JDBC)来运行用户定义的sql,但我需要一个DataSource实例来创建QueryRunner.有什么方法可以从mybatis获取数据源吗?
Ita*_*tto 11
我用这个实用类:
import java.util.List;
import org.apache.ibatis.annotations.SelectProvider;
public interface SqlMapper {
static class PureSqlProvider {
public String sql(String sql) {
return sql;
}
public String count(String from) {
return "SELECT count(*) FROM " + from;
}
}
@SelectProvider(type = PureSqlProvider.class, method = "sql")
public List<?> select(String sql);
@SelectProvider(type = PureSqlProvider.class, method = "count")
public Integer count(String from);
@SelectProvider(type = PureSqlProvider.class, method = "sql")
public Integer execute(String query);
}
Run Code Online (Sandbox Code Playgroud)
您的问题类似于How to execute query direct from java code using mybatis?
我已经给出了这个问题的答案。但我希望这个解决方案能够帮助您。
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;
} }
Run Code Online (Sandbox Code Playgroud)
创建 SQLAdapter 类的 typeAlias
<typeAlias alias="sqladapter" type="com.zj.xxx.xxx.SQLAdapter" />
在每个需要直接执行sql的对象xml中放置select标签。
<select id="findRecords" parameterType="SQLAdapter" resultMap="xxxxxResultMap">
${sql}
</select>
Run Code Online (Sandbox Code Playgroud)
调用这个选择方法就像
Run Code Online (Sandbox Code Playgroud)String _sql = "select * from table where... order by... limit..."; xxxxx.findRecords(new SQLAdapter(_sql));
| 归档时间: |
|
| 查看次数: |
12876 次 |
| 最近记录: |