配置MyBatis 3

MyBatis是一個非常流行且也是最有效的SQL映射框架。 MyBatis可用于Java和.net語言。 MyBatis并不是Hibernate的真正替代品,但是我們可以使用該框架來減少MyBatis提供的高效和高性能的數據庫相關代碼。

本教程將向您展示使用數據庫配置MyBatis 3的步驟。 MyBatis 3支持基于xml和基于注釋的配置,但是在使用xml配置時可以看到MyBatis的真正功能。 本教程僅向您顯示使用xml的配置。


使用的工具:

  1. MyBatis 3.0.4
  2. MySql Java連接器5.1

使用MyBatis不需要很多jar,只需帶驅動程序的MyBatis jar:

  1. commons-logging-1.1.1.jar
  2. mybatis-3.0.4.jar
  3. mysql-connector-java-5.1.13-bin.jar

在本教程中,我們將配置MyBatis將pojo類對象存儲到數據庫表中。 以下是在此示例中將使用的數據庫表:

CREATE TABLE Product(id int primary key, brand varchar(20),model varchar(20), name varchar(30));

因此,首先,在要用于存儲的數據庫中創建此表。
以下是將映射到表產品的Product類:

package com.raistudies.domain;import java.io.Serializable;public class Product implements Serializable{private static final long serialVersionUID = -1900054678340682193L;private long id;private String brand;private String model;private String name;// Getter and setter are removed to make the short}

我們將看到將上述內容映射到數據庫表產品所要執行的配置。
在MyBatis 3中,我們有兩種類型的配置文件:

環境規范配置文件:將只有一個文件定義MyBatis映射框架要使用的環境設置。 該文件定義了與數據庫連接,驅動程序,事務管理,連接池,其他映射文件相關的設置,以及許多我們將在后續教程中看到的設置。

映射文件: MyBatis框架的一個應用程序中可以有多個映射文件。 映射文件包含有關在Java接口中定義的相關服務集的信息。 它定義了用于特定服務的參數化SQL語句,輸入了SQL參數,并且還定義了由SQL語句返回的結果數據的返回映射。
這就是說,我們的示例中將有兩個xml文件:一個用于環境設置,另一個將是與Product類相關的服務的映射文件。
以下是環境規范配置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="lazyLoadingEnabled" value="false" /></settings><typeAliases><typeAlias type="com.raistudies.domain.Product" alias="product"/></typeAliases><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/test"/><property name="username" value="root"/><property name="password" value="pass"/></dataSource></environment></environments><mappers><mapper resource="com/raistudies/services/ProductServices.xml"/></mappers></configuration>

如您所見,<configuration />保留了配置,并且有許多標簽定義了MyBatis映射框架的設置。 我們將一一看到以上所有設置:

<settings /> :此標簽用于指定一些用于整個MyBatis應用程序的通用設置。 上面的文件文件包含將屬性“ lazyLoadingEnabled”設置為禁用的示例。 在接下來的教程中,我們將看到更多設置選項。

<typeAliases>:標記將允許為我們的域類使用定義別名,以便以后在任何MyBatis配置文件中使用。

<environments />:標簽用于定義與數據庫相關的設置。 我們可以有多個環境設置,但是MyBatis將一次使用默認屬性指定的一個環境。

<mappers>:此標記用于定義映射文件xml文件的位置。 我們可以定義多個映射文件。

在界面中定義服務:

之后,您必須創建一個接口,該接口將定義我們要提供的服務。 在is接口之后,該接口僅為域類Product定義了一種“保存”方法:

package com.raistudies.services;import com.raistudies.domain.Product;public interface ProductServices {public void save(Product product);
}

現在,我們必須為此服務定義映射文件。 以下是接口的映射文件:

<?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.raistudies.services.ProductServices"><insert id="save" parameterType="product">INSERT INTO Product (id,brand,model,name)VALUE ( #{id}, #{brand}, #{model}, #{name} )</insert></mapper>

映射文件將包含元素<mapper />來定義服務的SQL語句。 在這里,屬性“ 名稱空間 ”定義了已為其定義此映射文件的接口。

<insert />標記定義該操作為插入類型。 “ id ”屬性的值指定為其定義操作的函數名稱。 這是保存。 屬性“ parameterType ”定義方法的參數是哪種類型。 我們在這里為產品類使用了別名。 然后,我們必須定義SQL語句。 #{id}定義將Product類的屬性“ id ”作為參數傳遞給SQL查詢。

創建MyBatis會話并使用產品服務:

以下是我們的測試類,該類創建MyBasit的Session,然后使用ProductService接口的save方法保存Product類的實例:

package com.raistudies.runner;import java.io.IOException;
import java.io.Reader;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 com.raistudies.domain.Product;
import com.raistudies.services.ProductServices;public class AppTester {private static SqlSessionFactory sessionFac = null;private static Reader reader;private static String CONFIGURATION_FILE = "sqlmap-config.xml";static{try {reader = Resources.getResourceAsReader(CONFIGURATION_FILE);sessionFac = new SqlSessionFactoryBuilder().build(reader);} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {SqlSession session = sessionFac.openSession();try {ProductServices productServiceObj = session.getMapper(ProductServices.class);Product product = new Product();product.setId((long)(Math.random()*100));product.setBrand("LG");product.setModel("P500");product.setName("Optimus One");productServiceObj.save(product);session.commit();} finally {session.close();}}}

session.getMapper()方法提供由MaBatis框架在運行時定義的接口的默認實現。

運行此示例時,記錄將保存到數據庫表中。

MyBatis配置插入語句結果

您也可以通過從以下鏈接下載示例代碼來嘗試該示例:
來源+庫: 下載

參考:來自Rai Studies博客的JCG合作伙伴 Rahul Mondal 配置MyBatis 3 。


翻譯自: https://www.javacodegeeks.com/2012/01/configuring-mybatis-3.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373268.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373268.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373268.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php獲取src,PHP讀取文件

本文概述PHP提供了各種功能來從文件讀取數據。有多種功能允許你讀取所有文件數據, 逐行讀取數據以及逐字符讀取數據。下面提供了可用的PHP文件讀取功能。fread()fgets()fgetc()PHP讀取文件-fread()PHP fread()函數用于讀取文件的數據。它需要兩個參數&#xff1a;文件資源和文件…

HDOJ(HDU) 1406 完數

Problem Description 完數的定義&#xff1a;如果一個大于1的正整數的所有因子之和等于它的本身&#xff0c;則稱這個數是完數&#xff0c;比如6&#xff0c;28都是完數&#xff1a;6123&#xff1b;28124714。 本題的任務是判斷兩個正整數之間完數的個數。 Input 輸入數據包…

Allegro padstack

在ALLEGRO中&#xff0c;建立PCB封裝是一件挺復雜的事&#xff0c;而要建立FOOTPRINT&#xff0c;首先要有一個PAD&#xff0c;所以就要新建PADSTACK。 焊盤可以分兩種&#xff0c;表貼焊盤和通孔焊盤&#xff0c;表貼焊盤結構相對簡單&#xff0c;下面首先分析表貼焊盤的成分&…

java中datetime類型轉換,Java中日期格式和其他類型轉換詳解

涉及的核心類&#xff1a;Date類、SimpleDateFormat類、Calendar類一、Date型與long型Date型轉換為long型Date date new Date();//取得當前時間Date類型long date2long date.getTime();//Date轉longlong型轉換為Date型long cur System.currentTimeMills();//取得當前時間lon…

GWT MVP變得簡單

GWT Model-View-Presenter是用于大規模應用程序開發的設計模式。 它源于MVC&#xff0c;它在視圖和邏輯之間進行劃分&#xff0c;并有助于創建結構良好&#xff0c;易于測試的代碼。 為了幫助像我這樣的懶惰開發人員&#xff0c;我研究了如何減少使用聲明式UI時要編寫的類和接口…

php如何編寫通信協議,定制通訊協議

## 如何定制協議實際上制定自己的協議是比較簡單的事情。簡單的協議一般包含兩部分:* 區分數據邊界的標識* 數據格式定義## 一個例子### 協議定義這里假設區分數據邊界的標識為換行符"\n"(注意請求數據本身內部不能包含換行符)&#xff0c;數據格式為Json&#xff0c…

今年計劃要看的書全部備齊

上個月購買的書《今年計劃看的書其中幾本》 http://www.cnblogs.com/insus/p/5325513.html 昨天購買的書回來了&#xff0c;今年計劃要看的書全部備齊。《MongoDB》&#xff0c;《深入理解Bootstarp》和《ASP.NETSignalR編程實踐》…… 轉載于:https://www.cnblogs.com/in…

Codevs 2756 樹上的路徑

2756 樹上的路徑 時間限制: 3 s    空間限制: 128000 KB    題目等級 : 大師 Master題目描述 Description給出一棵樹&#xff0c;求出最小的k&#xff0c;使得&#xff0c;且在樹中存在路徑P&#xff0c;使得k> S 且 k <E. &#xff08;k為路徑P上的邊的權值和&a…

圖形教程

眾所周知&#xff0c;我們可以借助Java庫制作游戲&#xff0c;這些庫為我們提供制作游戲所需的圖形。 因此&#xff0c;今天我將開始一個關于Java圖形的非常新的部分。 我之前曾發表過有關如何制作所得稅計算器的文章 。 首先要滿足一些先決條件&#xff1a; -您應該對Java語法…

文件上傳預覽

<fieldset><legend>使用readAsDataUrl()方法預覽圖片</legend><input type"file" name"fileUpload" id"fileUpload" onchange"filePrevImg(this.files);" multiple"true" /><ul id"prevUpl…

c++強制類型轉換:dynamic_cast、const_cast 、static_cast、reinterpret_cast

一、介紹 dynamic_cast: 通常在基類和派生類之間轉換時使用const_cast: 主要針對const和volatile的轉換static_cast: 一般的轉換(no run-time check)通常&#xff0c;如果你不知道該用哪個&#xff0c;就用這個。 reinterpret_cast: 用于進行沒有任何關聯之間的轉換&…

K8S Pod Terminating/Unknown故障排查

一、pod異常出現現象 優雅終止周期(Graceful termination period): 當pod被刪除時&#xff0c;會進入"Terminating"狀態&#xff0c;等待容器優雅關閉。如果容器關閉所需時間超過默認期限(默認30秒)&#xff0c;則pod將保持在"Terminating"狀態。 Finalize…

矩陣指數 matlab,矩陣指數 - MATLAB Simulink Example - MathWorks 中國

方法 1&#xff1a;加權平方expmdemo1 是以下著作中算法 11.3.1 的實現&#xff1a;Golub, Gene H. and Charles Van Loan.Matrix Computations, 3rd edition.Baltimore, MD:Johns Hopkins University Press, 1996.% Scale A by power of 2 so that its norm is < 1/2 .[f,e…

向導設計模式

我們都喜歡巫師……。 &#xff08;我的意思是軟件向導&#xff09;。 我們總是很高興跳上那些“下一步”按鈕&#xff0c;就像我們在我們的時髦的小雞上跳舞一樣。 因此&#xff0c;今天我們將您心愛的向導帶入您的編碼經驗中。 讓我們跳入一個例子。 假設您要設計一個Conserv…

IO(三)字節流練習

public class ByteStreamDemo {/*int available(); 可以取得輸入文件的大小&#xff08;字節個數&#xff09;,沒有返回0void close(); 關閉輸入流abstract int read(); 讀取一個字節&#xff0c;并把讀…

基于matlab的人臉五官邊緣檢測方法,人臉邊緣檢測方法研究與仿真

人臉表情是人類情感的主載體之一,它含有豐富的人體行為信息。通過臉部表情能夠表達人微妙的情緒反應以及對應的心理狀態[1],人臉表情識別技術隨著人們對表情信息的日益重視而受到關注,現已成為人們研究的熱點。基于幾何特征提取是一個快速、直接、有效的人臉表情識別方法,運用基…

GWT –利弊

我喜歡JavaScript。 隨著jQuery和Mootools的出現&#xff0c;我對JavaScript的熱愛僅增加了很多倍。 只要有選擇&#xff0c;我就可以將上述框架中的任何一個用于我開發的任何Web應用程序。 但是進入服務行業后&#xff0c;我不得不一次次屈服于客戶的壓力&#xff0c;并在他們…

秦九韶算法matlab實驗報告,數值分析上機實驗報告.doc

實驗報告一題目&#xff1a; (緒論) 非線性方程求解及誤差估計摘要&#xff1a;非線性方程的解析解通常很難給出&#xff0c;因此線性方程的數值解法就尤為重要。本實驗采用兩種常見的求解方法二分法、Newton法和改進的Newton法。可以節省計算機的計算時間&#xff0c;還能減小…

Flex 布局教程:語法篇

網頁布局&#xff08;layout&#xff09;是CSS的一個重點應用。 布局的傳統解決方案&#xff0c;基于盒狀模型&#xff0c;依賴 display屬性 position屬性 float屬性。它對于那些特殊布局非常不方便&#xff0c;比如&#xff0c;垂直居中就不容易實現。 2009年&#xff0c;W3…

練習錯誤

form:阻止表單提交的方法一&#xff1a;在form標簽中給出以下代碼&#xff1a; 1 onsubmit "return False" 方法二&#xff1a;設置事件阻止 1 e.preventDefault() js中判斷&#xff1a;只要非數字都應該表示為字符串 1 if(Email.indexOf("") -1){ 2 …