MyBatis框架

目录

框架技术

持久化与ORM

MyBatis简介

搭建MyBatis开发环境

MyBatis框架优缺点

MyBatis基本要素

核心接口和类的结构

核心对象

SqlSessionFactoryBuilder

SqlSessionFactory

SqlSession

系统核心配置文件

配置properties元素

配置properties元素的两种方式

settings元素

typeAliases元素

environments元素

mappers元素

MyBatis使用步骤


框架技术

框架技术

是一个应用程序的半成品

提供可重用的公共结构

按一定规则组织的一组组件

分析优势

不用再考虑公共问题

专心在业务实现上

结构统一,易于学习、维护

新手也可写出好程序

持久化与ORM

持久化是程序数据在瞬时状态和持久状态间转换的过程

什么是ORM

ORM即对象关系映射(Object-Relationl Mapping),它的作用是在关系型数据库和对象之间作一个映 射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作 对象一样操作它就可以了 。

ORM(Object Relational Mapping)

编写程序的时候,以面向对象的方式处理数据

保存数据的时候,却以关系型数据库的方式存储

ORM解决方案包含下面四个部分

在持久化对象上执行基本的增、删、改、查操作

对持久化对象提供一种查询语言或者API

对象关系映射工具

提供与事务对象交互、执行检查、延迟加载以及其他优化功能

MyBatis简介

MyBatis前身是iBatis,本是Apache的一个开源的项目

官方网站mybatis

ORM框架

实体类和SQL语句之间建立映射关系

特点:

基于SQL语法,简单易学

能了解底层封装过程

SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度

方便程序代码调试

搭建MyBatis开发环境

使用MyBatis的开发步骤

1.下载mybatis-3.2.2.jar包并导入工程

2.编写MyBatis核心配置文件(configuration.xml)

3.创建实体类-POJO

4.DAO层-SQL映射文件(mapper.xml)

5.创建测试类

  • 读取核心配置文件mybatis-config.xml

  • 创建SqlSessionFactory对象,读取配置文件

  • 创建SqlSession对象

  • 调用mapper文件进行数据操作

MyBatis框架优缺点

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

优点

与JDBC相比,减少了50%以上的代码量

最简单的持久化框架,小巧并简单易学

SQL代码从程序代码中彻底分离,可重用

提供XML标签,支持编写动态SQL

提供映射标签,支持对象与数据库的ORM字段映射

缺点

SQL语句编写工作量大,对开发人员有一定要求

数据库移植性差

MyBatis基本要素

MyBatis的核心对象

SqlSessionFactoryBuilder

SqlSessionFactory

SqlSession

mybatis-config.xml 系统核心配置文件

mapper.xml SQL映射文件

核心接口和类的结构

SqlSessionFactoryBuilder—bulid()—>SqlSessionFactory—openSession()—>SqlSession

核心对象

SqlSessionFactoryBuilder

用过即丢,其生命周期只存在于方法体内

可重用其来创建多个 SqlSessionFactory 实例

负责构建SqlSessionFactory,并提供多个build方法的重载

build(InputStream inputStream, String environment, Properties properties) 
build(Reader reader, String environment, Properties properties)
build(Configuration config)
​
配置信息以三种形式提供给SqlSessionFactory的build方法:
InputStream (字节流)、Reader(字符流)、Configuration(类)
    
    
读取XML文件构造方式:
String resource = "mybatis-config.xml";   
InputStream is = Resources.getResourceAsStream(resource);   
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSessionFactory

SqlSessionFactory是每个MyBatis应用的核心

作用:创建SqlSession实例

  • SqlSession session = sqlSessionFactory.openSession(boolean autoCommit);

  • true:关闭事务控制(默认)

  • false:开启事务控制

作用域:Application

生命周期与应用的生命周期相同

单例

  • 存在于整个应用运行时,并且同时只存在一个对象实例

SqlSession

包含了执行SQL所需的所有方法

对应一次数据库会话,会话结束必须关闭

线程级别,不能共享

SqlSession session = sqlSessionFactory.openSession();
try {
      // do work
} finally {
     session.close();
}
​
关闭SqlSession非常重要,必须要确保在finally方法体中正常关闭
​
在SqlSession里可以执行多次SQL语句,但一旦关闭了SqlSession就需要重新创建

SqlSession的获取方式

String resource = "mybatis-config.xml";   
InputStream  is = Resources.getResourceAsStream(resource);   
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is) ;
SqlSession sqlSession = factory.openSession();

SqlSession的两种使用方式

通过SqlSession实例直接运行映射的SQL语句

基于Mapper接口方式操作数据

系统核心配置文件

mybatis-config.xml 系统核心配置文件

  • configuration 配置

  • properties 可以配置在Java 属性配置文件中

  • settings 修改 MyBatis 在运行时的行为方式

  • typeAliases 为 Java 类型命名一个别名(简称)

  • typeHandlers 类型处理器

  • objectFactory 对象工厂

  • plugins 插件

  • environments 环境

  • environment 环境变量

    • transactionManager 事务管理器

    • dataSource 数据源

  • mappers 映射器

配置properties元素

配置properties元素的两种方式

1.通过外部指定的方式(database.properties),实现动态配置

配置properties的resource属性

      
......

    
    
    
    

2.直接配置为xml,实现动态配置

配置property的name和value


        
        
        
        

......

        
        
        
        

3.若两种方式同时都用了,那么哪种方式优先?

配置properties的resource指定

配置property的name和value


    
    
    
    

结论:resource属性值的优先级高于property子节点配置的值

settings元素

用来修改MyBatis运行时的行为方式

主要是MyBatis的一些全局配置属性的设置

设置项 描述 允许值 默认值
cacheEnabled 对在此配置文件下的所有cache进行全局性开/关设置 true | false true
lazyLoadingEnabled 全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载 true | false true
autoMappingBehavior MyBatis对于resultMap自动映射匹配级别 NONE |PARTIAL |FULL PARTIAL
……(9个) ...... ...... ......
typeAliases元素

类型别名

仅仅只关联XML配置,简写冗长的Java类名


    

​
    

       //默认名称:指定包下JavaBean的非限定类名
environments元素

表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上

子元素节点:environment,但是必须指定其中一个为默认运行环境(通过default指定)

每个SqlSessionFactory实例只能选择一个运行环境

    //默认的运行环境 ID
          //默认的运行环境 ID
               //事务管理器配置
              //数据源配置
            
            
            
            
        
        
         //运行环境 ID
​
……
    

transactionManager-事务管理器

dataSource

dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源

有三种内建的数据源类型

mappers元素

映射器,定义SQL映射语句

须在配置中引用mapper映射文件

方式一:使用类资源路径获取资源



    

方式二:使用URL获取资源


        
        

MyBatis使用步骤

  • 1.创建maven项目mybatis01

  • 2.在pom文件中引入mybatis所需jar文件

      
        
          org.mybatis
          mybatis
          3.2.8
        
        
          mysql
          mysql-connector-java
          5.1.30
        

    1. 在resources下创建xml文件mybatis.xml

    并在mybatis.pdf中找到头部信息

     
    
    
        
    ​
    ​
    

  • 4.准备工作,在resources下放入jdbc.properties

  • 5.创建com.hz.pojo和com.hz.dao,创建实体类Provider和ProviderDao接口

public interface ProviderDao {
    /**
     * 根据供应商ID  获得单个对象
     * @param id
     * @return
     */
    public abstract Provider findProviderById(Long id);
}
  • 6.编写mybatis.xml主配置文件 读取jdbc.properties,加载数据源

 
    
​
    
    
    
    
        
            
            
            
            
                
                
                
                
            
        
    
    
  • 7.在resources下创建mappers文件夹,并创建ProviderMapper.xml文件 在pdf中复制mapper头部信息

 

​
注意:namespace为实现的接口
  • 8.编写ProviderMapper.xml文件,重写接口中findProviderById方法

 
  
  • 9.创建main方法进行测试

public class Test {
    public static void main(String[] args) {
        try {
            //读取mybatis.xml主配置文件 获得字节流对象
            InputStream is = Resources.getResourceAsStream("mybatis.xml");
            //创建工厂  将字节流对象放入  获得 数据源工厂
            SqlSessionFactory sqlSessionFactory =
                    new SqlSessionFactoryBuilder().build(is);
            //获得数据源SqlSession
            SqlSession sqlSession = sqlSessionFactory.openSession();
            //获得providerdao实例
            ProviderDao providerDao = sqlSession.getMapper(ProviderDao.class); //实现类
​
            Provider provider = providerDao.findProviderById();
            System.out.println(provider.toString());
​
            sqlSession.close();
        } catch (Exception e) {
           e.printStackTrace();
        }
​
    }
}

你可能感兴趣的:(框架,mybatis,开发语言,java,spring,maven,tomcat)