1.第一个存储过程  根据用户id查询用户其他信息

#第一个存储过程
#根据用户id查询用户其他信息
DROP PROCEDURE IF EXISTS `select_user_by_id`;
DELIMITER ;;
CREATE PROCEDURE `select_user_by_id` (
IN userId BIGINT,
OUT userName VARCHAR (50),
OUT userPassword VARCHAR (50),
OUT userEmail VARCHAR (50),
OUT userInfo TEXT,
OUT headImg BLOB,
OUT createTime DATETIME
)
BEGIN
#根据用户id查询其他数据
SELECT user_name,user_password,user_email,user_info,head_img,create_time
INTO userName,userPassword,userEmail,userInfo,headImg,createTime
FROM sys_user
WHERE id = userId;
END
;;
DELIMITER ;
#sql中调用
SET @userId = 1; CALL select_user_by_id (
@userId ,@userName ,@userPassword ,@userEmail,@userInfo,@headImg,@createTime
); SELECT
@userName AS userName ,@userPassword AS userPassword,@userEmail as userEmail,@userInfo as userInfo,@headImg as headImg,@createTime as createTime;

SysUserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test.dao.SysUserMapper">
<resultMap id="BaseResultMap" type="test.model.SysUser">
<!--
WARNING - @mbggenerated
This element is automatically generated by MyBatis Generator, do not modify.
-->
<id column="id" jdbcType="BIGINT" property="id" />
<result column="user_password" jdbcType="VARCHAR" property="userPassword" /> <result column="user_name" jdbcType="VARCHAR" property="userName" />
<result column="user_email" jdbcType="VARCHAR" property="userEmail" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="user_info" jdbcType="LONGVARCHAR" property="userInfo" />
<result column="head_img" jdbcType="LONGVARBINARY" property="headImg" /> </resultMap> <!-- 调用存储过程 -->
<select id="selectUserById" statementType="CALLABLE" useCache="false">
{call select_user_by_id(
#{id,mode=IN},
#{userName,mode=OUT,jdbcType=VARCHAR},
#{userPassword,mode=OUT,jdbcType=VARCHAR},
#{userEmail,mode=OUT,jdbcType=VARCHAR},
#{userInfo,mode=OUT,jdbcType=VARCHAR},
#{headImg,mode=OUT,jdbcType=BLOB,javaType=_byte[]},
#{createTime,mode=OUT,jdbcType=TIMESTAMP}
)}
</select>
</mapper>
//dao层
void selectUserById(SysUser user); //测试 ;返回结果存储在参数对象中;因为在存储过程中使用了别名user_name;
//如若不使用别名,则在mapper中可以自定义resultMap="BaseResultMap"

@Test
public void testSelectUserById() {
SqlSession sqlSession = getSqlSession();
SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class);
SysUser user = new SysUser();
user.setId(1L);
sysUserMapper.selectUserById(user);
Assert.assertNotNull(user);
System.out.println(user.getUserName());
}

2第二个存储过程     简单根据用户名和分页参数进行查询,返回总数和分页数据

#第二个存储过程
#简单根据用户名和分页参数进行查询,返回总数和分页数据
DROP PROCEDURE IF EXISTS `select_user_page`;
DELIMITER ;;
CREATE PROCEDURE `select_user_page`(
IN userName VARCHAR(50),
IN _offset BIGINT,
IN _limit BIGINT,
OUT total BIGINT)
BEGIN
#查询数据总数
SELECT count(*) INTO total FROM sys_user
WHERE user_name like concat('%', userName ,'%');
#分页查询数据
SELECT * FROM sys_user
WHERE user_name like concat('%', userName ,'%')
limit _offset,_limit;
END
;;
DELIMITER ;
#存储过程调用
SET @userName='ad',@_offset=0,@_limit=1;
CALL select_user_page(
@userName,@_offset,@_limit,@total
); SELECT @total as total;

SysUserMapper.xml

<select id="selectUserPage" statementType="CALLABLE" useCache="false" resultMap="BaseResultMap">
{call select_user_page(
#{userName,mode=IN},
#{offset,mode=IN},
#{limit,mode=IN},
#{total,mode=OUT,jdbcType=BIGINT}
)}
</select>
//dao
List<SysUser> selectUserPage(Map<String,Object> params); //测试
@Test
public void testSelectUserPage() {
SqlSession sqlSession = getSqlSession();
try {
SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class);
Map<String,Object> params = new HashMap<String, Object>();
params.put("userName", "ad");
params.put("offset", "0");
params.put("limit", "1");
List<SysUser> userList = sysUserMapper.selectUserPage(params);
Long total = (Long) params.get("total");
System.out.println("总数:"+total);
for (SysUser sysUser : userList) { System.out.println("用户名:"+sysUser.getUserName());
}
}
finally {
sqlSession.close();
}
}

MyBatis高级查询 存储过程的更多相关文章

  1. MyBatis高级查询

    -------------------------siwuxie095 MyBatis 高级查询 1.MyBatis 作为一个 ORM 框架,也对 SQL 的高级查询做了支持, MyBatis 高级查 ...

  2. MyBatis 高级查询环境准备(八)

    MyBatis 高级查询 之前在学习 Mapper XML 映射文件时,说到 resultMap 标记是 MyBatis 中最重要最强大也是最复杂的标记,而且还提到后面会详细介绍它的高级用法. 听到高 ...

  3. MyBatis从入门到精通(第6章):MyBatis 高级查询->6.1.2高级结果映射之一对多映射

    jdk1.8.MyBatis3.4.6.MySQL数据库5.6.45.IntelliJ IDEA 2019.3.1 本章主要包含的内容为 MyBatis 的高级结果映射,主要处理数据库一对一.一对多的 ...

  4. MyBatis从入门到精通(第6章):MyBatis 高级查询->6.1.1高级结果映射之一对一映射

    jdk1.8.MyBatis3.4.6.MySQL数据库5.6.45.IntelliJ IDEA 2019.2.4 本章主要包含的内容为 MyBatis 的高级结果映射,主要处理数据库一对一.一对多的 ...

  5. MyBatis 高级查询之多对多查询(十一)

    高级查询之多对多查询 查询条件:根据玩家名,查询游戏信息 我们在之前创建的映射器接口 GameMapper.java 中添加接口方法,如下: /** * 根据玩家名查询游戏 * @param name ...

  6. MyBatis 高级查询之一对多查询(十)

    高级查询之一对多查询 查询条件:根据游戏名称,查询游戏账号信息 我们在之前创建的映射器接口 GameMapper.java 中添加接口方法,如下: /** * 根据游戏名查询游戏账号 * @param ...

  7. MyBatis 高级查询之一对一查询(九)

    高级查询之一对一查询 查询条件:根据游戏角色ID,查询账号信息 我们在之前创建的映射器接口 GameMapper.java 中添加接口方法,如下: /** * 根据角色ID查询账号信息 * @para ...

  8. Mybatis 高级查询的小整理

    高级查询的整理 // resutlType无法帮助我们自动的去完成映射,所以只有使用resultMap手动的进行映射 resultMap: type 结果集对应的数据类型 id 唯一标识,被引用的时候 ...

  9. Mybatis高级查询之关联查询

    learn from:http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#Result_Maps 关联查询 准备 关联结果查询(一对一) resul ...

随机推荐

  1. [luoguP1868] 饥饿的奶牛(DP)

    传送门 先把所有区间按照左端点排序 f[i]表示区间0~i的最优解 #include <cstdio> #include <iostream> #include <alg ...

  2. 网络编程基础:粘包现象、基于UDP协议的套接字

    粘包现象: 如上篇博客中最后的示例,客户端有个 phone.recv(2014) , 当服务端发送给客户端的数据大于1024个字节时, 多于1024的数据就会残留在管道中,下次客户端再给服务端发命令时 ...

  3. Arctic Network POJ - 2349

    The Department of National Defence (DND) wishes to connect several northern outposts by a wireless n ...

  4. [bzoj2738]矩阵乘法_整体二分_树状数组

    矩阵乘法 bzoj-2738 题目大意:给定一个$n*n$的矩阵.每次给定一个矩阵求矩阵$k$小值. 注释:$1\le n\le 500$,$1\le q\le 6\cdot 10^4$. 想法: 新 ...

  5. eclipse添加高版本tomcat问题

    eclipse添加高版本tomcat会报错,提示无法匹配高版本的容器installation is expected 解决方法: 1.找到tomcat的lib目录下的catalina.jar包,用压缩 ...

  6. MongoDB小结20 - find【查询条件$size】

    size可以获得指定数组长度的文档 db.user.find({"fruit":{"$size":3}},{"_id":0}) { &quo ...

  7. Linux下搭建maven私服Nexus 3.2.1-01

    1. 私服介绍私服是指私有服务器,是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构建.有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库:否则, ...

  8. python的for else语句

    Python循环中的else语句 绝大部分编程语言中都有条件判断语句,比如 if … else ,在大部语言中,else 一般只在条件判断语句中出现,与 if 语句配套出现,不过在 Python 中, ...

  9. sqlit中使用到的查询语句

    近期使用sqlite查询比較多,包含连表查询等. 记录一下.以免忘记! 1.先依据时间排序后选择前十条: select * from MyBill order by  createTime desc ...

  10. Office高级威胁漏洞在野利用分析

    高级威胁漏洞背景 在高级威胁攻击中,黑客远程投递入侵客户端最喜欢的漏洞是office文档漏洞,就在刚刚结束不久的黑帽子大会上,最佳客户端安全漏洞奖颁给了CVE-2017-0199漏洞,这个漏洞是时下o ...