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 mhy2011@163.com
 * @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 mhy2011@163.com
 * @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,有不对的地方还望各位指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值