定义: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 <!DOCTYPE mapper
3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5 <mapper namespace="Mapper.EmpMapper">
6 //CURD操作标签
7 //if片段
8 </mapper>

2.CRUD标签

 1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE mapper
3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5 <mapper namespace="Mapper.EmpMapper">
6 <!-- 查询 -->
7 <select id="" parameterType="" resultType=""></select>
8
9 <!-- 添加 -->
10 <insert id="" parameterType=""></insert>
11
12 <!-- 删除 -->
13 <delete id="" parameterType=""></delete>
14
15 <!-- 更新 -->
16 <update id="" parameterType=""></update>
17 </mapper>

3、标签调用方法

(1)selectOne与selectList方法

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

(1)代理对象内部调用

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

二、动态SQL标签

1、if标签

 1 //进行空字符串校验
2 <select id="findUserList" parameterType="user" resultType="user">
3 select * from user where 1=1
4 <if test="id!=null and id!=''">
5 and id=#{id}
6 </if>
7 <if test="username!=null and username!=''">
8 and username like '%${username}%'
9 </if>
10 </select>

2、where标签

 1 //<where/>可以自动处理第一个and
2 <select id="findUserList" parameterType="user" resultType="user">
3 select * from user
4 <where>
5 <if test="id!=null and id!=''">
6 and id=#{id}
7 </if>
8 <if test="username!=null and username!=''">
9 and username like '%${username}%'
10 </if>
11 </where>
12 </select>

3、sql片段

 1 //建立sql片段
2 <sql id="query_user_where">
3 <if test="id!=null and id!=''">
4 and id=#{id}
5 </if>
6 <if test="username!=null and username!=''">
7 and username like '%${username}%'
8 </if>
9 </sql>
10
11 //使用include引用sql片段
12 <select id="findUserList" parameterType="user" resultType="user">
13 select * from user
14 <where>
15 <include refid="query_user_where"/>
16 </where>
17 </select>
18
19 //引用其它mapper.xml的sql片段
20 <include refid="namespace.sql片段"/>

三、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<Integer> ids;
6 set()/get() ...
7 }

(映射文件)

 1 复制代码
2 <select id="findUserList" parameterType="UserQueryVo" resultType="UserCustom">
3 SELECT * FROM USER
4 <where>
5 <!-- 使用实现下边的sql拼接: AND (id=1 OR id=10 OR id=16) -->
6
7 <if test="ids!=null and ids.size>0">
8
9 <foreach collection="ids" item="user_id" open="AND (" close=")" separator="or">
10
11 id=#{user_id}
12
13 </foreach>
14
15 </if>
16 </where>
17 </select>
18
19
20
21 <!-- 使用实现下边的sql拼接: and id IN(1,10,16)—>
22
23 <foreach collection="ids" item="user_id" open="and id IN(" close=")" separator=",">
24
25 #{user_id}
26
27 </foreach>

(测试代码)

List<Integer> ids = new ArrayList<Integer>();
ids.add(1);//查询id为1的用户
ids.add(10); //查询id为10的用户
queryVo.setIds(ids);
List<User> list = userMapper.findUserList(queryVo);

2、传递单个list

(Mapper映射文件)

 1 <select id="selectUserByList" parameterType="java.util.List" resultType="user">
2 select * from user
3 <where>
4 <!-- 传递List,List中是pojo -->
5 <if test="list!=null">
6 <foreach collection="list" item="item" open="and id in( "separator="," close=")">
7 #{item.id}
8 </foreach>
9 </if>
10 </where>
11 </select>

(Mapper)接口

1 public List<User> selectUserByList(List userlist);

(测试)

 1 //构造查询条件List
2 List<User> userlist = new ArrayList<User>();
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<User>list = userMapper.selectUserByList(userlist);

3、传递pojo类数组

(Mapper映射文件)

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

 1 <select id="selectUserByArray" parameterType="Object[]" resultType="user">
2 select * from user
3 <where>
4 <!-- 传递pojo类数组 -->
5 <if test="array!=null">
6 <foreach collection="array" index="index" item="item"
7 open="and id in("separator=","close=")">
8 #{item.id}
9 </foreach>
10 </if>
11 </where>
12 </select>

(mapper接口)

1 public List<User> 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 List<User>list = userMapper.selectUserByArray(userlist);

4、传递字符串类数组

(1)Mapper映射文件

 1 复制代码
2 <select id="selectUserByArray" parameterType="Object[]" resultType="user">
3 select * from user
4 <where>
5 <!-- 传递字符串数组 -->
6 <if test="array!=null">
7 <foreach collection="array"index="index"item="item"
8 open="and id in("separator=","close=")">
9 #{item}
10 </foreach>
11 </if>
12 </where>
13 </select>

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

(2)mapper接口

1 public List<User> selectUserByArray(Object[] userlist)

(3)测试

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

mabatis的sql标签的更多相关文章

  1. java web(一) 使用sql标签库+tomcat+mysql手动创建一个jsp练习总结

    2016-09-0111:06:53                                     使用sql标签库+tomcat+mysql手动创建一个jsp 1. 1.1安装tomcat ...

  2. SQL标签

    SQL标签库提供了与关系型数据库进行交互的标签. 引入语法:<%@ taglib prefix="sql" uri="http://java.sun.com/jsp ...

  3. 转: JSTL SQL标签库 使用

    SQL标签库 JSTL提供了与数据库相关操作的标签,可以直接从页面上实现数据库操作的功能,在开发小型网站是可以很方便的实现数据的读取和操作.本章将详细介绍这些标签的功能和使用方法. SQL标签库从功能 ...

  4. 夺命雷公狗---DEDECMS----18dedecms之无可奈何标签-sql标签取出今天更新

    我们在一些开发时候遇到普通标签都解决不了的问题的时候可以尝试下我们dedecms自带的sql标签,几乎可以完成任何的查询需求 语法如下所示: 我们在这里将刚才首页今天更新那块给改写下,原先的是: {d ...

  5. 9.mybatis动态SQL标签的用法

    mybatis动态SQL标签的用法   动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么 ...

  6. JSP标准标签库(JSTL)--SQL标签库 sql

    了解即可.SQL标签库 No. 功能分类 标签名称 描述 1 数据源标签 <sql:setDataSource> 设置要使用的数据源名称 2 数据库操作标签 <sql:query&g ...

  7. JSTL SQL标签库 使用

    推荐博客:http://blog.sina.com.cn/s/blog_4f925fc30101820u.html 怕博主把原文删了,所以在这里先保存一下. SQL标签库 JSTL提供了与数据库相关操 ...

  8. 织梦SQL标签的使用

    (>=DedeCMS 3,DedeCMS 4,DedeCMS 5) 名称:sql 功能:用于获取MySQL数据库内容的标签 语法: 1 2 3 {dede:sql sql='' appname= ...

  9. 小峰servlet/jsp(7)jstl国际化标签库、sql标签库等

    一.jstl国际化标签库: fmt:setLocale 设定用户所在的区域: fmt:formatDate   对日期进行格式化 fmt:requestEncoding 设置所有的请求编码; fmt: ...

随机推荐

  1. bzoj2460元素(线性基,贪心)

    题目大意: 给定\(n\)个二元组\((a,b)\),求一个最大的\(\sum b\)的集合,满足这个集合的任意子集的\(a\)的\(xor\)值不为0 这道题需要一个线性基的性质: 线性基的任何非空 ...

  2. 枚举类型(enum)

    关于枚举 枚举类型是Java 5中新增特性的一部分,它是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性.安全 ...

  3. I/O系统

    I/O系统的组成 外部设备 接口部件 总线 相应的管理软件 I/O软件 将用户编制的程序(或数据)输入主机内 将运算结果输出给用户 实现输入输出系统与主机工作的协调 I/O系统的基本功能 完成计算机内 ...

  4. Codeforces1575D

    思路分析 此题采用dfs,注意X选中了之后所有的X值相同,所以需要一个flag来存储X的值. 注意前导0要单独讨论,然后就是当'X'或者'_'在第一位时不能选0,其它位可以选0 - 9 任意一个数. ...

  5. [no code][scrum meeting] Beta 2

    例会时间:5月14日11:30,主持者:乔玺华 下次例会时间:5月15日11:30,主持者:肖思炀 一.工作汇报 人员 昨日完成任务 明日要完成的任务 乔玺华 - 开issue,分配时间 黎正宇 - ...

  6. 【二食堂】Alpha - Scrum Meeting 1

    Scrum Meeting 1 例会时间:4.10 8:00 - 8:30 进度情况 组员 上周进度 明日任务 李健 1. 在Anaconda3中搭建了python和django的环境issue1. ...

  7. Noip模拟20 2021.7.19

    T1 玩具 题目读错意思直接报零... 拼接方式没读懂以为是个数学题,用卡特兰数,可是的确想多了 数据范围表达出你怎么暴力都行,选择$n^3,dp$ 相当于一片森林,每次多加一条边就合并成一棵树 在$ ...

  8. C++ 、Qt计算时间的方法

    原文链接:https://blog.csdn.net/chy555chy/article/details/53405072 Qt计算时间的两种方法: QTime elapsed() : ms QTim ...

  9. Python之@property详解及底层实现介绍

    转自:https://blog.csdn.net/weixin_42681866/article/details/83376484 前文 Python内置有三大装饰器:@staticmethod(静态 ...

  10. 汇编--LDR

    转载:https://my.oschina.net/zengsai/blog/23733 ARM LDR 伪指令的格式: LDR Rn, =expr 如果name是立即数的话LDR R0,=0X123 ...