ORM--查询类型,关联查询

  ORM框架中,会给每一个模型类中的主键设置一个别名:pk

        models.Projects.objects.filter(id=2)等效于models.Projects.objects.filter(pk=2)

1.filter()和exclude()查询类型

        exclude()就是filter()的反向查询
        1.1 filter()支持的查询类型:

                models.模型类名.objects.filter(字段名__查询类型=xxxx)

         补充:

                filter(id__gt=2)

                filter(id__gte=2)

                filter(id__lt=2)

                filter(id__lte=2)

        1.2 exclude()反向查询    

                filter()方法支持的查询类型都支持            

2.关联查询

        当一个模型类中定义了外键时,在给这个模型类对应的表新增数据时,还必须指定将从表新增的数据关联到父表的哪条数据上

        2.1 在Interfaces模型类中定义外键,关联Projects模型类

        2.2 迁移

                迁移后,Interfaces模型类生成的表中会自动 生成外键:外键名_id

         2.3 外键关联创建

                方式1:

                        2.3.1 先获取父表模型对象,此处只能用get(),不能用filter(),为何?

                        2.3.2 将获取的父表模型对象以外键字段名作为参数来传递

                用postman请求后查看interfaces表 

                

                方式2:

                        2.3.1 先获取父表模型对象,进而获取父表的id值

                        2.3.2 将父表 主键值 外键名_id 作为参数来传递

         2.4 外键关联查询

                2.4.1 利用从表数据获取父表数据

                        利用 .父表模型类名小写 获取

                        获取包含注册接口的所有项目信息

                                Interfaces.objects.filter(name__contains='注册接口').first().projects

                  2.4.2 利用父表数据获取从表数据

                        利用 从表模型类名小写_set 获取;

                        或者在从表模型的外键字段中,指定related_name='xxxx':

                        models.Projects.objects.filter(leader__contains='jeanet')[0].xxxx.all()                

                         获取项目leader=jeanet的所有接口信息:

                         models.Projects.objects.filter(leader__contains='jeanet')[0].interfaces_set.all()      

                2.4.3 关联查询

                        2.4.3.1 通过父表参数来获取从表数据

                   从表模型类的QuerySet对象(关联属性字段__父表模型类中的字段名__查询类型=值)

                        2.4.3.2 通过从表参数来获取父表数据

                        父表模型类的QuerySet对象(从表的related_name字段名__从表模型类中的字段名__查询类型=值)         

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MyBatis是一款支持关联查询的ORM框架,可以通过XML或注解的方式来实现关联查询。以下是一个示例: 假设我们有两个表,一个是用户表(user),另一个是订单表(order),每个用户有多个订单。我们需要查询用户及其订单信息。 首先,我们需要在User类中定义一个List<Order>类型的属性,用于存储用户的订单信息: ``` public class User { private Integer id; private String username; private List<Order> orders; // getter和setter方法 } ``` 然后,在UserMapper.xml中编写关联查询的SQL语句: ``` <select id="selectUserById" resultMap="userMap"> select u.id, u.username, o.id as order_id, o.order_no, o.amount from user u left join order o on u.id = o.user_id where u.id = #{id} </select> <resultMap id="userMap" type="User"> <id property="id" column="id"/> <result property="username" column="username"/> <collection property="orders" ofType="Order"> <id property="id" column="order_id"/> <result property="orderNo" column="order_no"/> <result property="amount" column="amount"/> </collection> </resultMap> ``` 在这个SQL语句中,我们使用了左连接将用户表和订单表进行关联。在resultMap中,我们使用了collection标签来表示User类中的orders属性是一个集合类型。在collection标签中,我们定义了Order类的属性和对应的列名。 最后,在UserMapper接口中定义selectUserById方法: ``` public interface UserMapper { User selectUserById(Integer id); } ``` 在这个方法中,MyBatis会自动执行我们定义的SQL语句,并将结果映射到User对象中,包括用户信息和订单信息。我们只需要通过调用User对象的getter方法就可以获取用户和订单信息了。 这就是使用MyBatis实现关联查询的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

chuntian_tester

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

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

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

打赏作者

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

抵扣说明:

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

余额充值