MyBatis高级查询 存储过程

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();
        }
    }
时间: 2024-10-06 00:41:58

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

Mybatis 高级查询的小整理

高级查询的整理 // resutlType无法帮助我们自动的去完成映射,所以只有使用resultMap手动的进行映射 resultMap: type 结果集对应的数据类型 id 唯一标识,被引用的时候,进行指定 autoMapping 开启自动映射 extends 继承 子标签: association:配置对一的映射 property 定义对象的属性名 javaType 属性的类型 autoMapping 开启自动映射 collection:配置对多的映射 property 定义对象的属性名

Mybatis高级查询之关联查询

3 关联查询 做查询之前,先修改几个配置.mapper.xml是在mybatis-config.xml中指定,那么我们每增加一个mapper都要增加一个配置,很麻烦.为了简化配置.需要将mapper接口和mapper.xml放到同一个文件下,并且接口和xml文件命名一致.使用mybatis的自动扫描:.这样,当我们新增接口的时候,直接创建接口和对应xml文件就可以了: <mappers> <!--<mapper resource="com.test.mapper.dao/

MyBatis高级查询 一对多映射

数据库表在一对一映射中. 在数据库sys_user_role中新增一条记录 一个用户可以有多个角色.查询出所有用户和所对应的角色. 1.collection集合的嵌套结果映射 <!-- SysUserMapper.xml --> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN&q

MyBatis高级查询 一对一映射

drop database if exists simple; create database simple; use simple; drop table if exists sys_user; create table sys_user ( id bigint not null auto_increment comment '用户ID', user_name varchar(50) comment '用户名', user_password varchar(50) comment '密码',

MyBatis高级查询

<?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"> <!-- namespace表示命名空间 保证它是唯一 cn.itsource.mybatis.dao.

Mybatis学习记录(四)--高级查询和缓存

这些都是连贯的学习笔记,所以有的地方因为之前都说过,所以也就没怎么写详细了,看不太明白的可以看看之前的笔记. 一.高级查询 高级查询主要是一对一查询,一对多查询,多对多查询 1.一对一查询 有用户和订单两个表,用户对订单是1对1查询.也就是订单中有一个外键是指向用户的. 先创建实体类: User.java public class User { private int id; private String username; private String password; private St

MyBatis高级映射查询(3)

一.数据库数据和项目搭建过程 1.主要要四张表,分别为user用户信息表.items商品表.orderdetail订单明细表.orders订单表.表的结构和数据如下: 表结构 CREATE DATABASE mybatis DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci CREATE TABLE `items` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(32) NOT NUL

MyBatis(7)高级查询

高级查询: 对于整体的工程是时候增加一点文件了: 具体用到那个类再去说明类的内容 一对一查询: 1.resultType进行实现: 执行的sql语句: 查询的主表:订单表 查询的关联表:用户表 orders表有一个外键 select orders.*,user.username,user.sex,user.address  from orders ,user where orders.user_id = user.id; ordersCustomer.java public class Orde

MyBatis和elementui中的高级查询和分页

前台 我们需要发送请求和带入参数 有了这两个属性过后需要在data中添加 这个属性是和方法平级的 整个页面 <template> <section> <!--工具条--> <el-col :span="24" class="toolbar" style="padding-bottom: 0px;"> <el-form :inline="true" :model="