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. 第十九节:Scrapy爬虫框架之Middleware文件详解

    # -*- coding: utf-8 -*- # 在这里定义蜘蛛中间件的模型# Define here the models for your spider middleware## See doc ...

  2. python+selenium之元素的八大定位方法

    以百度搜索框为例,先打开百度网页 1.点右上角爬虫按钮 2.点左下角箭头 3.讲箭头移动到百度搜索输入框上,输入框高亮状态 4.下方红色区域就是单位到输入框的属性: <input id=&quo ...

  3. <vue>…… v-if 与 v-show ……//

    #v-if 用法: 根据表达式的值的真假条件渲染元素.在切换时元素及它的数据绑定 / 组件被销毁并重建.如果元素是 <template> ,将提出它的内容作为条件块. 当条件变化时该指令触 ...

  4. Directory获取方式

    1) FSDirectory.open FSDirectory.open()会以最合适的方式来获取一个Directory对象. 2) RAMDirectory 可以将磁盘中的索引加载到内存中,访问速度 ...

  5. git-github 提示Permission denied (publickey) (windows)

    这种绝大多数情况是由于公钥设置的问题. 1.生成公钥 参考地址:https://help.github.com/articles/generating-a-new-ssh-key-and-adding ...

  6. Thawte SSL Web Server 多域型SSL证书

    Thawte SSL Web Server 多域型SSL证书,最多支持25个域名,需要验证域名所有权和申请单位信息,属于企业验证型SSL证书,提供40位/56位/128位,最高支持256位自适应加密. ...

  7. POJ3169 差分约束 线性

    Layout Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12522   Accepted: 6032 Descripti ...

  8. Bzoj3038 上帝造题的七分钟2 并查集

    Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1135  Solved: 509 Description XLk觉得<上帝造题的七分钟>不太 ...

  9. codeforces 691D(数据结构)

    D. Swaps in Permutation time limit per test 5 seconds memory limit per test 256 megabytes input stan ...

  10. codevs——1019 集合论与图论

    1019 集合论与图论  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 集合论与图论对于小松来说 ...