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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!