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 <!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标签的更多相关文章
- java web(一) 使用sql标签库+tomcat+mysql手动创建一个jsp练习总结
2016-09-0111:06:53 使用sql标签库+tomcat+mysql手动创建一个jsp 1. 1.1安装tomcat ...
- SQL标签
SQL标签库提供了与关系型数据库进行交互的标签. 引入语法:<%@ taglib prefix="sql" uri="http://java.sun.com/jsp ...
- 转: JSTL SQL标签库 使用
SQL标签库 JSTL提供了与数据库相关操作的标签,可以直接从页面上实现数据库操作的功能,在开发小型网站是可以很方便的实现数据的读取和操作.本章将详细介绍这些标签的功能和使用方法. SQL标签库从功能 ...
- 夺命雷公狗---DEDECMS----18dedecms之无可奈何标签-sql标签取出今天更新
我们在一些开发时候遇到普通标签都解决不了的问题的时候可以尝试下我们dedecms自带的sql标签,几乎可以完成任何的查询需求 语法如下所示: 我们在这里将刚才首页今天更新那块给改写下,原先的是: {d ...
- 9.mybatis动态SQL标签的用法
mybatis动态SQL标签的用法 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么 ...
- JSP标准标签库(JSTL)--SQL标签库 sql
了解即可.SQL标签库 No. 功能分类 标签名称 描述 1 数据源标签 <sql:setDataSource> 设置要使用的数据源名称 2 数据库操作标签 <sql:query&g ...
- JSTL SQL标签库 使用
推荐博客:http://blog.sina.com.cn/s/blog_4f925fc30101820u.html 怕博主把原文删了,所以在这里先保存一下. SQL标签库 JSTL提供了与数据库相关操 ...
- 织梦SQL标签的使用
(>=DedeCMS 3,DedeCMS 4,DedeCMS 5) 名称:sql 功能:用于获取MySQL数据库内容的标签 语法: 1 2 3 {dede:sql sql='' appname= ...
- 小峰servlet/jsp(7)jstl国际化标签库、sql标签库等
一.jstl国际化标签库: fmt:setLocale 设定用户所在的区域: fmt:formatDate 对日期进行格式化 fmt:requestEncoding 设置所有的请求编码; fmt: ...
随机推荐
- NX开发 刀路生成
此段是可以生成程序的完整代码,只有从坐标(10,10,10)到(500,500,500)一根刀轨.motion_ptr->feed_value 的值为0时生成G00,非0时生成G01.此代码只有 ...
- 以太坊web3开发初步学习
以太坊web3开发初步学习 此文是对https://learnblockchain.cn/2018/04/15/web3-html/的学习再理解. 以太坊智能合约通过使用web3.js前端和智能合约交 ...
- Mybatis初始化机制
对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章将通过以下几点详细介绍MyBatis的初始化过程. 1.MyBatis的初始化做了什么 2. MyBatis基于XML配置 ...
- 面试题系列:new String("abc")创建了几个对象
new String("abc")创建了几个对象 面试官考察点猜想 这种问题,考察你对JVM的理解程度.涉及到常量池.对象内存分配等问题. 涉及背景知识详解 在分析这个问题之前,我 ...
- 替换excel模板中的内容并使用JavaMail发送邮件
由于在公司工作,常年出差,每天都要以日报的形式向公司汇报当天的工作内容.而日报的内容大体上就只有当天工作的主要内容时变化的,其余的都是不变 的. 而我的电脑刚打开excel有点卡,因此决定使用Java ...
- Nginx(一):初识Nginx
一.什么是Nginx? Nginx 是异步框架的Web服务器,也可以用作反向代理.负载平衡器和HTTP缓存.选择Nginx的一些优点:可以高并发连接.内存消耗少.成本低廉.配置文件简单.节省带宽.稳定 ...
- SpringCloud微服务实战——搭建企业级开发框架(十一):集成OpenFeign用于微服务间调用
作为Spring Cloud的子项目之一,Spring Cloud OpenFeign以将OpenFeign集成到Spring Boot应用中的方式,为微服务架构下服务之间的调用提供了解决方案.首先, ...
- 链式A+B 牛客网 程序员面试金典 C++ Python
链式A+B 牛客网 程序员面试金典 C++ Python 题目描述 有两个用链表表示的整数,每个结点包含一个数位.这些数位是反向存放的,也就是个位排在链表的首部.编写函数对这两个整数求和,并用链表形式 ...
- Luogu P2081 [NOI2012]迷失游乐园 | 期望 DP 基环树
题目链接 基环树套路题.(然而各种错误调了好久233) 当$m=n-1$时,原图是一棵树. 先以任意点为根做$dp$,求出从每一个点出发,然后只往自己子树里走时路径的期望长度. 接着再把整棵树再扫一遍 ...
- cf 12B Correct Solution?(贪心)
题意: 一个数a,一个数b. 现在要将a的每一位上的数字重新整理,生成一个新的不含前导0的数a'. 问a'是否等于b. 思路: a上每一位的数字从小到大排序,找到最小的非零数和第一位交换. 代码: c ...