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: ...
随机推荐
- 函数返回值为 const 指针、const 引用
函数返回值为 const 指针,可以使得外部在得到这个指针后,不能修改其指向的内容.返回值为 const 引用同理. class CString { private: char* str; publi ...
- SpringMVC、Spring、MyBatis整合(IDEA版)
1 环境准备 1.1 软件架构 JDK 1.8 Spring 4.x Mybatis 3.x Maven 3.x MySQL 5.7 1.2 创建数据库 创建数据库,数据库名ssm-demo,字符集u ...
- Linux主机入侵检测
检查系统信息.用户账号信息 ● 操作系统信息 cat /proc/version 用户信息 用户信息文件 /etc/passwd root:x:0:0:root:/root:/bin/bash 用户名 ...
- Python爬虫:给我一个链接,快手视频随便下载
前言 讲一下,文明爬虫,从我做起(1.文章中的程序代码仅供学习,切莫用于商业活动,一经被相关人员发现,本小编概不负责!2.请在服务器闲时运行本程序代码,以免对服务器造成很大的负担.) 1. 实现原理 ...
- Scrum Meeting 0425
零.说明 日期:2021-4-25 任务:简要汇报两日内已完成任务,计划后两日完成任务 一.进度情况 组员 负责 两日内已完成的任务 后两日计划完成的任务 qsy PM&前端 完成登录.注册A ...
- springboot整合rabbitmq实现生产者消息确认、死信交换器、未路由到队列的消息
在上篇文章 springboot 整合 rabbitmq 中,我们实现了springboot 和rabbitmq的简单整合,这篇文章主要是对上篇文章功能的增强,主要完成如下功能. 需求: 生产者在启 ...
- JVM:Java内存区域与内存溢出异常
Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁时间,有些区域随着虚拟机进程的启动而存在,有些区域依赖用户线程的启动和 ...
- JAVA笔记6__抽象类/接口/多态/instanceof关键字、父类设计法则
/** * 抽象类:很多具有相同特征和行为的类可以抽象为一个抽象类 * 1.抽象类可以没有抽象方法,有抽象方法的类必须是抽象类 * 2.非抽象类继承抽象类必须实现抽象方法[可以是空实现] * 3.抽象 ...
- js实现日期格式化封装-八种格式
封装一个momentTime.js文件,包含8种格式. 需要传两个参数: 时间戳:stamp 格式化的类型:type, 日期补零的方法用到es6语法中的padStart(length,'字符'): 第 ...
- Nessus home版插件更新
1,进入服务器停止服务 service nessusd stop 2,进入目录执行命令获取Challenge code cd /opt/nessus/sbin/ ./nessuscli fetch - ...