动态SQL的补充及web的b/s架构

发布于:2025-07-22 ⋅ 阅读:(17) ⋅ 点赞:(0)

一、动态sql的补充

1.set:替代sql语句中的set关键字 特点:1.set会自动去掉末尾的“,”

 <update id="updateSet" parameterType="Emp">
        update emp
        <set>
            <if test="ename !=null">
                ename=#{ename},
            </if>
            <if test="egender !=null">
                egender=#{egender},
            </if>
        </set>
        where eid=#{eid}
    </update>

2. trim:可以完成where与set的功能 语法:<trim prefix = “关键字” suffixOverrides = “后缀” prefixOverrides=“前缀”></trim> 注意点: 1.prefix,suffix会根据sql语句智能的添加前缀或后缀 2.prefixOverrides,suffixOverrides会智能的帮出去除多余的“and or ,”

 <select id="TrimOne" parameterType="Emp" resultType="Emp">
        select * from emp
        <trim prefix="where" prefixOverrides="and">
            <if test="ename!=null">
                and ename=#{ename}
            </if>
            <if test="egender !=null">
                and egender=#{egender}
            </if>
        </trim>
    </select>

3.如果没有写set 会默认给加一个set       prefixOverrides,suffixOverrides会智能的帮出去除多余的“and or ,”

  <update id="TrimTwo" parameterType="Emp">
        update emp
        <trim prefix="set" suffixOverrides=",">
            <if test="ename !=null">
                ename=#{ename}
            </if>
            <if test="egender !=null">
                egender=#{egender},
            </if>
        </trim>
        where eid=#{eid};
    </update>

4.  collection:list array表示遍历集合或者数组

item:创建变量用来保存每次遍历的数据

open:开始时候拼接的元素,只执行一次

close:结束的候拼接的元素,只执行一次

separator:每个元素的分隔符号,每次循环完执行;

index:下标

 <select id="findByArray" parameterType="int[]" resultType="Emp">
        select * from emp where esalary in
          <foreach collection="array" item="nums" open="(" separator=","
                   close=")">
              #{nums}
          </foreach>
    </select>

<select id="findByList" parameterType="list" resultType="Emp">
        select * from emp where esalary in
          <foreach collection="list" item="a" open="(" separator=","
                   close=")">
              #{a}
          </foreach>
    </select>

二、动态sql的注解方式

 动态sql的注解方式

   MyBatis 在执行该映射方法时,会调用 EmpDao 类中的 findSql 方法
   findSql 方法返回的字符串将作为实际执行的 SQL 语句
@ResultMap("maps")//相对于xml中的ResultMap属性
    @SelectProvider(type = Empsql.class,method = "findSql")
    public List<Emp> findSql(Emp emp);
package com.ape.dao;

import com.ape.pojo.Emp;

public class Empsql {

    public String findSql(Emp emp){
        String sql="select * from emp where 1 = 1 ";
        if(emp.getEname()!=null){
            sql+="and ename=#{ename}";
        }
        if(emp.getEgender()!=null){
            sql+="and egender=#{egender}";
        }
        return sql;
    }
}

 测试方法

  @Test
    public void findSql() {
        Emp emp = new Emp();
        emp.setEname("安安");
        emp.setEgender("女");
        List<Emp> sql = empDao.findSql(emp);
        for (Emp e : sql) {
            System.out.println(e);
        }
    }

三、BS架构

B/S 架构即浏览器 / 服务器架构,是一种通过浏览器作为客户端与服务器进行交互的软件架构模式。它将核心业务逻辑和数据存储集中在服务器端,客户端仅需通过浏览器(如 Chrome、Edge、Safari 等)即可访问服务,无需安装专门的客户端软件。

B/S的工作原理:
         B/S 架构的工作流程(以 “查询商品” 为例)
  1. 用户在浏览器的电商网站输入商品名称,点击 “搜索”(客户端发送请求)。
  2. 应用服务器接收请求,解析需求(需要查询 “某商品” 的信息)。
  3. 应用服务器向数据库服务器发送查询指令(“查找商品名为 XX 的数据”)。
  4. 数据库服务器查询数据后,将结果返回给应用服务器。
  5. 应用服务器整理数据(如格式化展示内容),生成网页或数据格式(如 HTML、JSON)。
  6. 浏览器接收并显示结果(用户看到商品列表)。

网站公告

今日签到

点亮在社区的每一天
去签到