Mapper.xml中对象的关联

对象的关联,特别是manytoone的关联,有两种方式:发送一条额外sql去查询和内联的方式

发送一条额外sql:当我在使用到这个关联对象的时候,我发送一条额外的sql去把这个关联的对象查询出来,然后设置到对象里面,这样容易造成n+1的问题

内联方式:在这条sql直接把关联的对象的表连接进来,把需要查询的信息全部查出来,然后直接在resultMap中拼装出关联的对象,这样就可以避免n+1的问题,但是会造成连接的性能损耗

选用原则 :

如果关联的对象要在列表中显示,那么直接使用内联的方式,会造成表关联的性能损耗

如果要在查看这个对象时才显示,则选择使用发送一条额外的sql进行查询的方式,但是会造成n+1的问题

选用哪种方式?

 选用发送一条额外sql

因为在列表中不用显示借款人的信息,而是当我们要去查看这个借款人的信息时,当我们要去查看他的借款明细的时候,才会去点开看他的信息,这个属性要查看某个对象时,才会显示。

 

mapper.xml中关联的写法

使用发送额外的sql查询,则下面这条sql语句不用变

乐观锁的问题

n+1问题,网上查了下资源

时间: 2024-10-10 12:24:59

Mapper.xml中对象的关联的相关文章

mapper.xml中动态sql

mabatis重点是通过标签对sql灵活的组织,通过配置的方式完成输入 输出映射. 1.对mapper.xml中重复的sql抽取统一维护,以及foreach使用 UserMapperCustom.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://

Mybatis中mapper.xml中的模糊查询

Mybatis中mapper.xml中的模糊查询 <!-- 方法一: 直接使用 % 拼接字符串 注意:此处不能写成 "%#{name}%" ,#{name}就成了字符串的一部分, 会发生这样一个异常: The error occurred while setting parameters, 应该写成: "%"#{name}"%",即#{name}是一个整体,前后加上% --> <if test="name != nul

MyBatis mapper.xml中SQL处理小于号与大于号

这种问题在xml处理sql的程序中经常需要我们来进行特殊处理. 其实很简单,我们只需作如下替换即可避免上述的错误: < <= > >= & ' " < <= > >= & &apos; " 例如常见的时间比较: <select id="select" parameterType="xxx" resultMap="xxx"> select dis

Mybatis映射文件Mapper.xml中#和$的区别

1."#" 简单来说"#"在编译时使用"?"占位符标记,可以有效防止参数注入,相当于我们使用JDBC操作时的PreparedStatement. 2."$" 直接把参数拼接到SQL中执行相当于JDBC操作时的Statement 3.参数作为非SQL关键字传递 <insert id="addUser" parameterType="User">        insert in

My Batis mapper.xml中 动态SQL中使用trim标签 if end的场景

trim标签有点类似于replace效果. trim 属性 prefix:前缀覆盖并增加其内容 suffix:后缀覆盖并增加其内容 prefixOverrides:前缀判断的条件 suffixOverrides:后缀判断的条件 <!-- 修改 --> <update id="updateTest" >        UPDATE test         <trim prefix="SET" suffixOverrides="

MyBatis mapper.xml中SQL处理小于号与大于号 和小于等于号

我们只需作如下替换即可避免上述的错误: < <= > >= & ' " < <= > >= & &apos; " 错误写法 addtime   >=    start_time 正确写法 addtime  >=  start_time 原文地址:https://www.cnblogs.com/hjy2018/p/9571783.html

mybaties中mapper.xml映射文件中输出映射resultMap与resultType的不同

在mybaties框架思想中可以知道.mybaties在mapper.xml中定义statement,使用resultType(还有resultMap)指定输出数据的类型,将select查询结果集映射为resultType指定的类型, resultType使用注意:select查询出来 列名要和resultType指定的类型属性名对应.(实现开发中常用的是resultType) resultMap:select查询出来 列名不需要和输出类型的属性名对应也可以完成映射.

MyBatis 之 使用四(一) (mapper.xml)

mapper.xml 映射文件是 MyBatis 的核心,定义了操作数据库的 sql,每个sql 是一个statement. parameterType(输入类型),输入类型包括:基本类型.pojo对象类型.hashmap. a. #{} 与 ${} #{} 是向 prepareStatement 中的预处理语句中设置参数值,表示一个占位符,相当于 ? .使用占位符 #{} 可以有效防止sql 注入,在使用时不需要关心参数值的类型,mybatis 会根据参数值的类型调用不同的statement

mybatis公用代码抽取到单独的mapper.xml文件

同任何的代码库一样,在mapper中,通常也会有一些公共的sql代码段会被很多业务mapper.xml引用到,比如最常用的可能是分页和数据权限过滤了,尤其是在oracle中的分页语法.为了减少骨架性代码,通常将它们抽象到sql中,但是肯定又不能在每个mapper中也包含,这样就没有意义了.此时,可以将这部分移到专门的mapper.xml中,比如common.xml,其中包含如下: <?xml version="1.0" encoding="UTF-8"?>