MyBatis学习笔记---First

前言

  • Mybatis框架优点
    • 半自动化管理
    • 作用于DAO层
    • 动态、小巧灵活
  • Mybatis框架特点
    • 基于SQL语法、简单易学。
    • 便于调试、能了解底层封装过程。
    • SQL语句封装在配置文件中,便于管理,降低成语耦合。

 

数据持久化概念:持久化式程序数据在瞬时状态持久状态的之间的转化过程

----

瞬时状态 === 表示在内存中的文件,数据。通俗就是临时文件,用完就会被清理。

持久状态 === 表示储存在光盘,磁盘,数据库等等中的数据。可以一直携带~保存

----

 

什么是ORM:(Object Relational Mapping)即对象/关系映射

  • ORM(Object Relational Mapping)
    • 编写程序的时候,以面向对象的方式处理数据。(即:一个实体类对应一张表)
    • 保存数据的时候,却以关系型数据库的方式储存。(即:类属性对应数据库字段)
  • OBM解决方案包含下面四个部分
    • 在持久化对像执行增、删、改、查操作。
    • 对持久化对象提供一种查询语言或者API。
    • 对象关系映射工具。
    • 提供与是事务对象交互、执行检查、延迟加载以及其他优化。

结言:

MyBatis是ORM解决方案,基于OBM在对象模型和关系数据库之间搭建了一座桥梁。

实现这么一些持久化对象的操作。


MyBatis环境搭建

准备工作:

1、下载Mybatis的Jar包

(源码文件)

(中文的mybatisAPI文档,不懂时进行查看)

2、部署jar包到项目下 -- 放入项目的lib包中。

3、编写MyBatis核心配置文件。( 可在文档中复制。)

4、创建实体类-POJO。

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

6、创建测试类

* 读取核心配置文件。

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

* 通过SqlSessionFactory工厂对象创建SqlSession对象。

* 通过SqlSession对象调用mapper文件进行数据操作。

 

核心配置文件:




    
    
        
        
        
        
    
    
    
        
    
    
    
        
    
    
    
        
            
            
            
            
                
                
                
                
            
        
    
    
    
        
        
    

 

SQL映射文件:







    
    

    
    


 

具体的测试类:关联sql映射文件和核心文件

package test;

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.apache.log4j.Logger;
import pojo.User;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * 描述:
 *
 * @author Unruly
 * @ClassName userTest
 * @create 2018-08-25 21:29
 */
public class userTest {
    private static Logger log = Logger.getLogger(userTest.class);
    public static void main(String[] args) {
        int count = 0;  // 接收值
        List list = new ArrayList(); // 接收列表
        SqlSession sqlSession = null;   // 声明sql会话对象
        try {
            /*
                创建sqlSession对象后要怎么办呢?
                    -- mybatis的核心对象是sqlsessionFactory对象。用于创建sql会话
                那么sqlsessionfactory对象怎么获取呢?
                    -- 用sqlsessionfactorybuilder对象的build的方法创建
                    -- build提供多重载。

                这里使用读取字节流的方式将核心配置文件读取进入输入流
                然后使用build方法加载核心配置文件创建sql会话工厂
                最后使用sql会话工厂的openSession(boolean commit); 默认true,自动提交
                创建sqlSession会话对象
                sqlSession会话对象有对sql语句执行的所有操作
             */
            // 1.读取流文件
            InputStream is = Resources.getResourceAsStream("Mybatis-config.xml");
            // 2.创建工厂
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
            // 3.打开数据库会话
            sqlSession = factory.openSession();
            // 4.执行sql映射文件的sql语句
            count = sqlSession.selectOne("dao.User.userMapper.count");
            list = sqlSession.selectList("dao.User.userMapper.listAll");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }

        /* 测试输出结果 */
            log.info("总数测试 ============ count = "+count);
         for(User user : list){
            log.info("数据测试 =============== 姓名:"+user.getUserName());
         }
    }
}

 

MyBatis基本要素-核心类和接口

  • MyBatis的核心接口和类
  • Mybatis-config.xml 系统核心配置文件
  • Mapper.xml SQL映射文件
    • SqlSessionFactoryBuilder ( 用于加载核心文件,建立sql会话工厂 )
      • 用过即丢,其生命周期只存在方法体内。
      • 可重用其创建多个SqlSessionFactory实例。
      • 负责构建核心SqlSessionFactroy,并提供多个builder的重载。

 

    • SqlSessionFactory ( 用户创建sql会话对象的工厂 )
      • SqlSessionFactroy是每个Mybatis应用核心。
      • 作用:创建SqlSession实例。
        • --->SqlSession session = sqlSessionFactory.openSession(boolean)
      • 作用域:Application。
      • 模式单例:存在于整个应用运行时,并且同时只存在一个实例对象。

 

    • SqlSession ( 用于执行sql映射文件的sql语法 )
      • 包含了执行sql语句的所有方法。
      • 生命周期对应于一此数据库会话,会话结束必须关闭。
      • 线程级别,不能共享。
      • 在SqlSession里可以执行多次SQL语句,但一旦关闭就要重新创建。

优化代码测试

Sql映射文件:





    
    

    
    

 

工具类:(因为factory只需要一个,但是sqlSession需要频繁打开,所以建立工具类)

package Utils;

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 java.io.IOException;
import java.io.InputStream;

/**
 * 描述:
 *
 * @author Unruly
 * @ClassName MybatisUtil
 * @create 2018-08-25 11:35
 */
public class MybatisUtil {
    private static SqlSessionFactory sqlSessionFactory;

    /*
     * 加载静态块读取mybatis核心文件,创建sql会话工厂。
     */
    static {
        try {
            // 读取文件进入输入流
            InputStream is = Resources.getResourceAsStream("Mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 创建sqlSession对象的方法 带参
     * @param commit 表示是否自动提交事务:true自动提交、false关闭自动
     * @return 返回一个sqlSession对象
     */
    public static SqlSession createSqlSession(boolean commit){
        return sqlSessionFactory.openSession(commit);
    }

    /**
     * 创建sqlSession对象的方法 无参 自动提交事务
     * @return 返回一个sqlSession对象
     */
    public static SqlSession createSqlSession(){
        return sqlSessionFactory.openSession();
    }

    /**
     * 关闭sqlSession对象的方法
     * @param sqlSession 一个SQL会话对象
     */
    public static void closeSqlSession(SqlSession sqlSession){
        if (sqlSession!=null){
            sqlSession.close();
        }
    }
}

 

优化简便后的测试类:

package test;

import Utils.MybatisUtil;
import dao.Provider.providerMapper;
import dao.User.userMapper;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import pojo.Provider;

import java.util.ArrayList;
import java.util.List;

/**
 * 描述:
 *
 * @author Unruly
 * @ClassName providerTest
 * @create 2018-08-25 20:26
 */
public class providerTest {
    private static Logger log = Logger.getLogger(providerTest.class);
    public static void main(String[] args) {
        int count = 0;// 接收方法返回值
        List list = new ArrayList(); // 接收
        SqlSession sqlSession = null; // 创建sqlSession对象
        /*
           因为sqlsessionfactory对象是一个工厂,采用单例模式
           生命周期处于应用运行期间,所以我们只需要一个sql会话工厂对象
           因为使用工具类创建这个对象达到优化代码的效果。
        */
        try {
            // 通过工具类创建sqlSession对象
            sqlSession = MybatisUtil.createSqlSession();
            // 通过接口映射器来执行sql映射文件执行sql映射文件的count方法
            count = sqlSession.getMapper(userMapper.class).count();
            list = sqlSession.getMapper(providerMapper.class).selectAll();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            // sqlSession对象声明周期再一次数据库访问期间
            // 用完必须关闭,sqlSession对象Servlet中的request
            MybatisUtil.closeSqlSession(sqlSession);
        }

        log.info("测试=========count = "+count);
        for (Provider p : list){
            log.info("查询测试============providerName:"+p.getProName());
        }
    }
}

基本要素-核心配置文件

  • Configuration 配置 === 所有元素的根节点
    • properties 可以配置在Java属性配置文件中
    • settings 修改MyBatis在运行时的行为方式
    • typeAliases 为Java类型命名一个别名(简称)
    • typeHandlers 类型处理器
    • objectFactory 对象工厂
    • plugins 插件
    • environments 环境
      • environment 环境变量
        • transactionManager 事务管理
        • dataSource 数据源
    • mappers 映射器
      • mapper sql映射文件资源

注意:MyBatisConfig配置文件有一定顺序不能乱否则报错。

 

配置properties的两种方式:

1、引用外部properties文件

2、在XML文件中直接引用

        

        

        

        

3、同时引用和设置。

(但是这里引用的文件的优先级>内容设置的properties)

(也就是说外部文件的属性值,会覆盖xml内设置的)

你可能感兴趣的:(Java日杂记)