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 56 //CURD操作标签 7 //if片段 8
2.CRUD标签
1 <?xml version="1.0" encoding="UTF-8" ?> 2 56 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片段 23 10 11 //使用include引用sql片段 12 18 19 //引用其它mapper.xml的sql片段 204 and id=#{id} 5 67 and username like '%${username}%' 8 9
三、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 56 10 117 #{item.id} 8 9
(Mapper)接口
1 public ListselectUserByList(List userlist);
(测试)
1 //构造查询条件List 2 Listuserlist = 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 List list = userMapper.selectUserByList(userlist);
3、传递pojo类数组
(Mapper映射文件)
参数含义:index为数组的下标,item为数组每个元素的名称,名称随意,open循环开始,close循环结束,separator中间分隔输出。
1
(mapper接口)
1 public ListselectUserByArray(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 ListselectUserByArray(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);