Mybatis对数据库数据的查询

Mybatis对数据库数据的查询,第1张

Mybatis对数据库数据的查询 简单类型的映射 返回的是简单基本类型

接口中的定义

    int getAdminCount();//返回数据库总共还几条数据

xml中具体的实现

    
        select count(*) from admin
    

这里我选用了测试的一个jar包,就直接用来测试了,没有试用main方法。

    @Test//返回数据港总共还几条数据
    public void find3() {
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        AdminMapper mapper = sqlSession.getMapper(AdminMapper.class);

        int count = mapper.getAdminCount();

        System.out.println(count);
        sqlSession.commit();
        sqlSession.close();
    }

测试结果

返回多组数据

在数据库当中,查找多组的数据,就需要接受,而接受主要就靠的是集合来接受数据库所返回的数据。

接口中的定义:

    
    List getAdminList();//返回的数据以集合的形式
    //查询的结果是一个集合,这边通过List自动封装为集合

Mybatis中xml的定义:

     
	select * from dmin where id=#{id} 

复杂类型的返回 resultMap

特殊情况下,数据库的列名和属性名就是不一致,就要解决这个映射的问题。
那么这里就是使用resultMap。resultMap就是结果集的映射。就是自定义的一种映射

但是resultMap主要多用于多表关联。

定义 resultMap

resultMap中的的标签主要有个id(映射主键)和result(映射非主键)
column表示的数据库中的数据列名,property表示的是类中定义的属性名

如果类中的属性名和数据库中的列名一致,可以不用将全部的数据写在resultMap当中
只写一些所需要的数据名之间的联系,一样的是不用写的。

    
    
    
    
        
        
        
        
    
  1. resutlMap 的 id 属性是 resutlMap 的唯一标识,本例中定义为 “one”。
  2. resutlMap 的 id 属性是映射的 POJO 类。
  3. id 标签映射主键,result 标签映射非主键。
  4. property 设置 POJO 的属性名称,column 映射查询结果的列名称
使用resultMap
    
SELECT
emp.id,
emp.name ename,
emp.age,
d.name dname,
a.account
FROM employee emp LEFT JOIN dept d ON emp.deptId = d.id
			   LEFT JOIN admin a ON emp.adminId = a.id
WHERe emp.id = #{id}
    

方法的调用:(我采用了测试的jar包,所以可以不用main方法来使用,就直接启动函数)

 @Test
    public void find(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        EmployerMapper mapper = sqlSession.getMapper(EmployerMapper.class);

        Employer employer = mapper.getEmployerById(1);
        System.out.println(employer.getName());
        System.out.println(employer.getDept().getName());
        System.out.println(employer.getAdmin().getAccount());
        System.out.println(employer);
        sqlSession.commit();
        sqlSession.close();
    }

我采用了日志做到整体的一个输出

在这个关系中一个员工(employee)对应一个部门(dept)和一个 *** 作人(admin) 是一对一之间的关系




collection 就是针对于表之间的关系是一对一的

接口定义要实现的方法。

public interface DeptMapper {
    Dept getDeptById(int id);
}

Mybatis中在xml中具体的实现(一对一的关系)

 

    
        
        
        
        
            
        
        
        
            
        
    
    
    SELECT
        id,
        name,
        age,
        deptId,
        adminId
            FROM employee
                WHERe id = #{id}
    
    
        select account from admin where id = #{adminId};
    

调用方法

    @Test
    public void find2(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        EmployerMapper mapper = sqlSession.getMapper(EmployerMapper.class);

        Employer employer = mapper.getEmlpyeeById1(2);
        System.out.println(employer.getName());
        System.out.println(employer.getDept().getName());
        System.out.println(employer.getAdmin().getAccount());
        System.out.println(employer);
        sqlSession.commit();
        sqlSession.close();
    }

嵌套查询首次查询时,只查询主表的信息,关联表信息的获取是在用户需求时,再加载得到的。

懒加载(按需加载)

懒加载的使用可以有效的减少数据库的压力。

懒加载就是在嵌套循环上加了一个setting的全局配置。

在标签里也要这个这个赋上lazy值,fetchType="lazy"意为开启延迟加载(需要时,才会触发查询)
懒加载的前提就是首先必须是一个嵌套查询

在核心配置文件中通过 settings 配置 lazyLoadingEnabled 来关闭嵌套查询。

    
        
    

以上面的嵌套循环为基础,实现这个懒加载。

打一个断点,使用debug进行一步一步调试。

  1. 第一个
  2. 第二个
  3. 第三个
    这就是懒加载的方式与过程。

上一篇:>>> Mybatis对数据的增删改查

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5433953.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存