• java-mybaits-00102-mybatis框架原理、SqlMapConfig.xml全局配置文件


    一、原理概述

    1、mybatis是什么?

      mybatis是一个持久层的框架,是apache下的顶级项目。是一个不完全的ORM框架。
      mybatis托管到goolecode下,再后来托管到github下(https://github.com/mybatis/mybatis-3/releases)。
      mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。
      mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)
      MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。
      MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
      Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。 

    2、mybatis和hibernate本质区别和应用场景

      hibernate

        是一个标准ORM框架(对象关系映射)。入门门槛较高的,不需要程序写sql,sql语句自动生成了。
        对sql语句进行优化、修改比较困难的。
       应用场景:
              适用与需求变化不多的中小型项目,比如:后台管理系统,erp、orm、oa。。   

      mybatis

        专注是sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全 的ORM框架,虽然程序员自己写sql,mybatis 也可以实现映射(输入映射、输出映射)。
      应用场景:
        适用与需求变化较多的项目,比如:互联网项目。
     
      注:企业进行技术选型,以低成本 高回报作为技术选型的原则,根据项目组的技术力量进行选择。

    3、mybatis框架

      

      

    1. mybatis配置
      SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
      mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
    1. 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
    2. 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。建议sqlSession应用场合在方法体内。
    3. mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
    4. Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
    5. Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
    6. Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

    4、Mybatis解决jdbc编程的问题

    1.数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
    解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。
    2.Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
    解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。
    3.向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
    解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。
    4.对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。
    解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。
     
    二、SqlMapConfig.xml全局配置文件
     
    2.1、配置中的内容和顺序如下: 

    properties(属性)
    settings(全局配置参数)
    typeAliases(类型别名)
    typeHandlers(类型处理器)
    objectFactory(对象工厂)
    plugins(插件)
    environments(环境集合属性对象)
    environment(环境子属性对象)
    transactionManager(事务管理)
    dataSource(数据源)
    mappers(映射器)

    2.2、properties(属性)  
     
    SqlMapConfig.xml可以引用java属性文件中的配置信息如下:
    db.properties
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
    jdbc.username=root
    jdbc.password=root

    SqlMapConfig.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>
        <!-- 是用resource属性加载外部配置文件 -->
        <properties resource="db.properties">
           <!-- 在properties内部用property定义属性 -->
           <!-- 如果外部配置文件有该属性,则内部定义属性被外部属性覆盖 -->
           <property name="jdbc.username" value="root123" />
           <property name="jdbc.password" value="root123" />
        </properties>
    <!-- 和spring整合后 environments配置将废除 -->
        <environments default="development">
           <environment id="development">
               <!-- 使用jdbc事务管理 -->
               <transactionManager type="JDBC" />
               <!-- 数据库连接池 -->
               <dataSource type="POOLED">
                  <property name="driver" value="${jdbc.driver}" />
                  <property name="url" value="${jdbc.url}" />
                  <property name="username" value="${jdbc.username}" />
                  <property name="password" value="${jdbc.password}" />
               </dataSource>
           </environment>
        </environments>
     
        <!-- 加载映射文件 -->
        <mappers>
           <mapper resource="sqlmap/User.xml" />
           <mapper resource="mapper/UserMapper.xml" />
        </mappers>
    </configuration>
    注意: MyBatis 将按照下面的顺序来加载属性:
    u  在 properties 元素体内定义的属性首先被读取。
    u  然后会读取properties 元素中resource或 url 加载的属性,它会覆盖已读取的同名属性。
    2.3、typeAliases(类型别名)
     
    别名
    映射的类型
    _byte
    byte
    _long
    long
    _short
    short
    _int
    int
    _integer
    int
    _double
    double
    _float
    float
    _boolean
    boolean
    string
    String
    byte
    Byte
    long
    Long
    short
    Short
    int
    Integer
    integer
    Integer
    double
    Double
    float
    Float
    boolean
    Boolean
    date
    Date
    decimal
    BigDecimal
    bigdecimal
    BigDecimal
    map
    Map
    自定义别名:
    在SqlMapConfig.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>
        <!-- 是用resource属性加载外部配置文件 -->
        <properties resource="db.properties">
           <!-- 在properties内部用property定义属性 -->
           <property name="jdbc.username" value="root123" />
           <property name="jdbc.password" value="root123" />
        </properties>
     
        <typeAliases>
           <!-- 单个别名定义 -->
           <typeAlias alias="user" type="cn.itcast.mybatis.pojo.User" />
           <!-- 批量别名定义,扫描整个包下的类,别名为类名(大小写不敏感) -->
           <package name="cn.itcast.mybatis.pojo" />
           <package name="其它包" />
        </typeAliases>
     
        <!-- 和spring整合后 environments配置将废除 -->
        <environments default="development">
           <environment id="development">
               <!-- 使用jdbc事务管理 -->
               <transactionManager type="JDBC" />
               <!-- 数据库连接池 -->
               <dataSource type="POOLED">
                  <property name="driver" value="${jdbc.driver}" />
                  <property name="url" value="${jdbc.url}" />
                  <property name="username" value="${jdbc.username}" />
                  <property name="password" value="${jdbc.password}" />
               </dataSource>
           </environment>
        </environments>
     
        <!-- 加载映射文件 -->
        <mappers>
           <mapper resource="sqlmap/User.xml" />
           <mapper resource="mapper/UserMapper.xml" />
        </mappers>
    </configuration>

    在mapper.xml配置文件中,就可以使用设置的别名了
    别名大小写不敏感

    2.4、 mappers(映射器)
    Mapper配置的几种方法:
    1、 <mapper resource=" " />
    使用相对于类路径的资源(现在的使用方式)
    如:<mapper resource="sqlmap/User.xml" />
     
    2、<mapper class=" " />
    使用mapper接口类路径
    如:<mapper class="cn.itcast.mybatis.mapper.UserMapper"/>
     
    注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。
     
    3、<package name=""/>

    注册指定包下的所有mapper接口
    如:<package name="cn.itcast.mybatis.mapper"/>
    注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。

     
     
     
     
     
     
     
     
    开机
     
  • 相关阅读:
    【TFLSnoi李志帅】第⑥篇文章---排序
    【TFLSnoi李志帅】第⑤篇文章--递推算法经典例题
    【TFLSnoi李志帅】第四篇文章---高精度加法
    【TFLSnoi李志帅】第三篇文章
    【TFLSnoi李志帅】第三篇文章---问题记录
    【TFLSnoi李志帅】第一篇文章
    为什么成功引入jquery后,效果无法生效
    到底classpath指向哪里
    05-配置web.xml
    04-配置事务管理
  • 原文地址:https://www.cnblogs.com/bjlhx/p/6815214.html
Copyright © 2020-2023  润新知