01 Mybatis 的配置和使用

来源:https://www.cnblogs.com/nnngu/archive/2018/02/22/8459949.html
-Advertisement-
Play Games

一、Mybatis 是什麼 ![][1] MyBatis 是一個支持普通SQL查詢、存儲過程和高級映射的優秀持久層框架。MyBatis 消除了幾乎所有的 JDBC 代碼和參數的手工設置以及對結果集的檢索封裝。MyBatis可以使用簡單的XML或註解用於配置和原始映射,將介面和Java的POJO(Pl ...


一、Mybatis 是什麼

MyBatis 是一個支持普通SQL查詢、存儲過程和高級映射的優秀持久層框架。MyBatis 消除了幾乎所有的 JDBC 代碼和參數的手工設置以及對結果集的檢索封裝。MyBatis可以使用簡單的XML或註解用於配置和原始映射,將介面和Java的POJO(Plain Old Java Objects,普通的Java對象)映射成資料庫中的記錄。

二、Mybatis 的使用

1、導包

Mybatis 需要以下的 jar 包:

mybatis.jar
mysql-connector-java.jar

使用 Maven 構建的項目,需要在 pom.xml 中添加如下依賴:

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.7</version>
        </dependency>

        <!--資料庫驅動-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>

2、建表

創建資料庫和表,針對MySQL資料庫,SQL腳本如下:

create database mybatis_demo;
use mybatis_demo;
CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);
insert into users values(null,'郭靖', 27);
insert into users values(null,'黃蓉', 17);

到此,建表工作已經完成。

3、創建表所對應的實體類

如下圖所示:

User 類的代碼如下:

package com.nnngu.domain;

public class User {
    // 實體類的屬性和表的欄位名稱一一對應
    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
}

4、創建用來操作 users 表的 sql 映射文件 userMapper.xml

userMapper.xml 的代碼如下:

<?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">

<!-- 為這個mapper指定一個唯一的namespace,namespace的值習慣上設置成包名+sql映射文件名,這樣就能夠保證namespace的值是唯一的 -->
<mapper namespace="com.nnngu.mapping.userMapper">

    <!-- 在select標簽中編寫查詢的SQL語句, select標簽的id屬性為getUser,id屬性值必須是唯一的,不能夠重覆
    使用parameterType屬性指明查詢時使用的參數類型,resultType屬性指明查詢返回的結果集類型
    resultType="com.nnngu.domain.User"就表示將查詢結果封裝成一個User類的對象返回
    User類就是users表所對應的實體類
    -->
    <select id="getUser" parameterType="int"
            resultType="com.nnngu.domain.User">
        select * from users where id=#{id}
    </select>
</mapper>

5、創建 Mybatis 的配置文件

創建配置文件 mybatis_config.xml ,在下圖所示的位置

mybatis_config.xml的代碼如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!-- 配置資料庫連接信息 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo"/>
                <property name="username" value="root"/>
                <property name="password" value="1"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 註冊userMapper.xml -->
    <mappers>
        <mapper resource="com.nnngu.mapping/userMapper.xml"/>
    </mappers>

</configuration>

6、測試

創建一個Test1類,編寫如下的測試代碼:

package com.nnngu.test;

import com.nnngu.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class Test1 {
    public static void main(String[] args) throws IOException {
        // mybatis 的配置文件
        String resource = "mybatis_config.xml";

        // 使用類載入器載入mybatis的配置文件(它也載入關聯的映射文件)
        InputStream is = Test1.class.getClassLoader().getResourceAsStream(resource);

        // 構建sqlSession的工廠
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);

        // 創建能執行映射文件中sql的sqlSession
        SqlSession session = sessionFactory.openSession();

        /**
         * 映射sql的標識字元串,
         * com.nnngu.mapping.userMapper是userMapper.xml文件中mapper標簽的namespace屬性的值,
         * getUser是select標簽的id屬性值,通過select標簽的id屬性值就可以找到要執行的SQL
         */
        String statement = "com.nnngu.mapping.userMapper.getUser"; // 映射sql的標識字元串

        // 執行查詢返回一個user對象的sql
        User user = session.selectOne(statement, 1);
        System.out.println(user);
    }
}

測試結果:


本文永久更新地址:https://github.com/nnngu/LearningNotes/blob/master/Mybatis/01%20Mybatis%20%E7%9A%84%E9%85%8D%E7%BD%AE%E5%92%8C%E4%BD%BF%E7%94%A8.md


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

-Advertisement-
Play Games
更多相關文章
  • jdk1.8.0_41 一知半解寫代碼, 集合排序用個啥。 抄起鍵盤胡亂打, 似懂非懂最可怕。 Comparable與Comparator都是用於集合的排序,對於大多數人來說Comparator可能略微比Comparable要熟悉一點,類似下麵這幾句代碼的使用頻率應該是最高的。 這是一段對集合排序的 ...
  • 數組函數 java.util包的Arrays類中用來操作數組的方法:使用前需導入類import java.util.Arrays; fill() 填充替換數組元素Arrays.fill(arr,8) //將數組arr中的值都變為8 Arrays.fill(arr,1,2,8) //將數組arr中索引 ...
  • OS:windows 10,x64JDK:9.0.4JRE:Java(TM) SE Runtime Environment (build 9.0.4+11)下載及安裝步驟省略新建系統變數JAVA_HOME=jdk安裝路徑JRE_HOME=jre安裝路徑PATH= .;%JAVA_HOME%\bin;... ...
  • 定位記憶體泄漏是C++的一個棘手問題,可行的方法之一如下: 在debug模式下,在輸出中可以看到如下信息: 請註意大括弧{}中的內容,此處是{156},這就是程式可能記憶體泄露的地方。 將上面註釋的代碼加入,並將大括弧中的數字填入,就可以讓程式停在記憶體泄漏的地方。 如下,這裡我讓程式停在156處: 參考 ...
  • package com.xiwi; import java.io.*; import java.util.*; class file{ public static void main(String args[]){ System.out.println("file Go..."); // 這裡改成你... ...
  • 如果父類和子類中存在static方法或者變數, 那麼父類對象指向子類引用的時候, 調用的靜態方法或變數都是父類的static方法或變數,與子類引用無關。 因為static修飾的方法或變數不需要使用對象,只用類名就可以調用, 非static的方法需要對象名才能調用,所以父類對象指向子類引用的時候,調用 ...
  • 巴什博奕 巴什博奕: 兩個頂尖聰明的人在玩游戲,有$n$個石子,每人可以隨便拿$1 m$個石子,不能拿的人為敗者,問誰會勝利 巴什博奕是博弈論問題中基礎的問題 它是最簡單的一種情形對應一種狀態的博弈 博弈分析 我們從最簡單的情景開始分析 當石子有$1 m$個時,毫無疑問,先手必勝 當石子有$m+1$ ...
  • 前言 前面介紹了maven相關的SSH開發的,但是在團隊開發中一般都是各自負責各自的,最後再歸結在一起。所以接下來筆者要學習的就是maven的分模塊開發的相關內容。 一、案例需求 基於上邊的三個工程分析 繼承:創建一個parent工程將所需的依賴都配置在pom中 聚合:聚合多個模塊運行 1.1需求描 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...