Mybaits--动态拼接SQL语句之常用标签(包含一对多双向配置所用标签)

先看一下有哪些常用标签

这里写图片描述

where标签 及使用前后效果对比

使用where标签前
    <select id="queryMessageList" parameterType="com.imooc.bean.Message"
        resultMap="MessageResult">
        select ID,COMMAND,DESCRIPTION,CONTENT from MESSAGE where 1=1
        <!-- &&=&amp;&amp;=and " "=&quot;&quot; #{} = ? -->
        <if test="command !=null &amp;&amp;!&quot;&quot;.equals(command.trim())">
            and COMMAND=#{command}
        </if>
        <if test="description != null and !&quot;&quot;.equals(description.trim())">
            and DESCRIPTION like '%' #{description} '%'
        </if>
    </select>

使用where标签后(仅仅少了where1=1这个小技巧)
<select id="queryMessageList" parameterType="com.imooc.bean.Message"
        resultMap="MessageResult">
        select ID,COMMAND,DESCRIPTION,CONTENT from MESSAGE
        <where>
            <!-- &&=&amp;&amp;=and " "=&quot;&quot; #{} = ? -->
            <if test="command !=null &amp;&amp;!&quot;&quot;.equals(command.trim())">
                and COMMAND=#{command}
            </if>
            <if
                test="description != null and !&quot;&quot;.equals(description.trim())">
                and DESCRIPTION like '%' #{description} '%'
            </if>
        </where>
    </select>

sql 标签 及引用

作用:

1.相当于定义一个常量属性,用的时候就进行引用,提升代码的复用性。

2.数据库字段的扩展不会对原有的sql语句产生影响。


<sql id="columns">ID,COMMAND,DESCRIPTION,CONTENT</sql>

<select id="queryMessageList" parameterType="com.imooc.bean.Message"
        resultMap="MessageResult">

        select <include refid="columns"></include> from MESSAGE

        <where>
            <!-- &&=&amp;&amp;=and " "=&quot;&quot; #{} = ? -->
            <if test="command !=null &amp;&amp;!&quot;&quot;.equals(command.trim())">
                and COMMAND=#{command}
            </if>
            <if
                test="description != null and !&quot;&quot;.equals(description.trim())">
                and DESCRIPTION like '%' #{description} '%'
            </if>
        </where>
    </select>

set 标签

作用:在update语句中解决动态修改多个值SQL语句的拼接问题

  <update id="">
        update MESSAGE
        <set>
            <if test="command !=null &amp;&amp;!&quot;&quot;.equals(command.trim())">
                COMMAND=#{command},
            </if>
            <if test="description != null and !&quot;&quot;.equals(description.trim())">
                DESCRIPTION = #{description},
            </if>
        </set>
    </update>

trim 标签

作用:根据项目需求,灵活解决动态SQL语句的拼接问题

  相当于where标签自动去除SQL语句where前边的and/or
  suffix="后缀,下标"  代表如果标签中有输入值则输出suffix="后缀,下标"定义的内容
  <trim prefix="where" suffix="后缀,下标" prefixOverrides="and/or">

  </trim>

 相当于set标签自动去除SQL语句后边的','        
 <trim prefix="set" suffixOverrides=",">

 </trim>

choose 标签

作用:相当于

if(){}

elseif(){}

else{},根据逻辑条件动态拼接SQL语句

<select id="queryMessageList" parameterType="com.imooc.bean.Message"
        resultMap="MessageResult">
        select
        <include refid="columns"></include>
        from MESSAGE
        <where>
            <choose>

                <when
                    test="description != null and !&quot;&quot;.equals(description.trim())">
                    and DESCRIPTION like '%' #{description} '%'
                </when>

                <when
                    test="command !=null &amp;&amp;!&quot;&quot;.equals(command.trim())">
                    and COMMAND=#{command}
                </when>

                <otherwise>and COMMAND=#{command}</otherwise>

            </choose>
        </where>
    </select>

    <sql id="columns">ID,COMMAND,DESCRIPTION,CONTENT</sql>

association 标签 (多对一关联映射)

作用:做关联查询的时候把父表的数据,映射到子表实体类中引用父类的对应【父类对象属性】中,通过此属性可以取出父表中的取值

 <mapper namespace="CommandContent">
  <resultMap type="com.imooc.bean.CommandContent" id="Content">
    <id column="ID" jdbcType="INTEGER" property="id"/>
    <result column="CONTENT" jdbcType="VARCHAR" property="content"/>
    <result column="COMMAND_ID" jdbcType="VARCHAR" property="commandId"/>

    <association property="字表引用父表的属性名" resultMap="(父表配置中)namespace.resultMap-id"></association>

  </resultMap>
</mapper>

collection 标签 (一对多关联映射)

作用:做关联查询的时候把子表的数据,映射到父表实体类中引用子类的对应【子类集合属性】中,通过此属性可以取出子表中的取值

    <resultMap type="com.imooc.bean.Command" id="Command">

        <!-- column对应的为sql语句中字段名,如果给字段取别名,column必须配置为别名才能被识别 -->
        <id column="C_ID" jdbcType="INTEGER" property="id" />
        <result column="NAME" jdbcType="VARCHAR" property="name" />
        <result column="DESCRIPTION" jdbcType="VARCHAR" property="description" />

        <!-- 【一方】配置文件中【引用】 【一方】实体类定义的【多方】的集合 -->
        <collection property="contentList" resultMap="CommandContent.Content" />
    </resultMap>
</mapper>

forech 标签 (遍历集合)

作用:多用于查询语句的in语句中,用来遍历集合,达到select * from tablename where column in (1,2,3,4…,n)语句的效果;

    <!--包含递归算法的in语句和遍历集合-->
    <select id="selectByNameAndCategoryIds" resultMap="BaseResultMap" parameterType="map">
        SELECT
        <include refid="Base_Column_List"></include>
        from mmall_product
        where status = 1
        <if test="productName!=null">
            AND name LIKE #{productName}
        </if>
        <if test="categoryIdList !=null">
            and category_id in 
            <foreach collection="categoryIdList" item="item" open="(" close=")" index="indext" separator=",">
                #{item}
            </foreach>
        </if>
    </select>

</mapper>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MyBatis是一个Java持久层框架,它可以将SQL语句与Java对象进行映射,从而实现对数据库的访问。在MyBatis中,我们可以使用XML或注解的方式来编写SQL语句,并通过MyBatis提供的API来执行SQL语句。这样可以大大简化数据库访问的代码。 在使用MyBatis时,我们可以通过在XML文件或注解中编写SQL语句,然后使用MyBatis提供的API将SQL语句与Java对象进行映射。例如,我们可以使用以下的XML文件来定义一个查询语句: ``` <select id="getUserById" resultType="User"> select * from user where id = #{id} </select> ``` 然后使用以下的Java代码来执行该查询语句: ``` SqlSession session = sessionFactory.openSession(); User user = session.selectOne("getUserById", 1); session.close(); ``` 这样就可以通过MyBatis来访问数据库了。 ### 回答2: MyBatis 是一个流行的 Java 持久层框架,它的核心思想是通过 XML 或注解的方式将 SQL 语句与 Java 代码解耦。在使用 MyBatis 时,我们可以将 SQL 语句写在 XML 文件中,并且通过不同的方法来调用这些 SQL 语句,这样可以使得数据库操作变得简单而灵活。 使用 MyBatis 的主要步骤包括配置数据源、配置 SQL 映射文件和编写 Java 代码。首先,我们需要配置数据源,告诉 MyBatis 数据库连接相关的信息。然后,我们可以编写 SQL 映射文件,这些文件包含了各种 SQL 语句以及对应的参数映射关系。在编写 SQL 语句时,我们可以使用不同的标签动态拼接 SQL 语句,从而实现更加灵活的数据库操作。最后,我们可以使用 Java 代码来执行这些 SQL 语句,并获取数据库的返回结果。 相对于直接使用 JDBC 进行数据库操作,使用 MyBatis 可以省去大量繁琐的 JDBC 代码,同时可以提供更好的可维护性和可扩展性。MyBatis 还提供了一些高级特性,比如分页查询、缓存机制等,这些特性可以帮助我们更好地优化数据库操作性能。 总之,MyBatis 是一个非常好用的 Java 持久层框架,它通过将 SQL 语句与 Java 代码解耦,使得数据库操作更加简单和灵活。使用 MyBatis 可以提高开发效率,并且为我们提供了一些高级特性来优化数据库操作性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值