Mybatis概述和配置介绍

本文参考资源:

mybatis的配置文件详解(二) - 那一夜 - 博客园

MyBatis内置常用Java类型对应的别名Java小诸葛的博客-CSDN博客

Mybatis—typeHandlers默认支持的类型处理器 - 水痕灬 - 博客园

概述

mybatis是一种持久层框架,也属于ORM映射。前身是ibatis。

相比于hibernate:
+ hibernate为全自动化,配置文件书写之后不需要书写sql语句,但是欠缺灵活,很多时候需要优化;
+ mybatis为半自动化,需要自己书写sql语句,需要自己定义映射。增加了程序员的一些操作,但是带来了设计上的灵活,并且也是支持hibernate的一些特性,如延迟加载,缓存和映射等;对数据库的兼容性比hibernate差。移植性不好,但是可编写灵活和高性能的sql语句。

特点

  1. sql语句与代码分离,存放于xml配置文件中
  2. 用逻辑标签控制动态SQL的拼接
  3. 查询的结果集与java对象自动映射

整体架构

Mybatis概述和配置介绍

Mybatis概述和配置介绍

配置

maven配置

构建建议从模板maven-archetype-webapp构建

依赖:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.4</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.6</version>
</dependency>

全局配置文件mybatis-config.xml

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

这个配置文件的目的是为了创建一个SqlSeesionFactory实例对象。

属性

指定一些键值对,作配置用,建议把这部分放在另一个properties文件中,然后使用resource属性指定文件。如:

[db.properties]
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
username=root
password=123456
<properties resource="db.properties"/>

全局配置参数

用于配置一些mybatis的参数,例如使用的日志框架:

<settings>
    <setting name="logImpl" value="LOG4J"/>
</settings>

mybatis可以使用的日志框架有:

  • SLF4J
  • Apache Commons Logging
  • Log4J2
  • Log4J
  • JDK logging

如果没有配置指定的日志框架,mybatis会按该顺序查找,使用最先查找到的日志框架。

类型别名

类型别名即指定java类型的一个别名,可以在后面配置Mapper的resultType和ParameterType中使用。

有三种方式可以配置类型别名:

  1. 单独配置某个类
<typeAliases>
  <typeAlias type="com.rhett.po.User" alise="user"/>
</typeAliases>
  1. 扫描包

如下配置,那么com.shsxt.po所有类型在这个配置文件中的别名就是它们的类名

<typeAliases>
  <package name="com.rhett.po" >
<typeAliases>
  1. 通过注解

在JavaBean上添加注解@Alias("别名")

需要注意的是,Mybatis有一些为Java类型默认配置的别名:

映射别名 Alias Java的类型 Mapped Type
_byte byte
_longyiyi 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
object Object
map Map
hashmap HashMap
list List
arraylist ArrayList
collection Collection
iterator Iterator

类型处理器

类型处理器就是处理数据库数据类型和Java数据类型之间的映射

下面是Mybatis默认的类型处理器

类型处理器 Java类型 JDBC类型
BooleanTypeHandler java.lang.Boolean,boolean 数据库兼容的 BOOLEAN
ByteTypeHandler java.lang.Byte, byte 数据库兼容的 NUMERIC 或 BYTE
ShortTypeHandler java.lang.Short, short 数据库兼容的 NUMERIC 或 SHORT INTEGER
IntegerTypeHandler java.lang.Integer, int 数据库兼容的 NUMERIC 或 INTEGER
LongTypeHandler java.lang.Long, long 数据库兼容的 NUMERIC 或 LONG INTEGER
FloatTypeHandler java.lang.Float, float 数据库兼容的 NUMERIC 或 FLOAT
DoubleTypeHandler java.lang.Double,double 数据库兼容的 NUMERIC 或 DOUBLE
BigDecimalTypeHandler java.math.BigDecimal 数据库兼容的 NUMERIC 或 DECIMAL
StringTypeHandler java.lang.String CHAR, VARCHAR
ClobReaderTypeHandler java.io.Reader -
ClobTypeHandler java.lang.String CLOB, LONGVARCHAR
NStringTypeHandler java.lang.String NVARCHAR, NCHAR
NClobTypeHandler java.lang.String NCLOB
BlobInputStreamTypeHandler java.io.InputStream -
ByteArrayTypeHandler byte[] 数据库兼容的字节流类型
BlobTypeHandler byte[] BLOB, LONGVARBINARY
DateTypeHandler java.util.Date TIMESTAMP
DateOnlyTypeHandler java.util.Date DATE
TimeOnlyTypeHandler java.util.Date TIME
SqlTimestampTypeHandler java.sql.Timestamp TIMESTAMP
SqlDateTypeHandler java.sql.Date DATE
SqlTimeTypeHandler java.sql.Time TIME
ObjectTypeHandler Any OTHER 或未指定类型
EnumTypeHandler Enumeration Type VARCHAR-任何兼容的字符串类型,存储枚举的名称(而不是索引)
EnumOrdinalTypeHandler Enumeration Type 任何兼容的 NUMERIC 或 DOUBLE 类型,存储枚举的索引(而不是名称)

有些类型Mybatis是不支持的,只能用自定义类型处理器来处理相应的类型。

自定义类型处理器的方法:

  1. 实现org.apache.ibatis.type.TypeHandler接口(setParameter,getResult)
  2. 继承org.apache.ibatis.type.BaseTypeHandler

配置自定义处理器:

<typeHandlers>
    <typeHandler handler="com.rhett.mybatis.typehandler.MyTypeHandler"/>
</typeHandlers>
<!-- 或使用批量注册的方式,类似于扫描包-->
<typeHandlers>
    <package name="com.rhett.mybatis.typehandler"/>
</typeHandlers>

环境集合属性对象

这其实就是一些数据库连接方法的配置,不同的场合可以使用不同的环境

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者共享相同 Schema 的多个生产数据库, 想使用相同的 SQL 映射。许多类似的用例。不过要记住:尽管可以配置多个环境,每个 不过要记住:尽管可以配置多个环境,每个SqlSessionFactory 实例只能选 实例只能选择其一。所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推,记起来很简单:

<!-- 配置默认的enviroment -->
<environments default="development">
    <environment id="development">
        <!-- type可选JDBC或MANAGED,代表事务由谁管理-->
        <transactionManager type="JDBC"/>
        <!-- 是否使用数据库连接池,有POOLED,UNPOOLED,JNDI -->
        <!-- JNDI可以通过配置Tomcat数据库连接池使用 -->
        <dataSource type="POOLED">
            <property name="driver" value="{driver}"/>
            <property name="url" value="{url}"/>
            <property name="username" value="{username}"/>
            <property name="password" value="{password}"/>
        </dataSource>
    </environment>
    <environment id="test">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="{driver2}"/>
            <property name="url" value="{url2}"/>
            <property name="username" value="{username2}"/>
            <property name="password" value="{password2}"/>
        </dataSource>
    </environment>
</environments>

映射器

Mapper,或者说是Dao,就是持久层的接口。

配置Mappers的四种方式:

  1. 通过类路径的相对位置导入xml方式的映射文件:
<mappers>
    <mapper resource="com/rhett/mybatis/mapper/BlogMapper.xml"/>
    <mapper resource="com/rhett/mybatis/mapper/StudentMapper.xml"/>
</mappers>
  1. 通过文件系统路径或WEB URL地址导入xml方式的映射文件(不推荐):
<mappers>
    <mapper url="file:///F:/IDEA/mybatis02/src/main/resources/mybatis.xml"/>
</mappers>
  1. 通过映射接口类的方式导入映射类:
<mappers>
    <mapper class="com.rhett.mybatis.mapper.UserMapper"/>
</mappers>
  1. 批量注册指定包下面所有接口映射类:
<mappers>
    <package name="com.rhett.mybatis.mapper"/>
</mappers>

对象工厂

objectFactory的作用:使用结果集实例化对象。

自定义objectFactory的方法:继承DefaultObjectFactory

原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/mybatis%e6%a6%82%e8%bf%b0%e5%92%8c%e9%85%8d%e7%bd%ae%e4%bb%8b%e7%bb%8d/

发表评论

电子邮件地址不会被公开。