1.MyBatis:
和数据库进行交互;持久层框架
1)从原始的JDBC dbutils(QueryRunner)----JdbcTemplate-----------xxxx;不用的 称之为工具
工具:一些功能的简单的封装 框架:某个领域的整体解决方案;缓存,考虑异常处理问题,考虑部分字段映射问题 不用原生jdbc的原因: 
!麻烦 !sql语句是硬编码在程序中的;耦合(数据库层的和java编码耦合 )
2)Hibernate–数据库交互的框架(ORM框架)(使用各种框架)
ORM(Object Relation Mapping)对象关系映射; 创建好javaBean;
@Table(t_employee) class Employee{ private Integer empId; private String empName; } session.get("1"Employe.class);
缺点:
1)定制sql; 2)HQL;SQL; 3)全映射框架;部分字段映射很难;能做;
希望有一个框架能支持定制化sql而且功能强大;sql也不要硬编码在java文件中(导致维护麻烦) 
!mybatis将重要的步骤抽取出来可以人工定制,其他步骤自动化 !重要步骤都是写在配置文件中(好维护) !完全解决数据库的优化问题; !MyBatis底层就是对原生JDBC的一个封装; !即将java编码与sql抽取出来,还不会失去自动化功能;半自动的持久化框架; !是一个轻量级框架
HelloWorld
1)环境搭建
!创建一个java工程 !创建测试库,测试表,以及封装的javaBean,操作 数据库的dao接口 创建表:自己用工具创建 
创建、javaBean:Employee 创建一个Dao接口,用来操作数据库;
public interface EmployeeDao {
public Employee getEmpById(Integer id);
}
!用MyBatis操作数据库
1.导包
 log4j配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>
2.写配置
(全局的配置文件(指导mybatis运行的),dao接口实现文件(描述dao中的每个方法怎么工作)) !第一个配置文件:(称之为mybatis的全局配置文件,指导mybatis如何正确运行,比如连接哪个数据库)
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 配置连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_0325"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 引入自己的编写的每一个接口的实现文件 -->
<mappers>
<mapper resource="EmployeeDao.xml"/>
</mappers>
</configuration>
!第二个配置文件:编写每一个方法如何向数据库发送sql语句,如何执行。。。。相当于接口的实现类) !!将mapper的namespace属性改为接口的全类名 !!配置细节
<?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">
<!-- namespace:名称空间,写接口的全类名,相当于
告诉mybatis接口实现哪个接口的-->
<mapper namespace="com.atguigu.dao.EmployeeDao">
<!--
selete,用来定义一个查询接口
id:方法名,相当于这个配置是对于某个方法的实现
resultType:方法运行后的范沪指类型:(查询操作必须指定)
-->
<select id="getEmpById" resultType="com.atguigu.dao.EmployeeDao">
select * from t_employee where id = #{id}
</select>
</mapper>
!我们写的这个dao接口的实现文件,mybatis是不知道的,需要在全局配置文件中注册
<!-- 引入自己的编写的每一个接口的实现文件 -->
<mappers>
<mapper resource="EmployeeDao.xml"/>
</mappers>
3,测试
1.根据全局配置文件先构建一个 2.sqlSessionFactory中获取sqlSession对象操作数据库即可
package com.atguigu.test;
import java.io.IOException;
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;
import org.junit.Test;
import com.atguigu.bean.Employee;
import com.atguigu.dao.EmployeeDao;
public class MyBatisTest {
@Test
public void test() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
Employee employee;
SqlSession openSession = sqlSessionFactory.openSession();
try {
EmployeeDao employeeDao = openSession.getMapper(EmployeeDao.class);
employee = employeeDao.getEmpById(1);
} finally {
openSession.close();
}
System.out.println(employee);
}
}
效果

|