Mybatis基于注解方式調用Mysql的存儲過程
1,構建一個存儲過程
PROCEDURE qiyi_ma2.gen_ci_property_value () BEGIN SET SESSION group_concat_max_len = 10240 ; DROP VIEW IF EXISTS v_ci_property_value ; SELECT GROUP_CONCAT( 'ifnull(MAX(CASE WHEN property_id=' , id , ' THEN VALUE END), '') AS ' , '' '' , id , 'FIX' , '' '' ) FROM PROPERTY_POOL INTO @s1 ; SET @sql = CONCAT( 'CREATE VIEW v_ci_property_value AS SELECT CPV.ID AS id, MAX(CI.CLASS_ID) AS CLASS_ID, MAX(CI.EN_NAME) AS enName, ' ,@s1 ,' FROM CI_PROPERTY_VALUE CPV INNER JOIN CONFIG_ITEM CI ON CPV.ID = CI.ID GROUP BY CPV.ID ORDER BY CI.CLASS_ID' ) ; SELECT @sql ; PREPARE stmt FROM @sql ; EXECUTE stmt ; END這個只是我自己的sql,沒有IO參數,應根據實際情況來處理。
2,DAO中,基于注解的調用接口
/** * 執行存儲過程gen_ci_property_value */ @SuppressWarnings("rawtypes") @Select("call gen_ci_property_value()") @Options(statementType= StatementType.CALLABLE ) public HashMap callGenCiPropertyValue();
本例中實際上不需要返回值,但是mybatis會有返回值,使用void會報錯,這里用HashMap兼容了。
使用的注解和查詢一樣,但是要指定statementType為CALLABLE。
3,Service層中的調用
public void save(ClassTree ct) throws RuntimeException { SqlSession sqlSession = null; try { sqlSession = sqlSessionFactory.openSession(); sqlSession.getMapper(ClassTreeDao.class).callGenCiPropertyValue(); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.toString()); } finally { if (sqlSession != null) sqlSession.close(); } }
來自:http://my.oschina.net/yygh/blog/288587
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!