关于mybatis动态SQL语句的写法

本文介绍MyBatis框架中动态SQL的应用实例,包括模糊查询、条件查询、字段选择性插入与更新等操作,通过具体XML配置文件示例,展示了如何灵活地控制SQL语句生成。

由于mybatis是一个轻量级的框架,SQL语句shi自己写的,可以不断的优化SQL语句,提高查询的效率,近来用到了动态SQL,写了一些简单的SQL语句,如下所示:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.qf.dao.CarinfoMapper" >
  <resultMap id="BaseResultMap" type="com.qf.pojo.Carinfo" >  
    <id column="car_id" property="carId" jdbcType="BIGINT" />
    <result column="car_name" property="carName" jdbcType="VARCHAR" />
    <result column="car_color" property="carColor" jdbcType="VARCHAR" />
    <result column="car_price" property="carPrice" jdbcType="DOUBLE" />
    <result column="car_desc" property="carDesc" jdbcType="VARCHAR" />
  </resultMap>
  <sql id="Base_Column_List" >
    car_id, car_name, car_color, car_price, car_desc
  </sql>
  <!-- 动态SQL模糊查询,参数用map传递 -->
  <select id="findLikeCarinfo" parameterType="java.util.Map" resultMap="BaseResultMap">
          select 
          <include refid="Base_Column_List"></include>
          <!--include refid="Base_Column_List"参数不可以丢  -->
          from carinfo
          <where>
                 <if test="carName != null">
                        car_name like #{carName}
                 </if>
                 <if test="carColor != null">
                      and  car_color like #{carColor}
                 </if>
                 <if test="carDesc != null">
                       and car_desc like #{carDesc}
                 </if>
          </where>
  </select>
  <!-- 添加任意字段 -->
  <insert id="addTrimCarInfo" parameterType="java.util.Map">
         insert into carinfo
         <trim prefix="(" suffix=")" suffixOverrides=",">
                <if test="carName != null">
                         car_name,
                </if>
                <if test="carColor != null">
                         car_color,
                </if>
                <if test="carPrice != null">
                         car_price,
                </if>
                <if test="carDesc != null">
                         car_desc,
                </if>
         </trim>
         <!-- 关键点,在插入数据的时候,其 prefix="values("不能丢弃-->
         <trim prefix="values(" suffix=")" suffixOverrides=",">
                 <if test="carName != null">
                 #{carName},
                 </if>
                 <if test="carColor != null">
                 #{carColor},
                 </if>
                 <if test="carPrice != null">
                 #{carColor},
                 </if>
                  <if test="carDesc != null">
                 #{carDesc},
                 </if>
         
         </trim>
         
        <!--  (car_name,car_color,car_price,car_desc) values (#{carName},#{carColor},#{carPrice},#{carDesc}) -->
  
  </insert>
  <!-- 根据条件查询数据的时候,二选一 -->
  <select id="selectTiaoJian" parameterType="java.util.Map" resultMap="BaseResultMap">
            select 
            <include refid="Base_Column_List"></include>
            from carinfo where
            <choose>
              <when test="carColor != null">
                   car_color like #{carColor}
              </when>
              <otherwise>
                    car_price='23.4'
              </otherwise>
            </choose>
  </select>
  
  
  <!-- 根据多个参数去删除数据 -->
  <delete id="delMory" parameterType="com.qf.pojo.Carinfo">
        delete from carinfo where car_id in
        <foreach collection="ids" item="id" open="(" separator="," close=")">
               #{id}
               <!-- 此处的item是别名的意思,所以此处要使用别名来处理 -->
        </foreach>
  
  </delete>
  
  <!-- 修改任意字段 -->
<update id="updateCarINfo" parameterType="java.util.Map">
      update carinfo
    <set >
         <if test="carName != null">
                car_name=#{carName},
         </if>
         <if test="carColor != null">
               car_color=#{carColor},
         </if>
         <if test="carDesc != null">
               car_desc=#{carDesc},
         </if>
         <if test="carPrice != null">
               car_price=#{carPrice},
         </if>
    </set>
          where car_id = # {carId}
</update>  
  
  
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
    
    select 
    <include refid="Base_Column_List" />
    from carinfo
    where car_id = #{carId,jdbcType=BIGINT}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
    
    delete from carinfo
    where car_id = #{carId,jdbcType=BIGINT}
  </delete>
  <insert id="insert" parameterType="com.qf.pojo.Carinfo" >
    
    insert into carinfo (car_id, car_name, car_color, 
      car_price, car_desc)
    values (#{carId,jdbcType=BIGINT}, #{carName,jdbcType=VARCHAR}, #{carColor,jdbcType=VARCHAR}, 
      #{carPrice,jdbcType=DOUBLE}, #{carDesc,jdbcType=VARCHAR})
  </insert>
  <insert id="insertSelective" parameterType="com.qf.pojo.Carinfo" >
    
    insert into carinfo
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="carId != null" >
        car_id,
      </if>
      <if test="carName != null" >
        car_name,
      </if>
      <if test="carColor != null" >
        car_color,
      </if>
      <if test="carPrice != null" >
        car_price,
      </if>
      <if test="carDesc != null" >
        car_desc,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
      <if test="carId != null" >
        #{carId,jdbcType=BIGINT},
      </if>
      <if test="carName != null" >
        #{carName,jdbcType=VARCHAR},
      </if>
      <if test="carColor != null" >
        #{carColor,jdbcType=VARCHAR},
      </if>
      <if test="carPrice != null" >
        #{carPrice,jdbcType=DOUBLE},
      </if>
      <if test="carDesc != null" >
        #{carDesc,jdbcType=VARCHAR},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.qf.pojo.Carinfo" >
    
    update carinfo
    <set >
      <if test="carName != null" >
        car_name = #{carName,jdbcType=VARCHAR},
      </if>
      <if test="carColor != null" >
        car_color = #{carColor,jdbcType=VARCHAR},
      </if>
      <if test="carPrice != null" >
        car_price = #{carPrice,jdbcType=DOUBLE},
      </if>
      <if test="carDesc != null" >
        car_desc = #{carDesc,jdbcType=VARCHAR},
      </if>
    </set>
    where car_id = #{carId,jdbcType=BIGINT}
  </update>
  
  <update id="updateByPrimaryKey" parameterType="com.qf.pojo.Carinfo" >
    
    update carinfo
    set car_name = #{carName,jdbcType=VARCHAR},
      car_color = #{carColor,jdbcType=VARCHAR},
      car_price = #{carPrice,jdbcType=DOUBLE},
      car_desc = #{carDesc,jdbcType=VARCHAR}
    where car_id = #{carId,jdbcType=BIGINT}
  </update>
</mapper>


06-22
### 得物技术栈及开发者文档分析 得物作为一家专注于潮流商品的电商平台,其技术栈和开发者文档主要围绕电商平台的核心需求展开。以下是对得物技术栈及相关开发资源的详细解析: #### 1. 技术栈概述 得物的技术栈通常会涵盖前端、后端、移动应用开发以及大数据处理等多个领域。以下是可能涉及的主要技术栈[^3]: - **前端开发**: 前端技术栈可能包括现代框架如 React 或 Vue.js,用于构建高效、响应式的用户界面。此外,还会使用 Webpack 等工具进行模块化打包和优化。 - **后端开发**: 后端技术栈可能采用 Java Spring Boot 或 Node.js,以支持高并发和分布式架构。数据库方面,MySQL 和 Redis 是常见的选择,分别用于关系型数据存储和缓存管理。 - **移动应用开发**: 得物的移动应用开发可能基于原生技术(如 Swift/Kotlin)或跨平台框架(如 Flutter)。这有助于确保移动端应用的性能和用户体验一致性。 - **大数据云计算**: 在大数据处理方面,得物可能会使用 Hadoop 或 Spark 进行数据挖掘和分析。同时,依托云服务提供商(如阿里云或腾讯云),实现弹性扩展和资源优化。 #### 2. 开发者文档分析 类似于引用中提到的 Adobe 开发者文档模板[^2],得物也可能提供一套完整的开发者文档体系,以支持内部团队协作和外部开发者接入。以下是开发者文档可能包含的内容: - **API 文档**: 提供 RESTful API 或 GraphQL 的详细说明,帮助开发者快速集成得物的功能模块,例如商品搜索、订单管理等。 - **SDK 集成指南**: 针对不同平台(如 iOS、Android 或 Web)提供 SDK 下载和集成教程,简化第三方应用的开发流程。 - **技术博客**: 分享得物在技术实践中的经验成果,例如如何优化图片加载速度、提升应用性能等。 - **开源项目**: 得物可能将部分技术成果开源,供社区开发者学习和贡献。这不仅有助于提升品牌形象,还能吸引更多优秀人才加入。 #### 3. 示例代码 以下是一个简单的示例代码,展示如何通过 RESTful API 调用得物的商品搜索功能(假设接口已存在): ```python import requests def search_items(keyword, page=1): url = "https://api.dewu.com/v1/items/search" headers = { "Authorization": "Bearer YOUR_ACCESS_TOKEN", "Content-Type": "application/json" } params = { "keyword": keyword, "page": page, "size": 10 } response = requests.get(url, headers=headers, params=params) if response.status_code == 200: return response.json() else: return {"error": "Failed to fetch data"} # 调用示例 result = search_items("Air Jordan", page=1) print(result) ``` 此代码片段展示了如何通过 Python 请求得物的 API,并获取指定关键词的商品列表。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值