怎么获取mybatis运行的sql语句

怎么获取mybatis运行的sql语句,第1张

在项目中,使用的是mybatis305,但没有采用其提供的DAO层接口映射的策略,而且在进行多种属性联合查找时,需要底层提供通用的解决方案,所以需要mybatis直接执行sql语句,各个daoImpl均可调用,减少了在每个mybatis文件中配置符合当前对象的select查询。。

(在mybatis中,需要通过传递对象,在select中判断对象属性是否为空进行where语句的拼凑,对后期的维护工作带来不小的考验,所以采用直接执行sql策略)

先说一说配置时,遇到的异常:

Xml代码

<select id="findRecords" parameterType="String" resultMap="orderTypeResultMap">

${sql}

</select>

这样配置时,会出现:there no getter sql in JavalangString 的异常

所以考虑:用一个适配器,将sql作为属性加入其中

首先:

Xml代码

<typeAlias alias="sqladapter" type="comzjlogisticsutilSQLAdapter" />

其次:

Java代码

public class SQLAdapter {

String sql;

public SQLAdapter(String sql) {

thissql = sql;

}

public String getSql() {

return sql;

}

public void setSql(String sql) {

thissql = sql;

}

}

最后:

Xml代码

<select id="findRecords" parameterType="SQLAdapter" resultMap="orderTypeResultMap">

${sql}

</select>

注意,不要忘记在调用该select方法时,用new SqlAdapter("自己写的sql语句")作为参数哦。。。

搞定。。

真能折腾人的,这个直接写 value 不就可以了?

<select id="findRecords" parameterType="String" resultMap="orderTypeResultMap">

${value}

</select>

解决方法:如果确认是单条数据,可以直接 Object (); 。没有封装成对象时,默认返回的是List<Map<字段名称String,列值Object>>这样的数据。Dao接口:

List<Map<String,Object>> list(Integer id);

SQL:

<select id="list" parameterType="Integer" resultType="Map">。

拓展:

1、MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。iBATIS一词来源于"internet"和"abatis"的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(sDAO)。

2、MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

如何MyBatis中使用动态SQL查询与注释

静态 SQL:静态 SQL 语句一般用于嵌入式 SQL 应用中,在程序运行前,SQL 语句必须是确定的,例如 SQL 语句中涉及的列名和表名必须是存在的。静态 SQL 语句的编译是在应用程序运行前进行的,编译的结果会存储在数据库内部。而后程序运行时,数据库将直接执行编译好的 SQL 语句,降低运行时的开销。静态SQL在编译时已经确定了引用的表和列。 宿主变量不改变表和列信息。 可以使用主变量改变查询参数值, 但是不能用主变量代替表名或列名。

动态 SQL:动态 SQL 语句是在应用程序运行时被编译和执行的,不在编译时确定 SQL 的表和列,而是让程序在运行时提供,并将SQL 语句文本传给 DBMS 执行。 静态 SQL 语句在编译时已经生成执行计划。 而动态 SQL 语句,只有在执行时才产生执行计划。动态 SQL 语句首先执行 PREPARE 语句要求 DBMS 分析、确认和优化语句,并为其生成执行计划。例如,使用 DB2 的交互式工具 CLP 访问数据库时,用户输入的 SQL 语句是不确定的,因此 SQL 语句只能被动态地编译。动态 SQL 的应用较多,常见的 CLI 和 JDBC 应用程序都使用动态 SQL。

在service中把参数放到HashMap中

List list = new ArrayList();

listadd("x");

listadd("y");

listadd("z");

String s = "A"

Date d = new Date();

HashMap param = new HashMap();

paramput("list",list);

paramput("s",s);

paramput("d",d);

XXXDaoqueryXXX(param);

在Mybatis的Mapper中是这么写:

select from tab where zi_duan1 = #{s} and zi_duan2 = #{d}

and zi_duan3 in

<foreach item="item" index="index" collection="list" open="("

separator="," close=")">

#{item}

select t1 from tb_vocation_category t1,tb_vocation_category t2 where t1vocation_category_id = t2vocation_category_parent_id(+)

以上就是关于怎么获取mybatis运行的sql语句全部的内容,包括:怎么获取mybatis运行的sql语句、mybatis 查询数据库返回值某字段是 List 该怎么搞、如何MyBatis中使用动态SQL查询与注释等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9785911.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存