mybatis之多对一查询

多对一

 
子查询     (效率低  发送sql语句多)
    N+1 查询方式,先查询出某个表的全部信息,根据这个表的信息查询另一个表的信息. 
        1. 在 Student 实现类中包含了一个 Teacher 对象     //先查出学生,根据学生再查出老师
public class Student {
    private int id;
    private String name;
    private int age;
    private Teacher teacher; //多对一  多个学生对一个老师

 2. 在 TeacherMapper.xml 中提供一个查询

<select id="selById" resultType="teacher" parameterType="int">
     select * from teacher where id=#{0}
</select>

3. 在 StudentMapper 中

             使用 N+1 方式.时如果 列名和属性名相同可以不配置,使用 Auto mapping 特性.但是 mybatis 默认只会列专配一次(即 association标签中使用了 tid,就不会 再自动 映射了  )
<resultMap type="student" id="stuMap">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="age" column="age"/>
    <result property="tid" column="tid"/>
    <!--   association: 装配一个对象时使用           property:对象在类中的属性名
           select:通过哪个查询,查询出这个对象的信息   column:把当前表的哪个列的值做为参数传递给另一个查询  -->
    <association property="teacher"  select="com.mapper.TeacherMapper.selById"  column="tid">
    </association>
</resultMap>
<select id="selAll" resultMap="stuMap">
    select * from student
</select>

  4.代码简化成

<resultMap type="student" id="stuMap">

   <result column="tid" property="tid"/>
   <!-- 如果关联一个对象 -->
   <association  property="teacher"
                 select="com.mapper.TeacherMapper.selById"  column="tid"> 
   </association>
</resultMap>
<select id="selAll" resultMap="stuMap">
      select * from student
</select>

关联查询 (一般用它  效率高些)

    在 StudentMapper 中添加                
               此时把<association/>当成小的<resultMap>看待
                javaType 属性:<association/>专配完后返回一个什么类型的对象.取值是一个类(或类的别名)
<resultMap type="Student" id="stuMap1">
        <id column="sid" property="id"/>
        <result column="sname" property="name"/>
        <result column="age" property="age"/>
        <association property="teacher"  javaType="Teacher" >
                <id column="tid" property="id"/>
                <result column="tname" property="name"/>
        </association>
</resultMap>
<select id="selAll1" resultMap="stuMap1">
      select s.id sid,s.name sname,age age,t.id tid,t.name tname 
        FROM student s left join teacher t on s.tid=t.id
</select>
 
对于一个数n,我们可以将其拆分成若干组数位相同的数字,然后读出每一组数字的数值和单位。例如: - 对于 123456789,我们可以将其拆分成 1 亿,2345 万,6789。 - 对于 200000,我们可以将其拆分成 2 十万。 具体的读法可以参考以下规则: - 对于 1~9 的数字,直接读出其汉字,如 1 读作“一”,9 读作“九”。 - 对于 10~99 的数字,读出十位数的汉字,如果个位数不为 0,则加上个位数的汉字,如 22 读作“二十二”,55 读作“五十五”。 - 对于 100~999 的数字,读出百位数的汉字,如果十位数为 0,则只读出“几百”,否则在“几百”后加上十位数和个位数的汉字,如 234 读作“二百三十四”,707 读作“七百零七”。 - 对于 1000~9999 的数字,读出千位数的汉字,如果百位数为 0,则只读出“几千”,否则在“几千”后加上百位数、十位数和个位数的汉字,如 5678 读作“五千六百七十八”。 - 对于 10000~99999 的数字,读出万位数的汉字,如果千位数为 0,则只读出“几万”,否则在“几万”后加上千位数、百位数、十位数和个位数的汉字,如 12345 读作“一万二千三百四十五”。 - 对于 100000~999999 的数字,读出十万位数的汉字,如果万位数为 0,则只读出“几十万”,否则在“几十万”后加上万位数、千位数、百位数、十位数和个位数的汉字,如 234567 读作“二十三万四千五百六十七”。 - 对于 1000000~99999999 的数字,读出百万位数的汉字,如果十万位数为 0,则只读出“几百万”,否则在“几百万”后加上十万位数、万位数、千位数、百位数、十位数和个位数的汉字,如 12345678 读作“一千二百三十四万五千六百七十八”。 - 对于 100000000~999999999 的数字,读出亿位数的汉字,如果百万位数为 0,则只读出“几亿”,否则在“几亿”后加上百万位数、十万位数、万位数、千位数、百位数、十位数和个位数的汉字,如 987654321 读作“九亿八千七百六十五万四千三百二十一”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心之所向...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值