MyBatis数据持久化 SQL复用(可重用的 SQL 代码段)

1、修改pom.xml,升级MyBatis版本升级到3.3.0以上版本
2、刷新maven(两种方式)
A. 命令方式
在terminal窗口输入:

mvn clean install -Dmaven.test.skip=true

小注:
clean 移除所有上一次构建生成的文件
install 将包安装至本地仓库,以让其它项目依赖
maven.test.skip 跳过测试

该方式需要先定位到pom.xml所在的文件夹,再执行命令。
这里写图片描述

B. 工具操作方式:
利用idea中的Maven工具来操作,先clean后install
这里写图片描述
AB两种方式,操作完成后,最好刷新一下
这里写图片描述
如果还是不行,删除一下target文件
这里写图片描述
3、代码编写

<sql id="sqlDemo1">
    SELECT * FROM tableA
    <where>
        tableA.code=#{code}
        <if test="city != null and city!= ''">
            AND tableA.city = #{city}
        </if>
    </where>
</sql>
<sql id="sqlDemo2">
    SELECT * FROM tableB
    <where>
        tableB.city IN
        (
        <include refid="sqlDemo1">
            <property name="city" value="${city}"/>
            <property name="code" value="${code}"/>
        </include>
        )
    </where>
</sql>
<select id="getList" parameterType="Map" resultType="Map">
    <include refid="sqlDemo2">
        <property name="city" value="${city}"/>
        <property name="code" value="${code}"/>
    </include>
</select>

该代码主要演示了:sql片段可以嵌套,可以动态传值,但注意在给property的value传值时,只能用$,用#的会导致在sql中取不到值。
上面用的ide是:IntelliJ IDEA 15.0.6
用property的时候idea有可能报错如下,但编译可以通过不影响使用:
这里写图片描述
至于sql片段传递固定值,可以参考以下说明

=================传递固定值=====================
这个元素可以被用来定义可重用的 SQL 代码段,可以包含在其他语句中。它可以被静态地(在加载参数) 参数化. 不同的属性值通过包含的实例变化. 比如:

<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>

这个 SQL 片段可以被包含在其他语句中,例如:

<select id="selectUsers" resultType="map">
  select
    <include refid="userColumns"><property name="alias" value="t1"/></include>,
    <include refid="userColumns"><property name="alias" value="t2"/></include>
  from some_table t1
    cross join some_table t2
</select>

属性值可以用于包含的refid属性或者包含的字句里面的属性值,例如:

sql id="sometable">
  ${prefix}Table
</sql>

<sql id="someinclude">
  from
    <include refid="${include_target}"/>
</sql>

<select id="select" resultType="map">
  select
    field1, field2, field3
  <include refid="someinclude">
    <property name="prefix" value="Some"/>
    <property name="include_target" value="sometable"/>
  </include>
</select>

小注:传递传递值部分摘自《MyBatis官方文档》,链接地址:
http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html

作者:jiankunking 出处:http://blog.csdn.net/jiankunking

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值