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