一、Mybatis的官网及手册
Mybatis的官网地址如下:http://mybatis.github.io/。可直接通过度娘搜索到,很简单。
官网里有mybatis发布的各种版本以及所明书种种,应该说这里是mybatis的最初的家。
目前,mybatis最新版本是2014年10月11日发布的3.2.8版。为了方便大家,直接将3.2.8版本的jar包下载,以及说明文档地址贴上:See the docs, Download Latest
二、功能
Mybatis是支持普通SQL查询,存储过程和高级映射的优秀持久层(ORM)框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索。MyBatis可以使用简单的 XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects)映射成数据库中的记录。
它的前身就是iBatis,iBatis本是apache的一个开源项目,2010年这个项目由apahce sofeware foundation 迁移到了google code,并且改名为MyBatis。
三、mybatis与hibenate的区别
在学习或使用mybatis的过程了,很多人估计都有想到mybatis与同为ORM框架的hibernate区别如何,都有什么优缺点,以下就来个小小的总结:
Mybatis |
Hibernate |
|
难易程度 |
简单易学 |
较难 |
封装性 |
半封装 |
封装较完整 |
移植性 |
较差(由于需己写依赖于数据库的sql) |
好 |
Sql书写 |
需要手动编写 |
不需要 |
优化 |
较容易 |
较难(由于sql是封装,不便优化) |
灵活性 |
好 |
较差 |
流行程度 |
非常流行 |
(最)非常流行 |
应用场景 |
适合什么样的应用场景,需要在具体项目中去分析得到,希望感兴趣根据经验,提提例子 |
更多参考:
http://blog.csdn.net/julinfeng/article/details/19821923
http://blog.csdn.net/wangpeng047/article/details/17038659
http://blog.csdn.net/kobejayandy/article/details/9429007
http://blog.csdn.net/weeweee/article/details/10406815
四、一个简单的例子
每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder从一个xml配置文件或者一个预定义的配置类的实例获得配置信息。
下面摘了一个简单得例子:
1、准备
1.1数据库中建立相应的表
CREATE DATABASE mybatis;
USE mybatis;
CREATE TABLE tb_user(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(16),
age INT
);
INSERT INTO tb_user(name, age) VALUES(‘张三‘, 12);
INSERT INTO tb_user(name, age) VALUES(‘李四‘, 20);
INSERT INTO tb_user(name, age) VALUES(‘王二麻子‘, 30);
1.2 下载jar包,建议下载最新版 mybatis-3.2.8 地址:https://github.com/mybatis/mybatis-3/releases
2.在eclipse中测试使用
2.1导入jar包(会使用maven的人建议使用maven)
2.2建一个mybatis-config.xml配置文件(文件放假src下)
<?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">
<!-- XML 配置文件包含对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源和决定事务范围和控制的事务管理器. -->
<configuration>
<!-- 给对象取别名 -->
<typeAliases>
<typeAlias alias="User" type="org.phf.pojo.User"/>
</typeAliases>
<!-- 配置JDBC连接参数 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--value值需要根据自己的情况配置-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 指明每个关系表的配置文件 -->
<mappers>
<mapper resource="org/phf/mapping/UserMapper.xml"/>
</mappers>
</configuration>
2.3 为封装SqlSessionFactory建个单例
package org.phf.factory;
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;
public class MybatisFactory {
/**
* SqlSessionFactory对象可以看成DataSource(数据库连接池)
* 在应用执行期间,应该只创建一次,建议使用单例模式
* 通过SqlSessionFactoryBuilder来获得数据库配置参数并创建
*/
private static SqlSessionFactory sqlSessionFactory;
/**
* SqlSession对象可以理解成对Connection的封装,即一个数据连接会话
* 它同时也封装了连接和断开过程,提供sql语句的映射
* SqlSession实例不能被共享,它不是线程安全的。
* 所以应该一次性用完后要确保使用finally块来关闭它,关闭时会被收回SqlSessionFactory所管理的连接池中
*/
//private static SqlSession session;
static
{
try {
String resource = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
System.out.println(sqlSessionFactory);
} catch (Exception e) {
e.printStackTrace();
}
}
//
public static SqlSession getSqlSession()
{
return sqlSessionFactory.openSession();
}
//
public static void close(SqlSession session)
{
if(session != null)
session.close();
}
}
2.4为表建一个映射类User
package org.phf.pojo;
/**
* 数据库表的映射类,每个实例对象映射到表中的一行数据
* 属性的名称和类型对应表中字段名和类型,并提供getter和setter方法
* @author Administrator
*/
public class User {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
/**方便打印输出*/
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]\n";
}
}
2.5 创建UserMapper.java接口
//UserMapper.java
package org.phf.mapping;
import java.util.List;
import java.util.Map;
import org.phf.pojo.User;
/**
* 只要定义接口方法,所需sql语句在相应UserMapper.xml中映射
* 为了便于快速理解,只有一个find方法
*/
public interface UserMapper {
//一条数据可以返回表对象,属性对应列名
User find(Integer id);
}
2.6 建立UserMapper.xml文件
创建表映射类创建的XXXmapper.xml配置文件,此处为UserMapper.xml(配置在mybatis-config.xml的<mappers>…</mappers>中)
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"mybatis-3-mapper.dtd">
<!-- MyBatis 真正的力量是在映射语句中。这里是奇迹发生的地方。
对于所有的力量,SQL 映射的 XML 文件是相当的简单。
当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 95%的代码量。
MyBatis 的构建就是聚焦于 SQL 的,使其远离于普通的方式。Mybatis封装处理了连接和查询结果获取 -->
<mapper namespace="org.phf.mapping.UserMapper">
<!--
select 查询语句是使用 MyBatis 时最常用的元素之一。
id(方法)是 get, parameterType(参数类型)是Integer, resultType(返回类型)是 User对象,其属性就是列名,值是列对应的值。
-->
<select id="find" parameterType="Integer" resultType="User">
SELECT * FROM TB_USER WHERE ID = #{id}
</select>
</mapper>
2.7 测试代码(大功告成,只待测试)
package org.phf.test;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.phf.factory.MybatisFactory;
import org.phf.mapping.UserMapper;
import org.phf.pojo.User;
public class TestUserMapper {
@Test
public void test()
{
SqlSession session = null;
try {
//获取SqlSession的对象(需要手动关闭该资源)
session = MybatisFactory.getSqlSession();
//获取业务接口,通过接口类型获取由mybatis生成的匿名实例
UserMapper userMapper = session.getMapper(UserMapper.class);
//调用接口方法,执行操作且获得数据
System.out.println("<---------find by id----------->");
User user = userMapper.find(1);
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
}
finally{
MybatisFactory.close(session);
}
}
}
若示例摘的不清楚,推荐一个示例如下:
http://yancc.iteye.com/blog/983815
http://blog.csdn.net/wanda39kela/article/details/6103282
http://legend2011.blog.51cto.com/3018495/908956
http://yun342173024.iteye.com/blog/1675680