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