深入理解Mybatis


太快了,以前都还是Hibernate的,轻量级Mybatis就后来居上了。

想想以前觉得用JDBC连接数据库的时候,还是觉得很方便。

  • 使用JDBC编程需要连接数据库,注册驱动和数据库信息
  • 操作Connection,打开Statement对象
  • 通过Statement执行SQL,返回结果到Result对象
  • 使用Result读取数据,然后通过代码转化为具体的POJO对象
  • 关闭数据库相关资源

传统的JDBC连接数据库的弊端
* 工作量大,只适合练手的小Demo
* 巴拉巴拉还很多

ORM模型
ORM是指数据库的表和简单java对象的映射关系模型,解决数据库数据和POJO对象的相互映射

如:
java程序–映射配置–数据库(都是双向的)

Mybatis是一个半自动映射框架(需要手工匹配POJO、SQL映射关系)
Mybatis所需要的映射文件

  • SQL
  • 映射关系
  • POJO

Mybatis的核心组件

  • SqlSessionFactoryBuilder(构造器):他会根据配置信息或者代码来生成SqlSessionFactory(工程接口)
  • SqlSessionFactory:依靠工厂来生成SqlSession(会话)
  • Session:是一个既可以发送SQL去执行并返回结果,也可以获取Mapper的接口
  • SQL Mapper:它是Mybatis新设计的组件,它是由一个java接口和XML文件(或注解)构成的。需要给出对应的SQL和映射规则,
    它负责发送SQL去执行,并返回结果
    这里写图片描述

每个Mybatis的应用都是以SqlSessionFactory的实例为中心的,SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得。但是要注意的是SqlSessionFactory是一个工厂接口而不是实现类,它是创建SqlSession。SqlSession类似于一个JDBC的Connection对象

配置

<configuration> <!--配置-->
    <properties/> <!--属性-->
    <setting/> <!--设置-->
    <typeAliases/> <!--类型命名-->
    <typeHandlers/> <!--类型处理器-->
    <objectFactory/> <!--对象工厂-->
    <plugins/> <!--插件-->
    <environments> <!--配置环境-->
        <environment> <!--环境变量-->
            <transactionManager/> <!--事物管理器-->
            <dataSource/> <!--数据源-->
        </environment>
    </environments>
    <databaseIdProvider/> <!--数据库厂商标识-->
    <mapper/> <!--映射器-->
</configuration>
property元素

perperty是一个配置属性的元素
Mybatis提供了3中配置方式

  • property子元素
  • properties配置文件
  • 程序参数传递

第一种

<properties>
<property name = "driver" vaules="com.mysql.jdbc.Driver"/>
<property name="url" vaules="jdbc:mysql://localhost:3306/mybatis"/>
<property name = "username" vaules="root"/>
<property name = "password" vaules="123456"/>
</properties>

第二种
新建一个jdbc.properties文件

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=123456

把这个文件放在资源包中,这样引入就可以了

<properties resource="jdbc.properties"/>

第三种
系统是有运维人员去配置的(让我想到了产品上线的时候排队等待的时候),为了安全,可能会对配置文件中的数据库用户和密码进行加密。(吧啦吧啦,有点不想写长串的代码了,等实际用的时候再写吧,或者有网友看到有需求的时候写)
简单来说就是读入配置文件流,读入属性,解密为明文,这些IO流知识点

优先级
这三种配置方式可能会同时出现,并且属性还有重复配置
Mybatis将按照以下的顺序来加载

  1. 在properties元素体内指定的属性首先被读取
  2. 根据proper元素中的resource属性读取类路径下属性文件,或者根据url属性指定的路径来读属性文件,并覆盖已读取的同名属性
  3. 读取作为方法参数传递的属性,并覆盖已读取的同名属性

注意:所以一般来讲

  1. 不要使用混合的方式,这样会使得管理混乱
  2. 首选的方式使用properties文件
设置(待解决,还没去研究,先放一段时间吧)

比如类似于这种 cacheEnabled,lazyLoadingEnabled等参数的设置

别名

当遇到的类全限定名过长,就用一个简短的名称去指代它,而这个名称可以在Mybatis上下文中使用,注意,在Mybatis中别名是不分大小写的,一个typeAliases的实例是在解析配置文件时生成的。然后长期保存在Configuration对象中,当使用的时候就拿出来,这样就没必要运行的时候再次生成它的实例了

别名映射的类型支持数组
_bytebyte
_longlong
_shortshort
_intint
_integerinteger
_doubledouble
_floatfloat
_booleanboolean
stringstring
byteByte
longLong
shortShort
intInteger
integerInteger
doubleDouble
dateDate

………………………

自定义别名

<typeAliases>
    <typeAlias alias="role" type="com.lyz.po.Role">
</typeAliases>

所以这样我们就可以用“role”来代替其全路径,减少配置的复杂度
如果POJO过多的时候,配置也是比较多的,因此这样的话会大大增加工作量,所以Mybatis很良心,允许我们通过扫描的形式来定义别名

<typeAliases>
    <package name="com.lyz.chapter1.po"/>
    <package name="com.lyz.chapter2.po"/>
</typeAliases>

伪代码

@Alisa(“role”)
public class Role(){
    // some code
}
typeHandler类型处理器

Mybatis系统内部定义了一系列的typeHandler,这些代码在org.apache.ibatis.type.TypeHandlerRegister

public TypeHandlerRegistry()

持续更新中 2017年12月2日17:02:57

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值