MyBatis复杂Sql查询如何实现


这篇文章主要介绍“MyBatis复杂Sql查询如何实现”,在日常操作中,相信很多人在MyBatis复杂Sql查询如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MyBatis复杂Sql查询如何实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!resultMap 元素是 MyBatis 中最重要最强大的元素,之前所写的 sql 语句,返回值都是简单的基本数据类型或者某一个实体类,比如下面这段 sql 返回的就是最简单的 User 类型。现在思考一下下面这种情况,如果实体类中定义的某一个字段和数据库中的字段不一致怎么办?比如我定义了一个 User 类,包含 id 和 lastname 两个属性,而数据库中这两个字段的名字为 id 和 name。此时再执行查询时结果如下:lastname 这个字段直接为 null。这时候我们就可以使用 resultMap 来解决这个问题,resultMap 可免费云主机域名以将数据库中的字段映射到实体类上。column 代表数据库中的字段名,properties 代表实体类中的字段名,通过映射之后 Mybatis 就可以找到对应的字段。接下来结合学生与教室的案例模拟复杂场景:现在要实现一个多对一的查询需求,查询所有的学生,并将每个学生所在的教室包含在内。由于现在的情况是多学生和教室的关系是多对一,因此在构建实体类时在 Student 类上要加上 ClassRoom 变量。在 Java 的实体类代码中分别建立 Student 和 ClassRoom 的类:定义一个 StudentMapper 接口:编写 StudentMapper.xml上面的这种 sql 编写模式称为结果嵌套查询,首先通过一段 sql 查询语句将需要的信息查询出来,接着通过 resultMap 对结果进行拼接。这里使用 association 将 classRoom 的信息拼接到了 classRoom 类中,实现多对一查询。别忘了在配置类里把 mapper 映射加上,编写测试类:一个教室里有多个学生,如果想要查询每个教室中的所有学生,就会用到一对多查询。修改两个实体类,命名为 Student2 和 ClassRoom2,因为一个教室中有多个学生,因此在教室类中通过 List 的方式引入 Student2 类接着编写 Mapper 接口和对应的 Mapper.xml依旧是通过结果嵌套查询的方式,通过 sql 语句查询出结果,再通过 resultMap 进行组装,一对多查询用的是 collection。在配置文件中增加 mapper 映射器之后,编写一个测试类:总结成一点:对象的关联(多对一)使用 association,集合的关联(一对多)使用 collection。在上面的两个例子中,一次 sql 查询就将两个表的数据一次性查询了出来,这种方式就是即时加载。但是在某些业务场景下,可能只需要学生的信息或者教室的信息,而不需要两者的联表数据,这种时候就可以使用懒加载。以上边的 association 案例解释懒加载的实现。上边的例子中,通过联表查询一次性就查询出了学生信息和教室信息:如果想要通过懒加载实现,就需要把 sql 语句转换为:按照这个思路,建立 StudentLazyMapper 类:创建对应的 StudentLazyMapper.xml 文件,将原先的一条 sql 转换为两条 sql:在 mybatis-config.xml 中增加 mapper 映射,为了更好地看到懒加载效果,开启控制台日志输出,完整 xml 如下:新建一个测试类 StudentMapperLazyTest:这个时候是还没开启懒加载的,从运行结果可以看出,虽然代码中只需要得到 student 的 id,但是却查询了两张表:在配置文件的 setting 节点下开启懒加载的配置:再次运行测试代码:可以看到,只有 student 一张表被查询,实现了懒加载到此,关于“MyBatis复杂Sql查询如何实现”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注百云主机网站,小编会继续努力为大家带来更多实用的文章!

相关推荐: 如何使用uni-app打包H5

本文小编为大家详细介绍“如何使用uni-app打包H5”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何使用uni-app打包H5”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 找到项目中 manifest.json — …

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 03/02 15:41
Next 03/02 15:41

相关推荐