【MyBatis】MyBatis實現CRUD操作

来源:https://www.cnblogs.com/yan-lei/archive/2019/01/23/10311874.html
-Advertisement-
Play Games

1、實現基本CRUD功能 使用MyBatis對數據完整的操作,也就是CRUD功能的實現。根據之前的內容,要想實現CRUD,只需要進行映射文件的配置。 範例:修改EmpMapper.xml文件,實現CRUD 此時已經完成了映射文件的配置。就可以利用SqlSession類對象完成具體的操作,方法如下: ...


1、實現基本CRUD功能

使用MyBatis對數據完整的操作,也就是CRUD功能的實現。根據之前的內容,要想實現CRUD,只需要進行映射文件的配置。

範例:修改EmpMapper.xml文件,實現CRUD

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  <!--     每個POJO都對應MyBatis的一個命名空間,不能重覆。
          resultType使用全路徑
          設置命名空間,可以與不同表的同類型操作進行區分,使用時以“namespace.id”的方式調用;命名空間按照表名稱給出   -->
<mapper namespace="com.github.logsave.pojo.EmpMapper">

  <insert id="creatOne" parameterType="com.github.logsave.pojo.Emp">
      INSERT INTO emp(empno,ename,job,mgr,hiredate,sal)
      VALUES (#{empno},#{ename},#{job},#{mgr},#{hiredate},#{sal})
  </insert>

  <!-- 數據更新操作,最簡單的更新一定是基於Emp類的數據實現的 -->
  <update id="updateOne" parameterType="com.github.logsave.pojo.Emp">
      UPDATE emp SET empno=#{empno}, ename=#{ename}, job=#{job}, 
          mgr=#{mgr}, hiredate=#{hiredate}, sal=#{sal}
      WHERE empno={empno}
  </update>

  <!-- 刪除數據,一般根據主鍵刪除empno,empno這裡是Integer類型 -->
  <delete id="removeOne" parameterType="java.lang.Integer">
      DELETE FROM emp WHERE empno=#{empno}
  </delete>

  <!-- 根據empno查詢 -->
  <select id="selOne" resultType="com.github.logsave.pojo.Emp">
    SELECT empno,ename,job,mgr,hiredate,sal FROM emp 
    WHERE empno=#{empno}
  </select>

  <!-- 查詢全部數據,此時配置的resultType表示當前查詢結果中每一條數據返回的對象類型,不是整個方法的返回。 -->
  <select id="selAll" resultType="com.github.logsave.pojo.Emp">
       SELECT empno,ename,job,mgr,hiredate,sal FROM emp 
  </select>
</mapper>

此時已經完成了映射文件的配置。就可以利用SqlSession類對象完成具體的操作,方法如下:

  • 增加數據:public int insert(String statrment, Object parameter), 返回增加的行數;
  • 刪除數據:public int delete(String statrment, Object parameter), 返回刪除的行數;
  • 更新數據:public int update(String statrment, Object parameter), 返回更新的行數;
  • 查詢單個數據:public T selectOne(String statrment, Object parameter);
  • 查詢全部數據:public List selectList(String statement)。

測試CRUD功能,分別編寫函數進行測試。

範例:執行函數主方法

public static void main(String[] args) {

    try {
        // 1、取得操作的SqlSession對象
        String resource = "mybatis-config.xml"; // MyBatis配置文件路徑
        Reader reader = Resources.getResourceAsReader(resource); // 當前配置文件輸入流
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); // 資料庫會話工廠
        SqlSession sqlSession = sqlSessionFactory.openSession(); // 取得連接
            
            // 2、操作簡單Java類    
            // 為了測試方便,將各個方法分別編寫函數進行測試。在函數中改變方法內容進行測試。
//            creat(sqlSession);                     // 增加數據
//            selectByEmpNo(sqlSession,7499);     // 按empno查詢數據    
//            update(sqlSession);                    // 更新數據
//            remove(sqlSession);                    // 刪除數據
//            selectAll(sqlSession);                // 查詢全部數據
        
        sqlSession.close();        // 關閉連接
    } catch(IOException e) {
        e.printStackTrace();
    }
}

範例:增加數據

public static void creat(SqlSession sqlSession) {
    Emp emp = new Emp();
    emp.setEmpno(7369); 
    emp.setEname("SMITH");
    emp.setJob("CLERK");
    emp.setMgr(7902);
    
    Calendar c = Calendar.getInstance();
    c.set(1980,10,17);
    Date date = c.getTime();
    emp.setHiredate(date);
    
    emp.setSal(800.00);
        
    System.out.println("【INSERT】數據更新行數:" 
    + sqlSession.insert("com.github.logsave.pojo.EmpMapper.creatOne",emp)); sqlSession.commit(); // 事務提交 }
【INSERT】數據更新行數:1

範例:刪除數據

public static void remove(SqlSession sqlSession) {
    int empno = 7499;     // 刪除數據的empno
    System.out.println("【DELETE】數據更新行數:" + 
        sqlSession.delete("com.github.logsave.pojo.EmpMapper.removeOne",empno));
    sqlSession.commit();
}
【DELETE】數據更新行數:1

範例:更新數據

public static void update(SqlSession sqlSession) {
    Emp emp = new Emp();
    emp.setEmpno(7369); 
    emp.setEname("Logsave");
    emp.setJob("MANAGER");
//    emp.setMgr(7839);   // 註釋掉資料庫中對應值為null
    
    Calendar c = Calendar.getInstance();
    c.set(2015,10,20);
    Date date = c.getTime();
    emp.setHiredate(date);
    emp.setSal(1600.00);
        
    System.out.println("【UPDATE】數據更新行數:" 
    + sqlSession.update("com.github.logsave.pojo.EmpMapper.updateOne",emp)); sqlSession.commit(); // 事務提交 }
【UPDATE】數據更新行數:1

範例:查詢單條數據

public static void selectByEmpNo(SqlSession sqlSession) {
    int empno = 7369;
    System.out.println("【SELECT】selectByEmpno:" + empno + "\n \t" 
    + sqlSession.selectOne("com.github.logsave.pojo.EmpMapper.selOne", empno)); }
【SELECT】selectByEmpno:7369
     Emp [empno=7369, ename=Logsave, job=MANAGER, mgr=null, hiredate=Fri Nov 20 00:00:00 CST 2015, sal=1600.0]

範例:查詢全部數據

public static void selectAll(SqlSession sqlSession) {
    List<Emp> empList = sqlSession.selectList("com.github.logsave.pojo.EmpMapper.selAll");
    System.out.println("【SELECT】selectAll:");
    for(Emp emp: empList) {
        System.out.println("\t" + emp);
    }    
}
【SELECT】selectAll:
    Emp [empno=7369, ename=Logsave, job=MANAGER, mgr=null, hiredate=Fri Nov 20 00:00:00 CST 2015, sal=1600.0]
    Emp [empno=7521, ename=WARD, job=SALESMAN, mgr=7698, hiredate=Thu Oct 20 00:00:00 CST 1983, sal=1250.0]

現在完成了MyBatis的CRUD操作,已經可以進行簡單的操作了。

2、分頁顯示

實現了CRUD之後,我們就應該實現數據的分頁顯示。分頁顯示所需要的參數:

  • 模糊查詢的列:column;
  • 模糊查詢關鍵字:keyWord;
  • 開始行:start(currentPage *lineSize)
  • 取得數據的長度:lineSize。

註意:MySQL中使用LIMIT進行分頁,在Oracle中使用偽列ROWNUM進行分頁操作。

實現分頁操作需要多個參數,那麼這些參數需要一次性傳遞完成,這個時候就需要設置Map集合,利用Map集合完成參數傳遞。

範例:修改EmpMapper.xml文件

  <!-- 定義分頁查詢,其中所有的參數都利用Map集合傳遞,返回的每行數據類型為Emp -->
  <select id="selAllBySplit" parameterType="java.util.Map" resultType="com.github.logsave.pojo.Emp">
    SELECT empno,ename,job,mgr,hiredate,sal FROM emp
    WHERE ${column} LIKE #{keyWord}
    LIMIT #{start}, #{lineSize}
  </select>
  
  <!-- 查詢全部數據量,參數使用Map集合,返回COUNT()的統計結果  -->
  <select id="count" parameterType="java.util.Map" resultType="java.lang.Integer">
     SELECT COUNT(empno) FROM emp 
     WHERE ${column} LIKE #{keyWord}
  </select>

下麵的查詢依然需要的是查詢全部數據,但是需要傳遞參數:

  • 查詢全部數據:public List selectList(String statement)

範例:實現分頁查詢

public static void split(SqlSession sqlSession) {
    // 分頁操作必要的參數
    int currentPage = 1; // 當前所在頁
    int lineSize = 3; // 每頁顯示的長度
    // 需要將參數設置為Map集合後傳遞到調用的方法里
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("column", "ename");
    map.put("keyWord", "%o%");
    map.put("start", (currentPage - 1) * lineSize);
    map.put("lineSize", lineSize);
    List<Emp> empList = sqlSession.selectList("com.github.logsave.pojo.EmpMapper.selAllBySplit", map);
    System.out.println("【SELECT】分頁操作:");
    for(Emp emp: empList) {
        System.out.println("\t" + emp);
    }    
}
【SELECT】分頁操作:
    Emp [empno=7369, ename=Logsave, job=MANAGER, mgr=null, hiredate=Fri Nov 20 00:00:00 CST 2015, sal=1600.0]
    Emp [empno=7777, ename=Hello, job=work, mgr=8888, hiredate=Tue Jan 01 00:00:00 CST 2019, sal=1800.0]
    Emp [empno=7771, ename=nihao, job=work, mgr=8888, hiredate=Mon Feb 02 00:00:00 CST 2015, sal=1800.0]

範例:統計數據行數

public static void count(SqlSession sqlSession) {
    Map<String, Object> map = new HashMap<String, Object>(); 
    map.put("column", "ename");
    map.put("keyWord", "%o%");
    System.out.println("【COUNT】數據個數:" 
    + sqlSession.selectOne("com.github.logsave.pojo.EmpMapper.count", map) );
}
【COUNT】數據個數:3

程式源碼


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我相信對於很多愛好和習慣寫博客的人來說,如果自己的博客有很多人閱讀和評論的話,自己會非常開心,但是你發現自己用心寫的博客卻沒什麼人看,多多少少會覺得有些傷心吧?我們今天就來看一下為什麼你的博客沒人看呢? 一、頁面分析 首先進入博客園首頁,可以看到一頁有20篇博客簡介,然後有200頁,也就是說總共有2 ...
  • 使用static關鍵字修飾的變數和方法為靜態變數、靜態方法。 非靜態方法可以訪問靜態變數/方法和非靜態變數/方法,但靜態方法只能訪問靜態變數/方法。 可以看到在靜態方法中調用非靜態變數和非靜態方法時,Java會報錯。 所謂的靜態是指變數或方法可以不依賴對象而直接使用類名來調用,這也是static的意 ...
  • 第74節:第74節:Java中的Cookie和Session : 什麼是 ,有什麼用哦,怎麼用呢? 啟動伺服器後,會給每個應用程式創建一個 ,並且這個 對象只有一個。可以用於獲取全局參數,工程下的資源,和存取數據,共用數據。 例子,如何獲取全局參數,如何獲取工程下的資源,如何進行存取數據,用例子代碼 ...
  • 今天在寫條件語句時,一老出錯 自認為程式上是沒什麼問題的,所以將逗號去掉試試看 得出了正確的值,很意外,然後多試了幾次之後,逗號也可以輸入了 原來我誤把中文輸入法的逗號輸入到scanf中,而運行時又用英文輸入法 然後得出來的總結就是,scanf函數中必須用自己制定的格式,輸入,輸出。 ...
  • If I had only one hour to save the worlds,I would spend fifty five minutes defining the problem,and only five minutes finding the solution. 如果我只有1小時拯救 ...
  • 函數名的使用: 函數名可以作為值,賦值給變數 函數名可以作為參數傳參給函數. 函數名可以作為返回值 函數名可以作為元素存儲在容器里 閉包:在嵌套函數內,使用外層局部變數(非全局變數)就是一個閉包,閉包可以多層嵌套.閉包的優點: 避免局部變數不被外界修改 函數生命周期延長 節省開闢空間,銷毀空間的時間 ...
  • 一、前言 在上一篇文章中,已經介紹了基於Redis實現分散式鎖的正確姿勢,但是上篇文章存在一定的缺陷——它加鎖只作用在一個Redis節點上,如果通過sentinel保證高可用,如果master節點由於某些原因發生了主從切換,那麼就會出現鎖丟失的情況: 於是,客戶端1和客戶端2同時持有了同一個資源的鎖 ...
  • 如果你不懂電腦語言,那麼就請你不要說你是學電腦的!!好丟人的。。。今天然我帶你深入瞭解真正的電腦語言! 編程語言可分為三種:高級語言、彙編語言、機器語言。 1、什麼是高級語言? 高級語言:它是把高級語言的基本結構和語句與低級語言的實用性結合起來的工作單元。 常見的高級語言:Java、C、C++ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...