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

Mybatis关联查询

Java 更新时间:发布时间: 百科书网 趣学号
标题## Mybatis关联查询 1.一对一查询

员工表pojo

@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class Emp implements Serializable {
    private Integer id;
    private String name;
    private Integer age;
//    private Integer deptId;
    private Dept dept;//一个员工对应一个部门,所以使用对象封装
}

部门表pojo

@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class Dept implements Serializable {
    private Integer deptId;
    private String deptName;
    private List emps;//一个部门有多个员工,所以使用list封装
}

查询员工表emp所对应的部门表dept。两种方式:

1.1单条sql语句查询

    select emp.id,emp.name,emp.age,emp.dept_id,dept.dept_name
    from emp join dept on emp.dept_id=dept.dept_id

    
        
        
            
            
        
    
1.2子查询

子查询的说明:
1.column=“子查询的字段信息”
2.select= “sql的ID” 作用:根据column中的数据 实现子查询!!!


        select * from dept where dept_id=#{dept_id}
    

    
        
        
    

2.一对多查询

关于一对多 数据封装说明:
collection: 封装集合的固定写法.
property: 指定属性
ofType: 封装List集合的泛型对象

    
        SELECT dept.dept_id,dept.dept_name,emp.id,emp.name,emp.age
        FROM dept LEFT JOIN emp ON dept.dept_id=emp.dept_id
    

    
        

        
            
        
    
3.缓存机制 3.1一级缓存

概念说明: Mybatis默认开启一级缓存, 一级缓存可以在同一个SqlSession对象中查询相同的数据,可以实现数据的共享(缓存操作).

3.2二级缓存

说明: 二级缓存mybatis中默认也是开启的.但是需要手动标识. 二级缓存可以在同一个SqlSessionFactory内部有效。
一级缓存关闭后才会交给二级缓存(sqlSession.close())

 @Test//一级缓存测试对比1
    public void testSqlSession(){
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
        deptMapper.findMore();
        deptMapper.findMore();
        deptMapper.findMore();//相同的SqlSession,只执行查询一次
        sqlSession.close();
    }
    @Test//一级缓存测试对比2
    public void testSqlSession2(){
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
        deptMapper.findMore();

        SqlSession sqlSession2 = sqlSessionFactory.openSession(true);
        DeptMapper deptMapper2 = sqlSession2.getMapper(DeptMapper.class);
        deptMapper2.findMore();
        //不同的SqlSession,执行查询了两次
        sqlSession.close();
        sqlSession2.close();
    }

    @Test//二级缓存测试
    public void testSqlSession3(){
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
        deptMapper.findMore();
        sqlSession.close();//关闭后交给二级缓存

        SqlSession sqlSession2 = sqlSessionFactory.openSession(true);
        DeptMapper deptMapper2 = sqlSession2.getMapper(DeptMapper.class);
        deptMapper2.findMore();
        sqlSession2.close();
    }
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/270231.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号