MyBatis

一、#和$的区别

$接收的参数不经过处理直接拼接到SQL上,属于一种SQL注入,安全性较低,容易被成为攻击数据库的方式,常用于构建动态表名、动态列名、动态条件。#接收的参数会经过处理后转化成字符串,安全性高,常用于接收前端传到后端的SQL搜索条件。

二、动态SQL
新增操作,使用主键回填,回填到数据模型里的id属性
 
    insert into system_user 
    
      .name, -> 添加前缀'(',删除前缀'.',添加后缀')',删除后缀','
    
    values (#{name})

trim里的原始内容: .name,
prefix:给原始内容添加前缀'(' -> (.name,
prefixOverrides:给原始内容删除前缀'.' -> (name,
suffixOverrides:给原始内容删除后缀',' -> (name
suffix:给原始内容添加后缀')' -> (name)
prefixOverrides\suffixOverrides="AND|OR"; -> 删除可能性的前缀

删除操作

    delete from system_user where id = #{id}


更新操作

    update system_user
     -> 自动清除多余的逗号,避免SQL语法错误
        
            name = #{name},
        
    
    where id = #{id}


数据映射集,column指数据库列名,property指数据模型属性名,名称相同可以不配置
查询语句会把结果存储到column中,通过映射关系,将结果设置到数据模型上
一对一或者一对多查询时,通过{key=value}的形式将传参通过column属性传递到子查询语句中
鉴别器根据某些条件决定级联的方案,例如根据性别获取人的体检信息

     -> 配置数据模型的构造方法
      
      
    
     -> ID列,重复会删除多余的数据
     -> 普通数据字段列
     -> 一对一
     -> 一对多
     -> 鉴别器
       -> 查询男性体检表
       -> 查询女性体检表
    



    
    select * from health_male where user_id = #{id} -> 子查询(male)



    
    select * from health_female where user_id = #{id} -> 子查询(female)


主查询语句


子查询语句


SQL片段

  id,name,sex

select  from system_user
三、存储过程
DROP PROCEDURE SCORE; -> MySQL

CREATE PROCEDURE SCORE(IN date VARCHAR(10)) -> 统计学生每次测验的总分
BEGIN
    DROP TABLE IF EXISTS provisionally;
    CREATE TEMPORARY TABLE provisionally
    (
        name VARCHAR(20),
        score INT(11),
        date VARCHAR(20)
    );
    INSERT INTO provisionally (name,score,date)
    SELECT student.name,SUM(exam.score),exam.date FROM student
    INNER JOIN exam ON student.id = exam.student_id
    GROUP BY student.name,exam.date;
    IF date IS NULL THEN 
        SELECT * FROM provisionally ORDER BY score DESC;
    ELSE
        SELECT * FROM provisionally WHERE provisionally.date = date
        ORDER BY score DESC;
    END IF;
END

CALL SCORE(null); -> 查出所有的信息

public interface StudentExamDao{ -> Mybatis
  List> score(String date);
}


你可能感兴趣的:(MyBatis)