mybatis 入门(四):动态SQL

mybatis 中 where 1=1; 标签 if ,where ,foreach ,

0.应用范例 

grade为Grad类,其中包含有list<Integer> stuNos;( 为复数,stuNos有s)。 根据年级类中的 学号查学生,传入年级对象,返回学生对象,以上图片实例相当于SQL语句:(伪SQL代码,stuNos 为list集合 ,要不为空,需要使用 separate属性通过 “,”将list集合的值转换为形如(sthNo1,sthNo2,sthNo3,...sthNon) 的SQL语句。

select * from student where stuNos != null and stuNos.size()!=0 and stuNo in  stuNos (sthNo1,sthNo2,sthNo3,...sthNon);

mybatis – MyBatis 3 | 动态 SQL


1.应用背景介绍

mybatis 不仅支持传入参数到SQL语句标签,还支持通过字符串拼接的方式实现动态传入SQL标签。'${PARAM}’)。处于灵活性的考虑,对应 where 后的语句如果想实现动态SQL,要么在where后添加 1=1 实现,要么就引入标签<where>,至于where后面的SQL拼接,需要再引入 if 标签形如

<if test="state != null">,其中state 就是传入SQL的Java字段,用以判断该if语句中的SQL是否可以进行拼接。另:where标签中 的第一个if标签会被自动处理,但是之后的标签不会校验生成的SQL是否正确。if标签中的字段也支持使用对象属性的属性,用“.”来进行选择。

同样,为实现更灵活地生成SQL,mybatis支持 foreach 标签,用来实..0..现 where field in (var1,var2,....);


2.具体实现步骤

在网上查了一篇文章,写的比较全面,链接如下:

mybatis – MyBatis 3 | 动态 SQL

掌握其应用场景,遇到具体问题直接查语法就行。

如果传入参数为 简单类型数组(array) 集合(list)  对象数组(Object[]),parameterType需要使用对应约定好的类型。

SQL提取:将经常要用的可重复使用的SQL片段提取出来,方便以后其他标签引用该SQL片段。

引用使用include标签 refid 引用该SQL标签。

位置在mapper标签下。

 如果需要引用的SQL片段不在本mapper文件中,引入时的refid引入时需要加上SQL片段所在的mapper文件的 namespace.SQLID  。

3.关联查询

mybatis认为查询类型只有两种,多对一就是一对多,多对多就是多个一对多查询

  • 一对一关联查

1.   使用业务扩展类(少数)实现一对一关联查询:新建业务扩展类,继承一个bean类,再手动添加另一个bean类的信息之后正常使用。

 

2. resultMap  实现一对一关联查询:  表之间由外键连接,类之间按属性连接,将一个类作为另一个类的属性成员 实现两个类的连接。

resultType  改为  resultMap,新建一个resultMap标签与之对应,映射关系XML文件如下:

 映射文件mapper,一对一使用association。一对多使用collection标签。

  • 一对多查询

一个班级对应多个学生。班级中增加学生类的list,作为两个类的连接。

 

javaType 修改为ofType,表示返回的值是ofType修饰的类的集合(list)。

collection支持级联实现内部的一对一查询。 


总结

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值