mabatis的sql标签


定义:mapper.xml映射文件中定义了操作数据库的sql,并且提供了各种标签方法实现动态拼接sql。每个sql是一个statement,映射文件是mybatis的核心。

一,内容标签

1.NamePlace

NamePlace命名空间作用是对sql进行分类化管理。若使用Dao开发方式,映射文件的namespace可以任意命名,如果采用的是mapper接口代理的方法开发,Mapper的映射文件中namespace必须为接口的全名。

1 <?xml version="1.0" encoding="UTF-8" ?>
2 
5 
6     //CURD操作标签
7         //if片段
8 

2.CRUD标签

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 
 5 
 6     
 7     
 8 
 9     
10     
11 
12     
13     
14 
15     
16     
17 

3、标签调用方法

(1)selectOne与selectList方法

selectOne表示查询出一条结果进行映射,使用selectOne查询多条记录会抛出异常。selectureList表示查询一个列表进行映射,对于使用selectOne可以实现的插叙,使用selectList必然也可以实现。

(1)代理对象内部调用

动态代理对象调用sqlSession.selectOne()和sqlSessionList()是根据mapper接口方法的返回值决定的,如果mapper方法返回单个pojo对象,代理对象内部通过selectOne查询数据库。如果mapper()方法返回集合对象,代理对象内部通过selectList查询数据库。

二、动态SQL标签

1、if标签

 1 //进行空字符串校验
 2 

2、where标签

 1 //可以自动处理第一个and
 2 

3、sql片段

 1 //建立sql片段
 2 
 3     
 4         and id=#{id}
 5     
 6     
 7         and username like '%${username}%'
 8     
 9 
10 
11 //使用include引用sql片段
12 
18 
19 //引用其它mapper.xml的sql片段
20 

三、foreach标签

1、通过sql传递数据或list,mybatis使用foreach参数定义如下:Collection指定输入对象中集合属性,item每个遍历生成对象,open开始遍历时拼接的串,close结束遍历时拼接的串,separator:遍历的两个对象需要拼接的串。

(sql)语句

1 SELECT * FROM USERS WHERE username LIKE '%张%' AND (id =10 OR id =89 OR id=16)
2 SELECT * FROM USERS WHERE username LIKE '%张%' id IN (10,89,16)

(vo)类

1 public class QueryVo{
2     private User user;
3         private UserCustom userCustom;
4     //传递多个用户id
5     private List ids;
6     set()/get()  ...
7 }

(映射文件)

 1 复制代码
 2 
18 
19  
20 
21 
 5       
 6          
 7             #{item.id}
 8          
 9        
10      
11 

(Mapper)接口

1 public List selectUserByList(List userlist);

(测试)

 1 //构造查询条件List
 2 List userlist = new ArrayList();
 3 User user = new User();
 4 user.setId(1);
 5 userlist.add(user);
 6 
 7 user = new User();
 8 user.setId(2);
 9 userlist.add(user);
10 //传递userlist列表查询用户列表
11 Listlist = userMapper.selectUserByList(userlist);

3、传递pojo类数组

(Mapper映射文件)

参数含义:index为数组的下标,item为数组每个元素的名称,名称随意,open循环开始,close循环结束,separator中间分隔输出。

 1 

(mapper接口)

1 public List selectUserByArray(Object[] userlist)

(测试)

 1 //构造查询条件List
 2 Object[] userlist = new Object[2];
 3 User user = new User();
 4 user.setId(1);
 5 userlist[0]=user;
 6 
 7 user = new User();
 8 user.setId(2);
 9 userlist[1]=user;
10 
11 //传递user对象查询用户列表
12 Listlist = userMapper.selectUserByArray(userlist);

4、传递字符串类数组

(1)Mapper映射文件

 1 复制代码
 2 

如果数组中是简单类型则写为#{item},不用通过ognl获取对象属性值

(2)mapper接口

1 public List selectUserByArray(Object[] userlist)

(3)测试

1 //构造查询条件List
2 Object[] userlist = new Object[2];
3 userlist[0]=”1”;
4 userlist[1]=”2”;
5 //传递user对象查询用户列表
6 Listlist = userMapper.selectUserByArray(userlist);