| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
10年前发布

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 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1404887622216.html
MyBatis3 持久层框架 MyBatis