初识MyBatis

MyBatis

是什么
 是一种ORM框架 实体类和SQL语句之间建立映射关系
 O===>Object  R===>Relation M===>Mapping

特点
 基于SQL语法,简单易学
 能了解底层封装过程
 SQL语句封装在配置文件中,便于统一管理和维护,降低程序的耦合度
 方便程序的代码调式

使用MyBatis的开发步骤
 下载mybatis-3.2.2.jar包并导入工程
 编写MyBatis核心配置文件(默认configuration.xml 建议自定义)
 创建实体类-POJO
 DAO层-SQL映射文件(mapper.xml)
 创建测试类
  读取全局配置文件mabatis-config.xml
  创建SqlSessionFactory对象,读取配置文件
  创建SqlSession对象
  调用mapper文件进行数据操作

导入MyBatis源码
 选中引入工程中(即Referenced Libraries中)的mybatis-3.2.2.jar包
 右键===》properties===>Java Source Attachment===》导入到Location path
 folder  ------->External Folder(解压后)
 JAR  ------->Workspace
 zip  ------->External File(未解压)====》到自己相应的目录找到源码压缩包====》Apply

mybatis核心配置文件的详细配置
 01、创建source folder 统一管配置志文件resources

 02、resources
  log4j.properties
  database.properties
  mybatis-config.xml(语义化命名的mybatis核心配置文件)

 03、mybatis-config.xml配置详细 

  001、copy文件头
  <?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">

  002、根节点configuration
  <configuration>  <!--注意各个节点的顺序-->

   <!-- 引入database.properties文件 -->
   <properties resource="database.properties"/>
   
   <!--设置运行时的属性-->
   <settings>
     <setting name="logImpl" value="LOG4J" />
   </settings>

   <!-- 配置多套运行环境,并指定默认运行环境-->
   <environments default="development">

    <environment />
     </dataSource>
    </environment>

    <!--下面可以配置多套运行环境。注意id唯一,不要重复-->

   </environments>

  <!--将mapper文件加入到配置文件中-->
    <mappers>
     <mapper resource="cn.smbms.dao.user.UserMapper.xml" />
    </mappers>

</configuration>

DAO层xxx-Mapper.xml文件配置
 01、copy文件头
  <?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">
  <!-- 上一行是网络引入dtd文件,由于网络限制,需要手动引入 ->
 02、根节点mapper
  <!--namespace用于区别其他mapper,达到全局唯一。-->
  <mapper namespace="cn.smbms.dao.user.UserMapper"> 
   <!-- 查询用户表的记录数 -->
   <select >
    select count(1) as count from smbms_user
   </select>

   <!---查询用户列表->  <!---返回类型用完全限定名->
   <select >
    select * from smbms_user
   </select>
  </mapper>

手动引入dtd
 01、找到dtd文件  
  jar包===》解压===》org/apache/ibatis/builder/xml/xxx.dtd
  放到自己想放的位置
 02、复制PUBLIC 后的 -//mybatis.org/DTD Mapper 3.0//EN
 03、引入dtd
  点击MyEclipse的window===>preferences===>搜xml
  选中User Specified Entries===>点击Add===file System 到自己刚才存放位置找dtd文件
  将刚才复制的 -//mybatis.org/DTD Mapper 3.0//EN 粘贴在 key 中

测试,执行刚才配置的sql语句
 01、创建测试类
  建一个source folder 来放测试类
  New===》Other===>Junit Test Case===>填写包名,类名
 02、书写Test方法

 @Test
 public void test(){}
  String resource="mybatis-config.xml";
  int count=0;
  SqlSession sqlSession = null;
  try {
   //1、获取mybatis-config.xml的输入流
   InputStream is=Resources.getResourceAsStream(resource);//导入的是ibatis.io的包
   //2、创建SqlSessionFactory对象,完成对配置文件的读取
   SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
   //3、创建sqlSession
   sqlSession=factory.openSession();
   count = sqlSession.selectOne("cn.smbms.dao.user.UserMapper.count");
   logger.debug("UserMapperTest count ----->" + count);
  } catch(IOException e) {
   e.printStackTrace();
  } finally {
   sqlSession.close();
  }
 }

MyBatis的优缺点
 MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案,
 适用于性能要求较高或者需求多变的互联网项目

 优点
  与JDBC相比,减少了50%以上的代码量
  最简单的持久化框架、小巧简单易学
  SQL代码从程序代码中彻底分离,可重用
  提供XML标签、支持编写动态SQL
  提供映射标签、支持对象与数据库的ORM字段关系映射

 缺点
  SQL语句编写工作量大,对开发人员有一定要求
  数据库移植性差 

SqlSessionFactory优化---创建MyBatisUtil单例类
(并非最优,后期可集成Spring)

 public class MyBatisUtil{
  private static SqlSessionFactory factory;
  static{
   try {
    InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
    factory=new SqlSessionFactoryBuilder().build(is);
   } catch (IOException e){
    e.printStackTrace();
   }  
  }
  public static SqlSession createSqlSession(){
   return factory.openSession(false);
  }
  public static void closeSqlSession(SqlSession sqlSession){
   if(null!= sqlSession){
    sqlSession.close();
   }
  }
 }

接口映射器--->UserMapper
 //与映射同包
 public interface UserMapper{
  public List<User> getUserList();//与映射id同名
 }

 //修改测试类中的相应代码
 userList=sqlSession.getMapper(UserMapper.class).getUserList();

系统核心配置文件
 mybatis-config.xml-系统核心配置文件
 configuration 配置
  properties   可以配置在Java属性配置文件中
  setting   修改MyBatis在运行时的行为方式
  typeAliases  为Java类型命名一个别名(简称) 
  typeHandlers  类型处理器
  objectFactory 对象工厂
  plugins   插件
  environments  环境
   environment    环境变量
    transactionManager  事务管理器
    dataSource    数据源
  mappers  映射器

配置 properties元素的两种方式
 通过外部指定的方式 database.properties,实现动态配置
  配置properties的resource指定(较高的优先级)
  <properties resource="database.properties" />
 直接配置为xml,实现动态配置
  配置property的name和value
  <properties>
   <property name="driver" value="com.mysql.jdbc.Driver" />
   <property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms" />
   <property name="user" value="root" />
   <property name="password" value="" />
  </properies>

settings元素(9个)
 用来修改MyBatis运行时的行为方式
 主要是MyBatis的一些全局配置属性的设置

typeAliases
 方式一:<typeAlis alias="user" type="cn.smbms.pojo.User" /><!--指定一个类的别名-->
 方式二:<package name="cn.smbms.pojo" /><!--为全包指定默认名,JavaBean的非限定类名-->

environments元素
 配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上
 子元素节点:environment,但是必须指定其中一个默认运行环境(通过default指定)
  id  运行环境ID
  transactionManager 事务管理器
   <transactionManager type="[JDBC][MANAGED]" /> MANAGED--托管
  dataSource  数据源
   dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源
   有三种内建的数据源类型
    <dataSource type="[UNPOOLED][POOLED][JNDI]">