mybatis直接执行sql语句

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

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

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

Xml代码 收藏代码
  1. <selectid="findRecords"parameterType="String"resultMap="orderTypeResultMap">
  2. ${sql}
  3. </select>

这样配置时,会出现:there no getter sql in java.lang.String 的异常

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

首先:

Xml代码 收藏代码
  1. <typeAliasalias="sqladapter"type="com.zj.logistics.util.SQLAdapter"/>

其次:

Java代码 收藏代码
  1. publicclassSQLAdapter{
  2. Stringsql;
  3. publicSQLAdapter(Stringsql){
  4. this.sql=sql;
  5. }
  6. publicStringgetSql(){
  7. returnsql;
  8. }
  9. publicvoidsetSql(Stringsql){
  10. this.sql=sql;
  11. }
  12. }

最后:

Xml代码 收藏代码
  1. <selectid="findRecords"parameterType="SQLAdapter"resultMap="orderTypeResultMap">
  2. ${sql}
  3. </select>

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

搞定。。


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

<select id="findRecords" parameterType="String" resultMap="orderTypeResultMap">
${value}
</select>

你可能感兴趣的:(mybatis)