java sql 框架_JAVA框架 Mybaits 动态sql

本文详细介绍了MyBatis中动态SQL的使用,包括IF标签如何根据条件拼接WHERE子句,WHERE标签如何简化条件构造,并演示了如何利用FOREACH处理列表参数进行IN查询,提高SQL效率。同时,提到了参数类型的设置以及在Mapper配置文件中的应用。
摘要由CSDN通过智能技术生成

动态sql

一:if标签使用:

我们在查询的时候,有时候由于查询的条件的不确定性,导致where的后面的条件的不同,这时候就需要我们进行where后面的条件进行拼接。

Mapper配置文件:

1 <?xml version="1.0" encoding="UTF-8" ?>

2 /p>

4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

5

6

7 SELECT * FROM t_account WHERE 1=1AND8

9 NAME LIKE '%${ac.name}%'

10

11

12 AND id >#{ac.id}13

14

15

注意:我们需要使用SELECT    * FROM t_account WHERE 1=1 AND  条件1 AND 条件2.。。。。。这种使用。

其中if标签中的test表达式是测试条件和字段是否为空或者nul,注意这里也是属性.属性。

实际的输出语句:

2018-04-25 18:40:14,733 DEBUG [main] voMapper.findAccByIdAndName.debug:139 | ==>  Preparing: SELECT * FROM t_account WHERE 1=1 AND NAME LIKE '%ok%' AND id >?

二、where标签:可以帮我们补全where关键字也不需要1=1的条件:

1 <?xml version="1.0" encoding="UTF-8" ?>

2 /p>

4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

5

6

7 SELECT *FROM t_account8

9

10 NAME LIKE '%${ac.name}%'

11

12

13 And id >#{ac.id}14

15

16

17

18

sql语句:

bfd4f26b3b828632b47e9dc69ed458fe.png

如果别的查询语句也需要这些条件 我们可以进行重用。

在标签下面 使用sql标签。

1 <?xml version="1.0" encoding="UTF-8" ?>

2 /p>

4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

5

6

7

8

9 NAME LIKE '%${ac.name}%'

10

11

12 And id >#{ac.id}

13

14

15

16

17

18 SELECT *FROM t_account19

20

21

22

其种id是唯一是别人调用的时候标识。

相应的引用使用的标签是include标签。

1

这样这部分的条件可以进行复用。

三、foreach的标签

当前端传来一些列的id,为列表的时候,我们可以使用id进行查询。这时候sql使用的是in而 不是or  or的效率很低。

1

2 #{xx}3

首先了解下foreach的里的属性意思:

1、collection:集合,就是传入的变量的集合的名称。这个需要跟你传入的对象内的属性字段相对应!

2、item:循环的元素,将元素放入这个item中(是将ids的元素放在item里面不是一个而是整个集合)。

3、open:循环开始的拼接符。

4、colse:循环结束的拼接符。

5、separator:就是sql语句中集合内的元素之间的分隔符。

6、#{xx}:取出item的集合。这个名字要和item的名字一样。因为是同一个变量的名称。

完整的例子:

1

2 SELECT *FROM t_account3

4

5 #{xx}6

7

8

9

10

其中的where标签可以有也可以没有,只是在foreach中的open拼接的时候需要注意带不带where就可以。

其中parameterType不能写:List 会报:columnNumber: 53; 与元素类型 "select" 相关联的 "parameterType" 属性值不能包含 '

vo类:

1 package jd.com.vodemo;2 import jd.com.mybaitstest.account;3

4 import java.util.List;5

6 public classvodemo {7 private Listids;8

9 privateaccount ac;10

11 public voidsetAc(account ac) {12 this.ac =ac;13 }14

15 publicaccount getAc() {16 returnac;17 }18

19 public void setIds(Listids) {20 this.ids =ids;21 }22

23 public ListgetIds() {24 returnids;25 }26 }

接口:

1 package jd.com.vodemo;2 import jd.com.mybaitstest.account;3 import java.util.List;4

5 public interfacevoMapper {6

7 ListfindAccByIdAndName(vodemo vo);8 ListfindAccByIdList(vodemo vo);9 }

mapper类:

1 <?xml version="1.0" encoding="UTF-8" ?>

2 /p>

4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

5

6

7

8

9 NAME LIKE '%${ac.name}%'

10

11

12 And id >#{ac.id}13

14

15

16

17

18 SELECT *FROM t_account19

20

21

22

23 SELECT *FROM t_account24

25

26 #{xx}27

28

29

30

31

32

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值