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

6.mybatis结果处理

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

6.mybatis结果处理

1.resultMap

        resultMap属性:

        id 唯一标识, 需要和         autoMapping 自动映射,(默认=true) 只要字段名和属性名遵循映射规则就可以自动映射,但是不建议,哪怕属性名和字段名一一对应上了也要显示的配置映射
        extends  如果多个resultMap有重复映射,可以声明父resultMap,将公共的映射提取出来, 可以减少子resultMap的映射冗余

        resultMap对应列属性:

         id 主键必须使用  对底层存储有性能作用
         column  需要映射的数据库字段名
         property 需要映射的pojo属性名

2.多对一查询 2.1 普通的多对一的查询

        创建dto对象,用resultMap进行映射

        property=对象.属性名

2.2 association多对一的查询

        其中属性:

        property:指定的“一”,指定对象中的嵌套对象属性

        javaType:类型,property对应的类(一般用全限定名,也可用别名),不常用。

        resultMap:调用已存在的映射(resultMap),常用。

        注意:强行使我们的结果映射为多对一,即使不是多对一也会强行映射为多对一,并且底层是根据多的id来组织数据的,所以一定要把id查出来。比如:查询人和部门关联查询时,一个部门有多个人,所以要查询人的id

        当出现列名和指定的resultMap不一致时:

        解决:1.自己制定

                2.使用columnPrefix来替换前缀,所以resultMap指定的对象类型我们要提前起好统一的前缀,比如部门就可以统一添加dept_

3.collection多对一查询

        其中属性:

        property:映射一对多的多

        ofType:自定义映射,对应多的list集合中指定的泛型(查询部门员工信息中的员工)

        resultMap:调用已存在的映射,同样当列名和指定的映射名不一致时,使用columnPrefix来替换前缀,所以resultMap指定的对象类型我们要提前起好统一的前缀,比如员工就可以统一添加emp_

         注意:强行使我们的结果映射为一对多时,和多对一一样,即使不是多对一也会强行映射为多对一,并且底层是根据一的id来组织数据的(其实就是主表),所以一定要把id查出来。比如:查询部门和人关联查询时,一个部门有多个人,所以要查询部门的id。

        无论是collection还是association都属于嵌套结果,在查询时都要查询出主表id,否则mybatis不能正常结果的数据结构。

4.嵌套查询

        

联合查询和分步查询区别,性能区别不大,但有些特殊场景需要嵌套查询,比如部分分页查询

SELECT * FROM dept d LEFT JOIN emp e on d.id=e.dept_id LIMIT 3 

 

我要前两个部门岗位,但是现在只显示了一个部门,所以这种情况下就不能再使用嵌套结果,而是需要嵌套查询。

 

5.懒加载

        当我们在进行表关联的时候,有可能在查询结果的时候不需要关联对象的属性值,那么此时可以通过延迟加载来实现功能。在全局配置文件中添加如下属性mybatis-config.xml

        
        
        
        
        

如果设置了全局加载,但是希望在某一个sql语句查询的时候不使用延时策略,可以添加fetchType下属性:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/281668.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号