MyBatis由淺入深學習總結之一:MyBatis入門案例

一、MyBatis簡介

MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,並且改名爲MyBatis 。這就是爲什麼很多人既把它稱爲iBatis又稱爲MyBatis的原因;2013年11月遷移到Github。

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

二、MyBatis入門案例

1、首先新建一個Maven Java項目,Maven依賴如下:

	<!-- 配置Mybatis的Jar文件 -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.3.1</version>
	</dependency>
	<!-- 配置MySql數據庫 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.38</version>
	</dependency>
	<!-- 配置log4j日誌 -->
	<dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.9</version>
	</dependency>
Maven自動加載依賴Jar包完畢後,項目結構如下圖所示:



2、創建數據庫文件

-- ----------------------------
-- Table structure for sl_company
-- ----------------------------
DROP TABLE IF EXISTS `sl_company`;
CREATE TABLE `sl_company` (
  `company_id` int(11) NOT NULL AUTO_INCREMENT,
  `company_name` varchar(50) DEFAULT NULL,
  `full_name` varchar(100) DEFAULT NULL,
  `web` varchar(45) DEFAULT NULL,
  `address` varchar(100) DEFAULT NULL,
  `postcode` varchar(45) DEFAULT NULL,
  `phone` varchar(45) DEFAULT NULL,
  `email` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`company_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of sl_company
-- ----------------------------
INSERT INTO `sl_company` VALUES ('1', '銳客科技1', '上海銳客科技股份有限公司', 'www.codeman.cn', '上海市浦東新區峨山路91弄97號陸家嘴軟件園5號樓3層', '200127', '4008202993', '[email protected]');
3、由於每一個數據持久層框架都需要一個與數據庫連接的配置文件,同樣在src/main/resource下新建一個mybatis.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" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
    
</configuration>
4、定義表所對應的實體類,包結構如下,需要注意的是實體類屬性的名稱與表中字段名稱一致:


package com.mybatis.entity;

import java.io.Serializable;

public class SlCompany implements Serializable {

	private static final long serialVersionUID = 1L;

	/**
	 * company_id:
	 */
	private int company_id;

	/**
	 * company_name:
	 */
	private String company_name;

	/**
	 * full_name:
	 */
	private String full_name;

	/**
	 * web:
	 */
	private String web;

	/**
	 * address:
	 */
	private String address;

	/**
	 * postcode:
	 */
	private String postcode;

	/**
	 * phone:
	 */
	private String phone;

	/**
	 * email:
	 */
	private String email;


	public SlCompany() {
		super();
	}

	public SlCompany(int company_id, String company_name, String full_name, String web, String address, String postcode,
			String phone, String email) {
		super();
		this.company_id = company_id;
		this.company_name = company_name;
		this.full_name = full_name;
		this.web = web;
		this.address = address;
		this.postcode = postcode;
		this.phone = phone;
		this.email = email;
	}

	public int getCompany_id() {
		return company_id;
	}

	public void setCompany_id(int company_id) {
		this.company_id = company_id;
	}
	
	public String getCompany_name() {
		return company_name;
	}

	public void setCompany_name(String company_name) {
		this.company_name = company_name;
	}

	public String getFull_name() {
		return full_name;
	}

	public void setFull_name(String full_name) {
		this.full_name = full_name;
	}

	public void setWeb(String web) {
		this.web = web;
	}

	public String getWeb() {
		return web;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public String getAddress() {
		return address;
	}

	public void setPostcode(String postcode) {
		this.postcode = postcode;
	}

	public String getPostcode() {
		return postcode;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getPhone() {
		return phone;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getEmail() {
		return email;
	}

}
5、新建一個包,該包專門放置配置文件,並且新建一個slCompanyMapper.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屬性,這個屬性的作用是爲了將該映射聲明爲唯一的,以便後續可以通過該命名空間直接調用 -->
<!-- 該命名空間的格式是包名+該映射文件的名字 -->
<mapper namespace="com.mybatis.mappings.slCompanyMapper">
	<!-- 根據id查詢得到一個user對象 -->
	<!-- parameterType屬性標識查詢傳入參數的類型 -->
	<!-- resultType屬性標識該查詢執行完畢後的返回值類型 -->
	<select id="getSlCompany" parameterType="int" resultType="com.mybatis.entity.SlCompany">
		select * from sl_company where company_id=#{id}
	</select>
</mapper>
6、修改mybatis.xml文件內容,添加將上述slCompanyMapper.xml配置到mybatis.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" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
    	<mapper resource="com/mybatis/mappings/slCompanyMapper.xml"/>
    </mappers>
    
</configuration>
7、編寫測試類,代碼如下:

package com.mybatis.test;

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

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.mybatis.entity.SlCompany;

public class MyBatisTest {
	
	public static void main(String[] args) throws IOException {
		
		// mybatis提供了Resources類用來提供簡易方式來獲取各種來源的資源文件信息
		// 獲取mybatis.xml的字節流
		InputStream is = Resources.getResourceAsStream("mybatis.xml");
		// 獲取mybatis.xml的字符流
		//Reader reader = Resources.getResourceAsReader("mybatis.xml");
		
		// 構建SqlSessionFactory對象,傳入字符流或字節流均可
		SqlSessionFactory SqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
		// 獲取SqlSession對象
		SqlSession sqlSession = SqlSessionFactory.openSession();
		
		// 執行查詢操作
		// selectOne()方法的第一個參數是由slCompanyMapper.xml裏配置的mapper的namespace屬性 + 該mapper下select元素的id屬性值組成的
		SlCompany slCompany = sqlSession.selectOne("com.mybatis.mappings.slCompanyMapper.getSlCompany", 1);
		
		System.out.println(slCompany.getCompany_name());
	}
}
執行後發現,數據庫中的符合條件的公司名稱確實被打印出來了;

通過以上示例,我們可以得知MyBatis需要以下幾個配置信息:

a)一個配置數據庫連接信息,以及整合各種mapper信息的文件,比如該例的mybatis.xml

b)一個專門配置對各種SQL進行唯一的映射文件,如本例中的slCompanyMapper.xml

c)mybatis框架的三個常用API:Resources、SqlSessionFactorySqlSessionFactoryBuilder、SqlSession的使用

即通過Resources資源類獲取各種資源來源的配置信息

通過SqlSessionFactoryBuilder獲取對應的SqlSessionFactory對象

通過SqlSessionFactory獲取SQL執行者SqlSession對象

通過SqlSession,通過傳入唯一映射SQL的id執行對應的SQL,獲取指定類型的結果


以上,是一個入門級的MyBatis例子,可以大體看出MyBatis的輪廓,後續會逐漸解開MyBatis更多的面紗;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章