0063 MyBatis入門示例

来源:http://www.cnblogs.com/sonng/archive/2017/04/07/6678295.html
-Advertisement-
Play Games

MyBatis是一個“半自動化”的ORM框架,ORM即Object/Relation Mapping,對象關係映射,是面向對象編程語言跟關係型資料庫的橋梁,將編程語言對Java實體類的操作映射到資料庫中。 下麵以向資料庫中添加一條圖書信息為例,說明MyBatis的入門操作 MyEclipse中新建個 ...


MyBatis是一個“半自動化”的ORM框架,ORM即Object/Relation Mapping,對象關係映射,是面向對象編程語言跟關係型資料庫的橋梁,將編程語言對Java實體類的操作映射到資料庫中。

下麵以向資料庫中添加一條圖書信息為例,說明MyBatis的入門操作

MyEclipse中新建個web項目,並且添加maven支持(這個跟MyBatis沒關係,只是方便添加依賴jar包)

在pom.xml中添加如下依賴:

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>   <!-- mysql資料庫驅動 -->
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>   <!-- MyBatis框架 -->
            <artifactId>mybatis</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>            <!-- 這是日誌框架 -->
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

建資料庫books,建表book:

DROP DATABASE IF EXISTS `books`;
CREATE DATABASE `books` ;
USE `books`;
DROP TABLE IF EXISTS `book`;
CREATE TABLE `book` (
    `id` INT PRIMARY KEY AUTO_INCREMENT,
    `name` VARCHAR(128),
    `press` VARCHAR(12),
    `author` VARCHAR(24),
    `isbn` VARCHAR(13),
    `douban` FLOAT
);

INSERT INTO `book` (`name`,`press`,`author`,`isbn`,`douban`) VALUES('Effective Java 中文版','機械工業出版社','(美)布洛克(Bloch J.)著;楊春花,俞黎敏譯','9787111255833','9.1');
INSERT INTO `book` (`name`,`press`,`author`,`isbn`,`douban`) VALUES('Java併發編程實踐','電子工業出版社','((美)Brian Goetz等著;韓鍇,方妙譯','9787121043161','8.8');
INSERT INTO `book` (`name`,`press`,`author`,`isbn`,`douban`) VALUES('Java網路編程 第4版','中國電力出版社','(美)哈諾德著','9787512361881','7.4');

寫book實體類:

package net.sonng.mbt.entity;

public class Book {
    private int id;
    private String name;
    private String press;
    private String author;
    private String isbn;
    private float douban;
    //。。。。。
}

在src/main/resources下建個包net.sonng.mbt.mapper,新建文件BookMapper.xml,並配置如下:
這個配置文件就是sql語句的集合,測試類的session.insert()方法就是調用這裡面的sql插入數據的

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTDMapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="net.sonng.mbt.mapper.BookMapper">
    <!-- namespace是命名空間,應當作為字元串看待,相當於這個xml文檔的名稱,命名一般是包名+sql映射文件名 -->
    <insert id="save" parameterType="net.sonng.mbt.entity.Book" useGeneratedKeys="true" >
        INSERT INTO book(`name`,`press`,`author`,`isbn`,`douban`) VALUES(#{name},#{press},#{author},#{isbn},#{douban})
    </insert>
    <!-- insert元素表明這是個插入語句,另外還有select、update、delete等等 -->
    <!-- id屬性加上命名空間,就是這條sql的唯一標識符,測試類session.insert()語句通過這個唯一標識符調用這條sql -->
    <!-- parameterType屬性,是sql語句的參數類型 -->
    <!-- useGeneratedKeys屬性表示使用資料庫的自動增長策略,當然資料庫一般都是支持的,這裡沒這個屬性也沒問題 -->
    <!-- #{User類的屬性名}:這個表示傳進來一個User對象,獲取其對應的屬性值作為sql語句參數值 -->
</mapper>

在src/resources/main下麵新建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>
    <settings>
        <setting name="logImpl" value="LOG4J" />
    </settings>
    <environments default="mysql"> 
        <!-- 下麵可以配置多個environment,即多個多個資料庫,但只能選擇一個資料庫,就是這裡的default屬性指定的environment的id -->
        <environment id="mysql">
            <transactionManager type="JDBC" /> <!-- MyBatis自帶的事務管理 -->
            <dataSource type="POOLED" > <!-- 使用MyBatis自帶的連接池管理 -->
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/books?useSSL=false&amp;useUnicode=true&amp;charsetEncoding=utf8" />
                <property name="username" value="kumi" />
                <property name="password" value="1234" />
            </dataSource>
        </environment>
    </environments>
    <mappers>  <!-- 下麵指定sql映射文件,可以指定多個 -->
        <mapper resource="net/sonng/mbt/mapper/BookMapper.xml" /> <!-- 指定BookMapper.xml -->
    </mappers>
</configuration>

在src/resources/main下麵新建log4j.properties,配置如下:

log4j.rootLogger=ERROR, stdout
log4j.logger.net.sonng.mbt.mapper.BookMapper=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

最後寫測試類:在src/test/java下的net.sonng.mbt.test包下麵寫測試類BookTest.java

package net.sonng.mbt.test;

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

import net.sonng.mbt.entity.Book;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class BookTest {
    public static void main(String[] args) throws IOException{
        InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session=sqlSessionFactory.openSession();
        //用mybatis-config.xml和SqlSessionFactoryBuilder獲取SqlSessionFactory,再獲得session
        Book book=new Book();
        book.setName("深入理解Java 7 核心技術與最佳實踐");
        book.setPress("機械工業出版社");
        book.setAuthor("成富著");
        book.setDouban(6.9f);
        book.setIsbn("9787111380399");
        session.insert("net.sonng.mbt.mapper.BookMapper.save",book);  //調用BookMapper.xml中的sql語句插入book對象
        session.commit();                                             //提交事務
        session.close();                                              //關閉session
    }
}

測試類按Java application運行後,檢查資料庫,該條信息已經插入,控制台輸出如下:

DEBUG [main] - ==> Preparing: INSERT INTO book(name,press,author,isbn,douban) VALUES(?,?,?,?,?)
DEBUG [main] - ==> Parameters: 深入理解Java 7 核心技術與最佳實踐(String), 機械工業出版社(String), 成富著(String), 9787111380399(String), 6.9(Float)
DEBUG [main] - <== Updates: 1

小結

jar包:mybatis、mysql的驅動包
配置sql映射文件,就是包含多條sql語句
配置mybatis的配置文件:mybatis-config.xml,配置資料庫的連接信息
SqlSession:通過該類的對象,跟資料庫交流
SqlSessionFactory:這是資料庫編譯後的記憶體鏡像,通常一個應用對應一個SqlSessionFactory對象
SqlSessionFactoryBuilder:該對象載入mybatis-config.xml產生SqlSessionFactory對象
別人寫的:Mybatis從入門到精通


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

-Advertisement-
Play Games
更多相關文章
  • open a new terminal (ctrl + alt + t) ...
  • #實時同步inotify 1、inotify簡介inotify是一種強大的,細膩度的,非同步的文件系統事件監控機制,linux內核從2.6.13起,加入了inotify支持,通過INOTIFY可以監控文件系統中添加、刪除、修改、移動等各種事件,利用這個內核介面,第三方軟體就可以監控文件系統下文件的各種 ...
  • 1、systemctl 列出正在運行的任務 2、systemctl start *.service 開啟相關服務 3、systemctl stop *.service 關閉相關服務 4、systemctl restart *.service 重啟一個服務 5、systemctl status *.s ...
  • MD5加密 1創建Md5 2.開始加密,需要將字元轉換為位元組數組 3.返回一個加密好的位元組數組 4.將位元組數組中每個元素按照指定的編碼格式解析成字元串 ...
  • 高端大氣上檔次。這次當時一個身為懵懂初中生的我對程式員這一職位的描述。那時雖不是隨處都能看到黑客大軍的波及,但至少是知道所謂的黑客爸爸的厲害,一言不合說被黑就被黑。對於懵懂的我那是一種嚮往。自己也曾想著會不會有一日自己也變得人人畏懼。於是開始踏上這條不歸路。大學選擇了軟體技術專業。寫代碼的第一天覺得 ...
  • 引用 類 api 在winform中的get 方法 我在這裡返回的是List<T> 泛型集合,在後臺獲取時聲明泛型收集即可. api 在winfrom 中的put 方法 api 在winfrom 中的Post 方法 api 在winfrom 中的Delete 方法 如果delete方法 需要傳入mo ...
  • 首先,先簡單介紹一下MD5 MD5的全稱是message-digest algorithm 5(信息-摘要演算法,在90年代初由mit laboratory for computer science和rsa data security inc的ronald l. rivest開發出來, 經md2、md ...
  • NET Core 第二部分: centos7 helloworld 站點 在開發機器上(我是在台式機),用Visual Studio 2017 發佈NET Core mvc ,上傳到Centos伺服器,客戶端開發機器可以訪問Helloworl站點 開發環境:windows7+Visual Studi ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...