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();
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM