刚换新工作,新公司平台架构使用的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 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,有不对的地方还望各位指正。