剛換新工作,新公司平臺架構使用的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,數據庫的配置信息就在該資源文件中定義,資源文件內容如下:
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,有不對的地方還望各位指正。