MyBatis 入門Demo

来源:https://www.cnblogs.com/chy18883701161/archive/2019/12/29/11335070.html
-Advertisement-
Play Games

新建資料庫my_db,新建表student_tb id為主鍵,不自動遞增 下載MyBatis https://github.com/mybatis/mybatis-3/releases 解壓。 新建Java項目,什麼都不用勾選(如果要在IDEA中操作資料庫,可勾選SQL Support)。 勾選後, ...


 

新建資料庫my_db,新建表student_tb

 id為主鍵,不自動遞增

 

 


 

 

下載MyBatis

https://github.com/mybatis/mybatis-3/releases

解壓。

 

 


 

 

新建Java項目,什麼都不用勾選(如果要在IDEA中操作資料庫,可勾選SQL Support)。

 

勾選後,IDEA右側會有一個Database的工具,可在IDEA中直接操作資料庫。

 

 


 

 

導入mybatis所有的jar包、資料庫驅動

mybatis.jar是必需的。

lib是mybatis依賴的第三方jar包,根據需要選擇,嫌麻煩或者小白,可全部導入lib中的jar。

pdf是mybatis的文檔。

 

 


 

設置MyBatis的日誌

在src下新建文件 log4j.properties ,內容如下:

# Global logging configuration 
log4j.rootLogger=ERROR, stdout,A
# MyBatis logging configuration... 
log4j.logger.org.mybatis.example.BlogMapper=TRACE 
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
# File output...
log4j.appender.A = org.apache.log4j.DailyRollingFileAppender
log4j.appender.A.File = D:/log.txt
log4j.appender.A.Append = true
log4j.appender.A.Threshold = ERROR
log4j.appender.A.layout = org.apache.log4j.PatternLayout
log4j.appender.A.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
log4j.appender.A.encoding=UTF-8

可到 mybatis.pdf   8.1.1.2小節複製來修改。

 

 


 

 

src下新建包com.chy.pojo,包下新建POJO類Student:

package com.chy.pojo;

public class Student {
    private int id;
    private String name;
    private int age;
    private int score;

    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;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }
}
POJO(Plain Ordinary Java Object)簡單的Java對象,實際就是普通的JavaBean,有一些屬性及其getter、setter方法,可以有一些簡單方法,比如toString(),但不能有處理業務邏輯的方法,有時可當做DTO(Data Transform Object)來使用。 我們把資料庫實體對應的類都放在pojo包下。

 

 


 

 

src下新建包com.chy.mapper,mapper下創建實體-數據表的映射文件  StudentMapper.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="com.chy.mapper.StudentMapper">
    <insert id="insertStudent" parameterType="Student">
        INSERT INTO student_tb(id,name,age,score)VALUES (#{id},#{name},#{age},#{score})
    </insert>

    <select id="queryById" parameterType="int" resultType="Student">
        SELECT * FROM student_tb WHERE id=#{id}
    </select>

    <update id="updateStudent" parameterType="Student">
        UPDATE student_tb SET name=#{name},age=#{age},score=#{score} WHERE id=#{id}
    </update>

    <delete id="deleteStudent" parameterType="int">
        DELETE FROM student_tb WHERE id=#{id}
    </delete>
</mapper>

 可以到mybatis.pdf  2.1.5小節複製來修改。

我們把映射文件都放在mapper包下,常以 實體類名+Mapper 命名。

<mapper>的namespace常設置為此映射文件的路徑。

 

通過id調用相應的sql語句,parameterType指定參數類型,resultType指定要把結果集記錄映射到哪種數據類型(只有<select>有這個屬性)。

#{}相當於sql語句中的占位符?,{}中寫對應實體類的成員變數,會自動把參數轉換為指定的成員變數。

 

 


 

 

src下新建資料庫配置文件mysql.properties:

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/my_db?serverTimezone=GMT
username=chy
password=abcd

 對應信息要換為自己的。

最好在文件名中註明是哪種資料庫,如果公司要換資料庫,比如從mysql換為oracle,好區分這個是哪個資料庫的配置。

 

 

src下新建mybatis的核心(全局)配置文件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>
    <!--指定資料庫配置文件的位置-->
    <properties resource="mysql.properties"></properties>

    <!--指定日誌實現使用的是log4j-->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>

    <!--指定實體類-->
    <typeAliases>
        <typeAlias type="com.chy.pojo.Student" alias="Student"/>
    </typeAliases>
    
    <!--指定資料庫配置文件中的變數名-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--指定映射文件的位置-->
    <mappers>
        <mapper resource="com/chy/mapper/StudentMapper.xml"/>
    </mappers>
    <!-- Continue going here -->

</configuration>

可到mybatis.pdf  2.1.2小節複製來改。

 <configuration>的子元素是有一定順序的,順序不對會報紅。

 

 


  

 

src下新建包com.chy.test,包下新建測試類Test:

package com.chy.test;

import com.chy.pojo.Student;
import org.apache.ibatis.io.Resources;
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.Reader;

public class Test {
    public static void main(String[] args) throws IOException {
        //載入mybatis的全局配置文件
        String resources="mybatis-config.xml";
        Reader reader = Resources.getResourceAsReader(resources);
        
        //根據配置文件構建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //通過SqlSessionFactory創建SqlSession
        SqlSession sqlSession=sqlSessionFactory.openSession();

        //
        Student student = new Student();
        student.setId(1);
        student.setName("chy");
        //第一個參數對應映射文件中的id,通過id調用相應的sql語句,第二個參數是傳給sql語句的
        sqlSession.insert("insertStudent", student);
        
        //修改資料庫(增、刪、改)後,需要commit()提交給資料庫,才會同步本次會話做的修改。只有查詢的,可以不commit()。
        sqlSession.commit();
        //關閉會話
        sqlSession.close();
    }
}

 

     //
        Student student = new Student();
        student.setId(1);
        student.setName("chenghongyong");
        sqlSession.update("updateStudent", student);

 

        //
        Student student=sqlSession.selectOne("queryById", 1);
        System.out.println(student);    

如果本次session期間,只有查詢,可以不用commit()。

 

        //
        sqlSession.delete("deleteStudent", 1);    

 

 


 

 

說明

(1)版本聲明部分,最好不要複製其他人的,如果你和ta用的mybatis庫版本不同,會出錯。最好到mybatis.pdf中去複製。

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

 

 

(2)配置文件的文件名問題

log4j.properties這個文件名是約定的,不能自己取。

映射文件、資料庫配置文件需要在mybatis全局配置文件中指定,它們的文件名可以自己取。

mybatis全局配置文件要在程式中指定,文件名可以自己取。

 

 

 

(3)配置文件的位置問題

配置文件必須放在資源根目錄下。常見的做法有2種:

  • 在項目的根目錄下新建文件夾resource,右鍵標識為資源根目錄

註意是Resource Root,不是Source Root。

在裡面放配置文件:

 

  • 也可以像demo中一樣放置在src下,因為src就是預設的資源根目錄。

 

mapper中的映射文件放哪兒都行,只要路徑配置對得上就ok。

log4j.properties必須直接放在資源根目錄下(不能放在子文件夾里)。


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

-Advertisement-
Play Games
更多相關文章
  • 一、Tkinter​ 1.組件的大致使用步驟 (1)創建總面板 (2)創建面板上的各種組件; i.指定組件的父組件,即依附關係;ii.利用相應的屬性對組件進行設置;iii.給組件安排佈局。 (3)同步驟2相似,創建好多個組件; (4)最後,啟動總面板的消息迴圈 import tkinter ​ ba ...
  • 代碼塊(初始化塊)的作用:對java對象進行初始化。 程式的執行順序 1、聲明成員變數的預設值; 2、顯式初始化、多個初始化塊依次被執行(同級別下按先後順序執行); 3、構造方法再對成員進行賦值操作; 一個類中的初始化塊若有修飾符,則只能被static修飾,稱為靜態代碼塊(static block) ...
  • 位運算是指按二進位進行的運算。在系統軟體中,常常需要處理二進位位的問題。C語言提供了6個位操作運算符。這些運算符只能用於整型操作數,即只能用於帶符號或無符號的char,short,int與long類型。 ...
  • 簡單抓取網頁的代碼 import requests#導入requests包 from bs4 import BeautifulSoup#從bs4中導入BeauifulSoup包 import re#導入正則表達式的包 r = requests.get("http://baidu.com") r.en ...
  • Java是一種區分字母的大小寫的語言,所以我們在定義變數名的時候應該註意區分大小寫的使用和一些規範,接下來我們簡單的來講講Java語言中包、類、變數等的命名規範。 (一)Package(包)的命名 Package的名字應該都是由一個小寫單片語成,例如com、xuetang9、company等。 (二 ...
  • 新聞 "介紹DataFrame" "介紹System.Threading.Channels" "ConfigureAwait常見問題" "第三次年度C 降臨節" ".NET會議——2020年1月14日" "如何找到F 的工作" "MiniScaffold是什麼" "函數式編程辭彙表" 視頻及幻燈片 ...
  • 設計模式就是在大量的實踐中總結和理論之後優選的代碼結構、編程風格、以及解決問題的思考方式。 說白了設計模式就是在實際編程中逐漸總結出的解決問題的套路,類似於數學公式。 類的單例設計模式:在開發過程中有且只有一個實例化對象。 怎麼做到在整個系統運行過程中,這個類只被實例化一次?不論在哪只調用這一個實例 ...
  • 前言 曾經我認為最快的是麥迪的第一步,後來我覺得 7 醬逃跑速度更快,現在我懂了,原來我們都在跟時間賽跑. 年底了,給自己一個 "交代" 吧 2019 的我 2019 年寫了 很多 篇文章, 受到一些贊賞,也遭到一些批評. 我就不要臉地把它們都當做鼓勵吧~ 帶著它們,砥礪前行 !!! 也希望自己 2 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...