• MyBatis的核心组件


    本书的3~8章都是MyBatis的讲解内容,今天学习

    第3章:认识MyBatis核心组件 --《JavaEE 互联网轻量级框架整合开发》

    一、MyBatis的优点:

    • 不屏蔽SQL,可以自主的优化SQL
    • 提供强大、灵活的映射机制以及动态SQL的功能;根据不同条件组装,灵活变化
    • 提供Mapper编程接口,一个接口一个XML即可;简化了操作更能集中于业务。

    二、MyBatis的核心组件:

    • SqlSessionFactoryBuilder:根据配置或者代码生成SqlSessionFactory,采用的是分步构建的Builder模式
    • SqlSessionFactory:工厂模式生成SqlSession
    • SqlSession(会话):①可以发送SQL执行返回结构,②获取Mapper的接口。而我们现在一般会让其在业务代码中消失,使用Mapper接口编程
    • SQL Mapper(映射器):接口和XML文件(或注解)构成,给出对应的SQL和映射规则,去执行并返回结果。

    1. SqlSessionFactory(工厂接口)

    使用MyBatis首先就是去配置或者代码去生成SqlSessionFactory。

    创建SqlSessionFactory,需要用到SqlSessionFactoryBuilder和一个类org.apache.itatis.session.Configuraton,采用Builder模式,具体分步在Configuration中完成。关系如下:

    每一个MayBatis应用都是以一个SqlSessionFactory为中心的,它的唯一作用就是:生产MaBatis的 核心接口对象SqlSession。所以他是唯一的,我们一般采用单例模式处理它。

    构建SqlSessionFactory有两种方式,一种是使用XML文件构建,一种是代码构建,推荐前者。

    使用XML构建SqlSessionFactory:

    首先,XML有两类:

    • 基础配置文件(通常有一个)mybatis-config.xml
    • 映射文件(多个)xxxMapper.xml

    基础配置文件:

    <?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>
        <!--环境配置,连接的数据库,这里使用的是MySQL-->
        <environments default="mysql">
            <environment id="mysql">
                <!--指定事务管理的类型,这里简单使用Java的JDBC的提交和回滚设置-->
                <transactionManager type="JDBC"></transactionManager>
                <!--dataSource 指连接源配置,POOLED是JDBC连接对象的数据源连接池的实现-->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"></property>
                    <property name="url" value="jdbc:mysql://127.0.0.1:3306/test">			</property>
                    <property name="username" value="root"></property>
                    <property name="password" value="123456"></property>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <!--这是告诉Mybatis区哪找持久化类的映射文件,对于在src下的文件直接写文件名,
                    如果在某包下,则要写明路径,如:com/mybatistest/config/UserMapper.xml-->
            <mapper resource="UserMapper.xml"></mapper>
        </mappers>
    </configuration>
    

    有了基础配置文件,我们就可以通过读取XML来构建SqlSessionFactory了:

    SqlSessionFactory sqlSessionFactory = null;
    String resource = "mybatis-config.xml";
    InptStream inputStream;
    try{
        inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    } catch(IOException e){
        e.printStackTrace();
    }
    

    使用代码创建SqlSessiionFactory

    不推荐这种方式,略

    2. SqlSession

    是MyBatis的核心接口,类似于JDBC中的Connection对象,代表着一个链接资源的启用。具体作用有三个:

    • 获取Mapper接口
    • 发送SQL给数据库
    • 控制数据库事务

    创建一个SqlSession:

    SqlSession sqlSession = SqlSessionFactory.openSession();
    

    注意:SqlSession是个门面接口,但实际上底层工作的是Executor

    SqlSession事务:

    sqlSession.commit();//提交事务
    sqlSession.rollback();//回滚事务
    sqlSession.close();
    

    3. 映射器

    映射器是MyBatis中最重要、最复杂的组件,由一个接口和对应的XML文件(或注解组成),他可以配置:

    • 描述映射规则
    • 提供SQL语句,并可以配置SQL参数类型、返回类型、缓存刷新等信息
    • 配置缓存
    • 提供动态SQL

    用XML实现映射器与注解实现映射器

    xml与pojo是自动映射的(如:role_name <==> roleName),只要列名一一对应即可。

    与注解映射比较:

    • XML和注解同时使用,XML会覆盖到注解的映射
    • XML可读性高,动态SQL更容易使用
    • XML可以相互引入,而注解不可以

    SqlSession发送SQL与用Mapper接口发送SQL

    SqlSession直接发送:

    User user = (User)sqlSession.selectOne("com.example.mybatis.mapper.UserMapper.getUserById","123");
    

    用Mapper接口发送SQL:

    UserMapper usrMapper = sqlSession.getMapper(RoleMapper.class);
    User user = roleMapper.getUserById("123");
    

    对比:

    • Mapper接口可读性高
    • 使用Mapper.getUserById("123"),IDE会校验和提示错误。而sqlSession.selectOne("getUserById","123");运行时才能知道是否错误产生。

    4. 生命周期

    • SqlSessionFactoryBuiler创建了SqlSessionFactory就是去了作用,只存在于创建SqlSessionFactory的方法中
    • SqlSessionFactory可以被认为是数据库连接池,需要它来创界SqlSession。因此它的声明周期等同于MyBatis应用的周期。但是相应的它一般是单例的,避免大量创建占用太多资源。
    • SqlSession相当于一个Connection连接对象,一个事务执行完就应该关闭了。
    • Mapper由SqlSession创建,生命周期最多等同于SqlSession。
  • 相关阅读:
    hdu 2489 dfs枚举组合情况+最小生成树
    hdu3938 Portal 离线的并查集
    hdu3926 Hand in Hand 判断同构
    hdu1811 Rank of Tetris 拓扑排序+并查集
    poj3083 Children of the Candy Corn 深搜+广搜
    HDU 2529 Shot (物理数学题)
    HDU 4576 Robot(概率dp)
    HDU 2672 god is a girl (字符串处理,找规律,简单)
    HDU 2669 Romantic(扩展欧几里德, 数学题)
    HDU 2671 Can't be easier(数学题,点关于直线对称)
  • 原文地址:https://www.cnblogs.com/nm666/p/11173489.html
Copyright © 2020-2023  润新知