最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年11月17日 13:46:52   作者:IAMTJW  
這一篇我們學習一下Mybatis調用存儲過程的使用和運行流程,首先我們創(chuàng)建一個簡單的存儲過程,具體創(chuàng)建過程大家可以通過本文學習下

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

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,然后執(zhí)行select count(*) from users where users.age = age into user_count;獲得年齡等于age的人數(shù)賦值給user_count,還是比較簡單的。

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

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

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

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

Main函數(shù):

public class Learn1Main { 
 public static void main(String [] args){ 
  //mybatis的配置文件 
  String resource = "learn/mybatis-config.xml"; 
  //使用類加載器加載mybatis的配置文件(它也加載關聯(lián)的映射文件) 
  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); 
 } 
} 

運行結果:

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

// 
// HANDLE OUTPUT PARAMETER 
// 
//調用存儲過程返回結果,將結果值放在參數(shù)中 
@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(); 
/循環(huán)處理每個參數(shù) 
 for (int i = 0; i < parameterMappings.size(); i++) { 
 final ParameterMapping parameterMapping = parameterMappings.get(i); 
 //判斷參數(shù)的模式 
 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源碼分析之存儲過程調用和運行流程,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • Java web的讀取Excel簡單實例代碼

    Java web的讀取Excel簡單實例代碼

    下面小編就為大家?guī)硪黄狫ava web的讀取Excel簡單實例代碼。小編覺挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • idea導入若依項目教程

    idea導入若依項目教程

    文章介紹了如何在IntelliJ?IDEA中導入若依管理系統(tǒng)項目,并詳細步驟包括克隆項目、修改配置文件、創(chuàng)建數(shù)據(jù)庫、運行項目和前端展示
    2025-03-03
  • Spring Boot 如何整合連接池

    Spring Boot 如何整合連接池

    這篇文章主要介紹了Spring Boot 如何整合連接池,幫助大家更好的理解和學習spring boot框架,感興趣的朋友可以了解下
    2020-11-11
  • 排序算法圖解之Java歸并排序的實現(xiàn)

    排序算法圖解之Java歸并排序的實現(xiàn)

    歸并排序是建立在歸并操作上的一種有效,穩(wěn)定的排序算法,該算法是采用分治法(Divide?and?Conquer)的一個非常典型的應用。本文主要介紹了歸并排序的實現(xiàn),需要的可以參考一下
    2022-11-11
  • JAVA中Collections工具類sort()排序方法

    JAVA中Collections工具類sort()排序方法

    這篇文章主要介紹了JAVA中Collections工具類sort()排序方法,非常具有實用價值,需要的朋友可以參考下。
    2016-11-11
  • SpringBoot創(chuàng)建自定義Starter代碼實例

    SpringBoot創(chuàng)建自定義Starter代碼實例

    這篇文章主要介紹了SpringBoot創(chuàng)建自定義Starter代碼實例,自定義 Starter 是一種在軟件開發(fā)中常用的技術,它可以幫助開發(fā)者快速搭建項目的基礎框架和配置,可以將一些常用的功能、依賴和配置封裝成一個可復用的模塊,方便在不同的項目中使用,需要的朋友可以參考下
    2023-11-11
  • Windows中在IDEA上安裝和使用JetBrains Mono字體的教程

    Windows中在IDEA上安裝和使用JetBrains Mono字體的教程

    這篇文章主要介紹了Windows IDEA上安裝和使用JetBrains Mono字體的教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Java AQS中閉鎖CountDownLatch的使用

    Java AQS中閉鎖CountDownLatch的使用

    CountDownLatch 是一個同步工具類,用來協(xié)調多個線程之間的同步,它能夠使一個線程在等待另外一些線程完成各自工作之后,再繼續(xù)執(zhí)行。被將利用CountDownLatch實現(xiàn)網(wǎng)絡同步請求,異步同時獲取商品信息組裝,感興趣的可以了解一下
    2023-02-02
  • win7 64位系統(tǒng)JDK安裝配置環(huán)境變量教程

    win7 64位系統(tǒng)JDK安裝配置環(huán)境變量教程

    這篇文章主要為大家詳細介紹了win7 64位系統(tǒng)JDK安裝配置環(huán)境變量教程,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java幾種分布式全局唯一ID生成方案

    Java幾種分布式全局唯一ID生成方案

    本文主要介紹了聊聊幾種分布式全局唯一ID生成方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01

最新評論

夏邑县| 兴义市| 中山市| 巫山县| 宁强县| 重庆市| 镇康县| 喜德县| 鸡东县| 石台县| 岗巴县| 铁力市| 双鸭山市| 常宁市| 盐山县| 平陆县| 腾冲县| 甘洛县| 安阳市| 盐津县| 博爱县| 沅陵县| 政和县| 郓城县| 桐乡市| 无棣县| 吴桥县| 敦煌市| 邹平县| 武强县| 天峻县| 新昌县| 高尔夫| 洛浦县| 金堂县| 漳平市| 嘉峪关市| 湘阴县| 阜城县| 张家界市| 磐安县|