MyBatis教程之七注解式多表关系代码详解

在之前的一篇文章中我们使用了xml配置方式实现了多表关系,那么本篇就来说说如何使用注解来实现多表关系
三个表:
购物车
用户表
订单表
关系:
用户与购物车一对一:使用@One或直接用@Result标记
用户和订单一对多:使用@Many或者使用@ResultMap
建表语句:

create table tb_cart(id int auto_increment primary key,money double,count int);

create table tb_user(id int auto_increment primary key,usename varchar(16),password varchar(32),cid int, foreign key(cid) references tb_cart(id));

create table tb_order(id int auto_increment primary key,money double,rname varchar(10),rphone varchar(15),uid int,foreign key(uid) references tb_user(id));

直接看接口:


public interface TbUserMapper {


    @Insert("insert into tb_user(usename,password,cid) values(#{usename},#{password},#{cart.id})")
    @Options(keyProperty="id")
    int save(TbUser user);

    @Select("select * from tb_user")
    @ResultType(TbUser.class)
    List<TbUser> queryAll();
    //嵌套对象:一对一
    //连接查询
    @Select("select u.*,c.* from tb_user u left join tb_cart c on u.cid=c.id")
    @Results({
        @Result(id=true,property="id",column="id"),
        @Result(property="usename" ,column="usename"),
        @Result(property="password" ,column="password"),
        @Result(property="cart.id",column="cid"),
        @Result(property="cart.money",column="money"),
        @Result(property="cart.count",column="count")
    })
    List<TbUser> queryAllByOne1();
    //嵌套查询
    @Select("select * from tb_user")
    @Results({
        @Result(id=true,property="id",column="id"),
        @Result(property="usename" ,column="usename"),
        @Result(property="password" ,column="password"),
        @Result(property="cart",column="cid",
        one=@One(select="org.qf.dao.TbCartMapper.queryById",fetchType=FetchType.EAGER))
    })
    List<TbUser> queryAllByOne2();

    //一对多的实现
    //嵌套查询
    @Select("select * from tb_user")
    @Results({
        @Result(id=true,property="id",column="id"),
        @Result(property="usename" ,column="usename"),
        @Result(property="password" ,column="password"),
        @Result(property="orders",column="id",
        many=@Many(fetchType=FetchType.EAGER,select="org.qf.dao.TbOrderMapper.queryByUid"))
    })
    List<TbUser> queryAllByMany1();

    //连接查询
    @Select("select u.*,o.*,o.id odid from tb_user u left join tb_order o on u.id=o.uid")
    @ResultMap("org.qf.dao.TbUserMapper.rm1")
    List<TbUser> queryAllByMany2();
}

对应的额@ResultMap对应的标签文件

<?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="cn.code404.dao.TbUserMapper">

    <resultMap type="TbUser" id="rm1">
        <id property="id" column="id"></id>
        <result property="usename" column="usename" />
        <result property="password" column="password" />
        <collection property="orders" ofType="TbOrder">
        <id property="id" column="odid"/>
        <result property="money" column="money"/>
        <result property="rname" column="rname"/>
        <result property="rphone" column="rphone"/>
        </collection>
    </resultMap>
</mapper>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值