定义: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. 2020.5.16-ICPC Central Europe Regional Contest 2019

    A. ABB #include <bits/stdc++.h> using namespace std; #define PB push_back #define ZERO (1e-10) ...

  2. 结对编程——带UI的小初高数学学习软件

    一.简介 本次项目要求: 1.所有功能通过图形化界面操作,可以是桌面应用,可以是网站(编程语言和技术不限): 2.用户注册功能.用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册: ...

  3. Rvalue References

    Rvalue References

  4. C++编译Dlib库出现LNK2001错误(原因是在Python中安装过Dlib)

    问题 使用CMake编译Dlib库,编译得到lib文件后,新建一个VS工程想使用Dlib,却出现LNK2001:无法解析的外部符号的错误,且都与JPEG和PNG相关: 1>dlib19.17.9 ...

  5. 【UE4 C++ 基础知识】<10>资源的引用

    2种引用方式 硬引用(Hard Reference) 即对象 A 引用对象 B,并导致对象 B 在对象 A 加载时加载 硬引用过多会导致运行时很多暂时用不到的资源也被加载到内存中 大量资源会导致进程阻 ...

  6. vue3.x新特性之setup函数,看完就会用了

    最近有小伙伴跟我聊起setup函数,因为习惯了vue2.x的写法导致了,setup用起来觉得奇奇怪怪的,在一些api混编的情况下,代码变得更加混乱了,个人觉得在工程化思想比较强的团队中使用setup确 ...

  7. [Beta]the Agiles Scrum Meeting 6

    会议时间:2020.5.20 21:00 1.每个人的工作 今天已完成的工作 成员 已完成的工作 issue yjy 帮助成员解决配置环境问题 tq 增加功能:添加多个评测机 评测部分增加更多评测指标 ...

  8. Spring Security Resource Server的使用

    Spring Security Resource Server的使用 一.背景 二.需求 三.分析 四.资源服务器认证流程 五.实现资源服务器 1.引入jar包 2.资源服务器配置 3.资源 六.测试 ...

  9. elasticsearch的索引操作

    1.创建索引(test_index) curl -XPUT "http://192.168.99.1:9200/test_index" 2.创建索引,指定分片和副本的数量 curl ...

  10. Noip模拟44 2021.8.19

    比较惊人的排行榜 更不用说爆零的人数了,为什么联赛会这么难!!害怕了 还要再努力鸭 T1 Emotional Flutter 考场上没切掉的神仙题 考率如何贪心,我们把黑色的条延长$s$,白色的缩短$ ...