MyBatis入門

剛換新工作,新公司平臺架構使用的ORM框架是MyBatis,以前沒怎麼用過,正好一邊學習一邊使用,利用下班的時間把學習到的東西整理一下,希望對需要學習的朋友們有幫助。廢話不多說,直接上工作過程。

下面分爲以下四個部分來操作一下:

一、創建普通Maven項目

二、引入依賴資源

三、創建SessionFactory

四、基本CRUD操作


一、創建普通Maven項目

由於工作過程中使用習慣了Maven進行項目構建,就直接使用Maven來做了,不會使用Maven的朋友可以直接建立普通Java項目來操作是一樣的。創建Maven項目過程略過。


二、引入依賴資源

這裏我們使用MyBatis+MySQL爲例來進行操作,MyBatis很簡單,只需要引入一個包即可,這裏我們引入的MyBatis和MySQL兩個包

<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.2.2</version>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.26</version>
</dependency>

如果朋友們使用的不是Maven的話可以直接把這兩個jar文件放置到項目裏也是一樣的。


三、創建SessionFactory

每 一 個 MyBatis 的 應 用 程 序 都 以 一 個 SqlSessionFactory 對 象 的 實 例 爲 核 心 。SqlSessionFactory 對 象 的 實 例 可 以 通 過 SqlSessionFactoryBuilder 對 象 來 獲 得 。SqlSessionFactoryBuilder 對象可以從 XML 配置文件,或從 Configuration 類的習慣準備的實例中構建 SqlSessionFactory 對象。(這段話來是MyBatis官方文檔)


創建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="init.properties"></properties>
	
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<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>
</configuration>

在上面的配置文件中我們引入了資源文件init.properties,數據庫的配置信息就在該資源文件中定義,資源文件內容如下:


init.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=root

爲了方便管理MyBatis的SessionFactory,這裏創建了一個單例,用來管理SessionFactory。

MyBatisUtil.java

/**
 * MyBatis SessionFactory工具類
 */
package com.mhy.platform.util;

import java.io.IOException;

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

/**
 * @author [email protected]
 * @since 2013年8月29日
 */
public final class MyBatisUtil {

	private static SqlSessionFactory sessionFactory = buildSessionFactory();

	private MyBatisUtil() {
	}

	/**
	 * 創建SessionFactory
	 * @return sessionFactory
	 */
	private static SqlSessionFactory buildSessionFactory(){
		if (null == sessionFactory) {
			String resource = "mybatis-config.xml";
			try {
				sessionFactory = new SqlSessionFactoryBuilder().build(Resources
						.getResourceAsReader(resource));
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return sessionFactory;
	}
	
	/**
	 * 獲取SessionFactory
	 * @return	sessionFactory
	 */
	public static SqlSessionFactory getSessionFactory() {
		return sessionFactory;
	}
}

創建完這些之後我們可以寫一個單元測試來測試一下sessionFactory是否正常,此處不再多做說明。


四、基本CRUD操作

創建好SessionFactory之後接下來就是要使用MyBatis來完成對MySQL數據庫的CRUD操作了,這裏以官方提供的Blog爲例來說明一下。

1、創建數據表BLOG

CREATE TABLE BLOG(
	id INT NOT NULL auto_increment PRIMARY KEY,
	title VARCHAR(100) NOT NULL,
	content text NULL
);

2、創建Blog實體

Blog.java

/**
 * Blog領域模型
 */
package com.mhy.platform.domain;

/**
 * @author [email protected]
 * @since 2013年8月29日
 */
public class Blog {

	private int id;			//整型id值
	private String title;		//標題
	private String content;		//內容
	public Blog() {
		super();
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	
}

2、創建dao層用於管理基本的CRUD操作

BlogMapper.java

/**
 * 
 */
package com.mhy.platform.dao;

import com.mhy.platform.domain.Blog;

/**
 * @author Administrator
 * @since 2013年8月29日
 */
public interface BlogMapper {

	/**
	 * 創建blog
	 * @param blog	要創建的blog實例
	 */
	public void createBlog(Blog blog);
	
	/**
	 * 根據id獲取指定的blog
	 * @param id	blog的id值
	 * @return	返回blog
	 */
	public Blog getBlog(int id);
	
	/**
	 * 更新blog
	 * @param blog	要更新的blog
	 */
	public void updateBlog(Blog blog);
	
	/**
	 * 根據id刪除指定的blog
	 * @param id
	 */
	public void deleteBlog(int id);
}
BlogMapper下創建了四個操作,分別對應增加、查詢、更新和刪除操作

下來我們來一一講解CRUD操作,爲了方便操作,我們先爲Blog對象在MyBatis的配置文件mybatis-config.xml中聲明一個別名

<properties resource="init.properties"></properties>
<typeAliases>
	<typeAlias type="com.mhy.platform.domain.Blog" alias="Blog"/>
</typeAliases>
<environments default="development">

聲明完別名之後我們就可以在映射文件中直接使用Blog而不用再寫一大串字符串了。配置文件修改完之後我們還需要增加BlogMapper的映射文件BlogMapper.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.mhy.platform.dao.BlogMapper">


</mapper>
增加完BlogMapper.xml之後我們還需要在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>
	<!-- 引入數據庫配置文件 -->
	<properties resource="init.properties"></properties>
	<typeAliases>
		<typeAlias type="com.mhy.platform.domain.Blog" alias="Blog" />
	</typeAliases>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<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/mhy/platform/dao/BlogMapper.xml" />
	</mappers>

</configuration>

注意:其中的<properties>、<typeAliases>、<mappers>等元素的位置是有規定的,官方提供了每種元素的先後順序,如果不按順序添加的話在運行時會報錯。下面是官方給出的各元素的順序



增加操作

BlogMapper.xml映射文件中是通過insert來提供增加操作的

<insert id="createBlog" parameterType="Blog">
	insert into Blog (title, content) values (#{title}, #{content})
</insert>
接下來我們寫一個增加操作的測試
@Test
public void testAddBlog(){
	SqlSession session = MyBatisUtil.getSessionFactory().openSession();
	try {
		BlogMapper mapper = session.getMapper(BlogMapper.class);
		Blog blog = new Blog();
		blog.setTitle("第一篇博客");
		blog.setContent("第一篇博客內容");
			
		mapper.createBlog(blog);	//插入操作
			
		session.commit();	//提交
		System.out.println("添加成功!");
	} catch (Exception e) {
		e.printStackTrace();
		session.rollback();
	} finally {
		session.close();	//關閉session
	}
}
寫完之後運行一下單元測試,結果如下:

查詢完數據庫之後發現操作已經生效了。


查詢操作

<select id="getBlog" parameterType="int" resultType="Blog">
	select * from Blog where id=#{id}
</select>
	@Test
	public void testGetBlog(){
		SqlSession session = MyBatisUtil.getSessionFactory().openSession();
		try {
			BlogMapper mapper = session.getMapper(BlogMapper.class);
			Blog blog = mapper.getBlog(1);	//獲取id值爲1的Blog
			System.out.println("id:" + blog.getId() + ",title:" + blog.getTitle() + ",content:" + blog.getContent());
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			session.close();	//關閉session
		}
	}


修改操作

<update id="updateBlog" parameterType="Blog">
	update Blog set title=#{title}, content=#{content} 
	where id=#{id}
</update>

@Test
public void testUpdateBlog(){
	SqlSession session = MyBatisUtil.getSessionFactory().openSession();
	try {
		BlogMapper mapper = session.getMapper(BlogMapper.class);
		Blog blog = mapper.getBlog(1);	//獲取id值爲1的Blog
		blog.setTitle("新標題");
		mapper.updateBlog(blog);
		session.commit();
		System.out.println("修改成功");
	} catch (Exception e) {
		e.printStackTrace();
		session.rollback();
	} finally {
		session.close();	//關閉session
	}
}




刪除操作

<delete id="deleteBlog" parameterType="int">
	delete from Blog where id=#{id}
</delete>
@Test
public void testDeleteBlog(){
	SqlSession session = MyBatisUtil.getSessionFactory().openSession();
	try {
		BlogMapper mapper = session.getMapper(BlogMapper.class);
		mapper.deleteBlog(1);	//刪除id值爲1的Blog
		session.commit();
		System.out.println("刪除成功");
	} catch (Exception e) {
		e.printStackTrace();
		session.rollback();
	} finally {
		session.close();	//關閉session
	}
}

到此爲止,基本的CRUD操作就已完成。

關於集合操作、數據庫字段與類屬性不相同的操作本文章內沒做說明,後續會把該內容給補上。

本文的代碼放置到了csdn下載區,有興趣的朋友可以直接下載下來,地址如下:點擊打開鏈接

有需要的朋友可以直接去下載。

剛接觸MyBatis,有不對的地方還望各位指正。

發佈了38 篇原創文章 · 獲贊 34 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章