国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|

服務器之家 - 編程語言 - JAVA教程 - Mybatis源碼分析之存儲過程調用和運行流程

Mybatis源碼分析之存儲過程調用和運行流程

2020-07-05 13:49IAMTJW JAVA教程

這一篇我們學習一下Mybatis調用存儲過程的使用和運行流程,首先我們創建一個簡單的存儲過程,具體創建過程大家可以通過本文學習下

這一篇我們學習一下Mybatis調用存儲過程的使用和運行流程。首先我們先創建一個簡單的存儲過程

?
1
2
3
4
5
6
DELIMITER $
CREATE PROCEDURE mybatis.ges_user_count(IN age INT, OUT user_count INT)
BEGIN
SELECT COUNT(*) FROM users WHERE users.age=age INTO user_count;
END
$

這個存儲過程的含義其實比較簡單的,就是輸入age,然后執行select count(*) from users where users.age = age into user_count;獲得年齡等于age的人數賦值給user_count,還是比較簡單的。

接下來是存儲過程的調用,執行如下命令就可以完成存儲過程的調用。

Mybatis源碼分析之存儲過程調用和運行流程

接下來我們看看利用Mybatis是如何調用存儲過程的。

userMapper.xml添加存儲過程調用配置:

?
1
2
3
<select id="count" statementType="CALLABLE" parameterMap="getUserCountMap">
  CALL mybatis.ges_user_count(?,?)
</select>

Main函數:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Learn1Main {
 public static void main(String [] args){
  //mybatis的配置文件
  String resource = "learn/mybatis-config.xml";
  //使用類加載器加載mybatis的配置文件(它也加載關聯的映射文件)
  InputStream is = Learn1Main.class.getClassLoader().getResourceAsStream(resource);
  //構建sqlSession的工廠
  SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
  SqlSession session = sessionFactory.openSession();
  Map<String, Integer> parameterMap = new HashMap<String, Integer>();
  parameterMap.put("age", 12);
  parameterMap.put("user_count", -1);
  session.selectOne("com.tianjunwei.learn.learn1.entity.User.count", parameterMap);
  Integer result = parameterMap.get("user_count");
  System.out.println(result);
 }
}

運行結果:

其最終的執行過程在DefaultResultSetHandler中,調用普通的sql和存儲過程之間還是有所區別的,Sql語句的執行是使用CallableStatement。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//
// HANDLE OUTPUT PARAMETER
//
//調用存儲過程返回結果,將結果值放在參數中
@Override
public void handleOutputParameters(CallableStatement cs) throws SQLException {
 final Object parameterObject = parameterHandler.getParameterObject();
 final MetaObject metaParam = configuration.newMetaObject(parameterObject);
 final List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
/循環處理每個參數
 for (int i = 0; i < parameterMappings.size(); i++) {
 final ParameterMapping parameterMapping = parameterMappings.get(i);
 //判斷參數的模式
 if (parameterMapping.getMode() == ParameterMode.OUT || parameterMapping.getMode() == ParameterMode.INOUT) {
  if (ResultSet.class.equals(parameterMapping.getJavaType())) {
  handleRefCursorOutputParameter((ResultSet) cs.getObject(i + 1), parameterMapping, metaParam);
  } else {
  final TypeHandler<?> typeHandler = parameterMapping.getTypeHandler();
  metaParam.setValue(parameterMapping.getProperty(), typeHandler.getResult(cs, i + 1));
  }
 }
 }
}
private void handleRefCursorOutputParameter(ResultSet rs, ParameterMapping parameterMapping, MetaObject metaParam) throws SQLException {
 try {
 final String resultMapId = parameterMapping.getResultMapId();
 final ResultMap resultMap = configuration.getResultMap(resultMapId);
 final DefaultResultHandler resultHandler = new DefaultResultHandler(objectFactory);
 final ResultSetWrapper rsw = new ResultSetWrapper(rs, configuration);
 handleRowValues(rsw, resultMap, resultHandler, new RowBounds(), null);
 metaParam.setValue(parameterMapping.getProperty(), resultHandler.getResultList());
 } finally {
 // issue #228 (close resultsets)
 closeResultSet(rs);
 }
}

Mybatis源碼分析之存儲過程調用和運行流程

以上所述是小編給大家介紹的Mybatis源碼分析之存儲過程調用和運行流程,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://blog.csdn.net/qq924862077/article/details/53198444

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产一区二区三区免费 | 国产精品第一国产精品 | 精品一区二区三区免费 | 日韩精品一区二区三区四区 | 91精品国产综合久久久久久丝袜 | 四虎免费视频 | 日韩国产| 色官网| 日本一区不卡 | 一区二区不卡视频 | 小泽玛丽娅| 久久久中文字幕 | 亚洲精品久久久 | 黄色影片免费在线观看 | 成人免费国产 | 国产一级片 | 日韩欧美视频免费在线观看 | 曰韩免费视频 | 国产亚洲精品久久久久久 | 日韩中文字幕在线播放 | 欧美视频在线观看 | 亚洲高清色综合 | 日本在线不卡视频 | 一级欧美日韩 | 成人在线一区二区 | 九热在线视频 | 国产精品网站在线观看 | 精品久久久久国产 | 一区二区av在线 | 成人免费观看49www在线观看 | 亚洲一区中文字幕在线观看 | 狠狠操狠狠操 | 亚洲免费一区 | 五月天婷婷在线视频 | 美日韩一区| 精品国产成人 | 日韩欧美国产一区二区 | 色站综合 | 国产在线不卡 | 久久久久成人精品免费播放动漫 | 亚洲视频在线不卡 |