栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis - XML

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis - XML

关系查询 一对一
public class Student {
    private Integer sId;
    private String sName;
    // 通过对象表示一对一(对象不能自动映射)
    private Teacher tId;
}

例题

查询每个学生的老师

关联查询




    SELECT * FROM student s
    left join
    teacher t
    on s.t_id = t.t_id



    
    
    
    
    
    
    
    
    
    
    
    
    
        
        
    

分步查询



    select * from teacher where t_id = #{tid}

一对多

一个对象关联多个对象

数据层面:通过外键

public class Teacher {
    private Integer tId;
    private String tName;
    // 通过集合表示一对多(集合不能自动映射)
    List stus;
}

例题

查询老师的所有学生

关联查询


    SELECT * FROM teacher;


    
    


    SELECT * FROM student s
    LEFT JOIN
    stu_cou sc
    ON s.s_id = sc.s_id
    LEFT JOIN
    course c
    ON sc.c_id = c.c_id


    
    
    
        
        
    

分布查询


    SELECT * FROM stu_cou sc
    JOIN
    course c
    ON sc.c_id = c.c_id AND sc.s_id = #{s_id}

延时加载(按需加载) 作用
  1. 提升数据查询效率

  2. 减少计算机压力

解决方案
  1. 使用关联查询,不使用分步查询

  2. 开启延迟加载(按需加载)

全局开启


    
    

局部开启

局部配置会覆盖全局配置



缓存

加快运行速度

查询时,第一次将查询出的数据在缓存中放一份。以后遇到同样的操作,直接从缓存读取

开启缓存

一级缓存

sqlSession级别缓存:在同一个sqlSession中做同样的数据查询,第二次查询会走缓存

开启方式:默认打开的

SqlSession sqlSession = SqlSessionUtil.getSqlSession();
StudentMapper mapper1 = sqlSession.getMapper(StudentMapper.class);
List students1 = mapper1.getStudentAndCouese();
// 走缓存
StudentMapper mapper2 = sqlSession.getMapper(StudentMapper.class);
List students2 = mapper2.getStudentAndCouese();
sqlSession.close();

二级缓存

mapper级别缓存 :同个mapper同个接口,第二次调用相同接口时走缓存

开启方式

全局配置文件中打开缓存开关


    
    

开启缓存接口对应mapper中声明一个cache标签


二级缓存底层实现基于对象序列化与反序列化实现

public class Student implements Serializable

参数传递 @Param
  1. 接口(删除指定用户)

    // @Param:对参数取别名
    Integer deleteUser(@Param("id")Integer id);

  2. 接口对应的xml配置

    
        
        DELETE FROM user WHERe uid = #{id}
    

传递Map
  1. XML中声明参数类型 —— map

    
    
        select  from user
    

    模糊查询

    模糊查询的模糊条件通过参数形式传递

    
        
        SELECT * FROM student where 1=1
        
            and s_name = #{stu.sName}
        
    
    where

    常与标签结合使用,语句发生拼接,自动加where关键字 ,删除第一个拼接语句连接词(and、or)

    
        SELECT * FROM products  
        
        
        
        
        
            
                OR name = #{name}
            
            
                OR location = #{location}
            
        
    
    choose、when、otherwise
    • 相当于if..else

    • when至少有一个,otherwise至多有一个

    • when只执行一个