2.8 Mybatis——多对一关联映射——方式一

目录

1.准备实体类:

2.查询方法一:通过两条sql语句查询。

3.实例展示:


1.准备实体类:

多对一写对象,Groups实体类作为用户User实体类的属性,并写出对应的get、set方法,不要在toString方法重写

2.查询方法一:通过两条sql语句查询。

resultMap 如果返回值中有其他对象的属性时使用
        属性 id   id的值=selecct标签内resultMap的值
        属性type  查询结果的返回类型
子标签:
    id  表中的主键
        属性column  数据表中的字段名
        属性property  实体类中的属性名
    result:其他属性
        属性column  数据表中的字段名
        属性property  实体类中的属性名

方式一:发送多次sql语句,每张表进行单独查询,通过select属性向对方映射文件

中进行查询
     association——关联标签  出现在“多”方
            属性column  数据表中的外键名
            属性property  实体类中的另一个表的实体类作为属性的属性名
            属性select  需要指定“命名空间.id”去查询关联对象
            属性javaType 查询结束之后的返回类型

<mapper namespace="com.zx.dao.UserDao">

    <!--resultType返回单个对象的属性
        resultMap返回关联对象的属性
            id属性值 = select标签内resultMap的值。
            type属性值  方法返回值的类型。
            子标签:
                id 主键标识(column——表中的字段,property——实体类中对应的属性)
                result 普通属性(column——表中的字段,property——实体类中对应的属性)
    -->
    <select id="getUserById" resultMap="userResult">
        select * from user where id=#{id}
    </select>
    <resultMap id="userResult" type="com.zx.pojo.User">
        <id column="id" property="id"></id>
        <result column="uname" property="uname"></result>
        <result column="pwd" property="pwd"></result>
        <result column="age" property="age"></result>
        <!--association关联映射标签
            column属性——表中的字段(外键)
            property属性——user表中groups属性名。
            select属性——查询被关联的一方,值为“namespace.id”
            javaType属性——查询被关联一方查询的返回值类型。
        -->
        <association column="gid" property="groups" select="com.zx.dao.GroupsDao.getGroupById" javaType="com.zx.pojo.Groups">

        </association>
    </resultMap>


</mapper>

3.实例展示:

问题描述:通过用户id查询用户信息,以及用户对应的分组信息。 

用户表与分组表关系:

(1)UserDao层——UserDao.java:

package com.zx.dao;

import com.zx.pojo.User;

public interface UserDao {

    /*
        多对一
     */
    //查询指定id的用户信息以及分组信息
    User getUserById(int id);
}

(2)UserDao的映射文件——UserMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.zx.dao.UserDao">

    <!--resultType返回单个对象的属性
        resultMap返回关联对象的属性
            id属性值 对应select标签内resultMap的值。
            type属性值  方法返回值的类型。
            子标签:
                id 主键标识(column——表中的字段,property——实体类中对应的属性)
                result 普通属性(column——表中的字段,property——实体类中对应的属性)
    -->
    <select id="getUserById" resultMap="userResult">
        select * from user where id=#{id}
    </select>
    <resultMap id="userResult" type="com.zx.pojo.User">
        <id column="id" property="id"></id>
        <result column="uname" property="uname"></result>
        <result column="pwd" property="pwd"></result>
        <result column="age" property="age"></result>
        <!--association关联映射标签
            column属性——表中的字段(外键)
            property属性——user表中groups属性名。
            select属性——查询被关联的一方,值为“namespace.id”
            javaType属性——查询被关联一方查询的返回值类型。
        -->
        <association column="gid" property="groups" select="com.zx.dao.GroupsDao.getGroupById" javaType="com.zx.pojo.Groups">

        </association>
    </resultMap>


</mapper>

(3)GroupsDao层——GroupsDao.java:

package com.zx.dao;

import com.zx.pojo.Groups;

public interface GroupsDao {

    Groups getGroupById(int gid);
}

(4)GroupsDao对应的映射文件——GroupsMapper

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.zx.dao.GroupsDao">

    <select id="getGroupById" resultType="com.zx.pojo.Groups">
        select *  from groups where gid=#{gid}
    </select>

</mapper>

(5)mybatis-config.xml中的映射路径(sql语句路径):

<mappers>
        <mapper resource="com/zx/dao/UserMapper.xml"></mapper>
        <mapper resource="com/zx/dao/GroupsMapper.xml"></mapper>
    </mappers>

(6)运行测试:

 @Test
    public void getUserById(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        User user = userDao.getUserById(7);
        System.out.println(user);
        System.out.println(user.getGroups());
    }

测试结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值