MyBatis学习笔记总结(上):知识点+核心组件+书本实例+MyBatis配置

Mybatis笔记总结

一、基本知识点
  • MyBatis是一个基于java的持久层框架
  • 几乎代替JDBC,同时提供了接口编程
  • MyBatis的数据访问层DAO是不需要实现类的,它只需要一个接口和XML
  • MyBatis提供自动映射、动态SQL、级联、缓存、注解、代码和SQL分离等
  • MyBatis或者Hibernate中可以通过XML或者注解提供映射规则(MyBatis中注解方式会受到一定的限制,通过使用XML方式实现映射关系),如下图所示:
    在这里插入图片描述
  • O/R mapping,Hibernate基本不需要编写SQL就可以通过映射关系来操作数据库,是一种全表映射的提现,而MyBatis需要我们提供SQL去运行,这样能够更加精确地定义SQL,从而优化性能,如下图所示:

在这里插入图片描述在这里插入图片描述

二、认识MyBatis核心组件

在这里插入图片描述

2.1 SqlSessionFactoryBuilder构造器

根据配置或代码来生成SqlSessionFactory,采用的是分布构建Builder模式,Builder模式是一种一步一步创建一个复杂对象的设计模式,设计模式的精髓就主要有两点:其一,用户使用简单,并且可以在不需要知道内部构建细节的情况下,就可以构建出复杂的对象模型;其二,对于设计者来说,这是一个解耦的过程,这种设计模式可以将构建的过程和具体的表示分离开来。
例子:
在这里插入图片描述在这里插入图片描述

2.2 SqlSessionFactory工厂接口
2.2.1 作用与模式

依靠它生成SqlSession,使用的是工厂模式,工厂模式例子如下:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2.2 实现原理

只构造一次,作为数据库连接池,生命周期就等同于MyBatis的应用周期,作为一个单例为共享,通过读取配置的XML文件的形式来生成SqlSessionFactory,也可以通过Java代码的形式去生成SqlSessionFactory
在这里插入图片描述

2.2.3 XML构建方式

使用XML构建SqlSessionFactory,Mybatis中的XML分为两类,一类是基础配置文件,通常只有一个,主要配置一些最基本的上下文参数和运行环境,二类是映射文件,主要配置映射关系、SQL、参数等信息
下面为MyBatis的基础配置文件,< typeAlias >定义别名,在MyBatis上下文中就可以使用别名代替全限定使用了;< environment >元素的定义,这里描述的是数据库,里面的< transactionManager >元素配置事务管理器,采用mybatis的JDBC管理器方式,< dataSource >元素配置数据库,属性type=”POOLED”代表采用mybatis内部提供的连接池方式
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.3 SqlSession会话
2.3.1 说明

一个既可以发送SQL执行返回结果,也可以获取Mapper的接口,建议使用MyBatis提供的SQL Mapper接口编程技术,提高代码的可读性和可维护性

2.3.2 作用与例子

在mybatis中,有两个实现类,DafaultSqlSession(单线程)和SqlSessionManager(多线程),SqlSession作用类似于一个JDBC中的connection对象,代表着一个连接资源的启用,SqlSession的获取Mapper接口和发送SQL的功能需要先实现映射器的功能,作用为有三点,获取Mapper接口、发送SQL给数据库、控制数据库事务
在这里插入图片描述

2.4 SQL Mapper映射器
2.4.1 说明

由一个Java接口和XML文件构成,需要给出对应SQL和映射规则,负责发送SQL去执行,并返回结果

2.4.2 作用与例子

由接口和对应的XML文件组成,配置的内容:描述映射规则;提供SQL语句;配置缓存;提供动态SQL,映射器的主要作用是将SQL查询到的结果映射为一个POJO,或者将POJO的数据插入到数据库中,MyBatis会为找个接口生成一个代理对象,代理对象会去处理相关的逻辑即可,用XML实现映射器

2.4.2.1 XML定义映射器分为两个部分:接口和XML

在这里插入图片描述
在这里插入图片描述
< mapper >元素中的namespace所对应的是一个接口的全限定名,mybatis上下问就可以通过它找到对应的接口;< select >元素表示这是一条查询语句,属性id表示了这条SQL,parameter表明参数类型,resultType表明返回值为role类型,role是之前配置文件mybatis-config.xml配置的别名,#{id}表示传递进去的参数。MyBatis在默认情况下提供自动映射,只要SQL返回的列名和POJO对应起来即可

2.4.2.2 SqlSession发送SQL

在这里插入图片描述SelectOne方法表示使用查询并且只返回一个对象,参数为一个String对象和一个Object对象,String对象由一个命名空间加上SQL id组合而成的(接口全局限定名+SQL id),定位了一条SQ

2.4.2.3 用Mapper接口发送SQL(建议)

在这里插入图片描述
SqlSession的getMapper方法来获取一个Mapper接口,接口.SQL id来调用,通过Mapper接口发送SQL

三、实例配置,书籍p57
3.1 工程文件目录

在这里插入图片描述

3.2 构建POJO对象

在这里插入图片描述

3.3 创建映射器,即接口与XML配置文件

在这里插入图片描述
在这里插入图片描述

3.4 基本配置文件

在这里插入图片描述
在这里插入图片描述

3.5 构建SqlSessionFactory

读取配置的XML文件的形式来生成SqlSessionFactory,由于SqlSessionFactory应该采用单例模式(类的唯一实例),加入synchronized关键字加锁,防止在多线程中多次实例化SqlSessionFactory
在这里插入图片描述
在这里插入图片描述

3.6 SqlSession获取接口对象

通过SqlSession获取一个RoleMapper接口对象,然后通过getRole方法获取对象
在这里插入图片描述

四、MyBatis配置
4.1 说明

MyBatis配置项的顺序不能颠倒,其中properties、settings、typeAliases、typeHandler、plugin、environments、mappers是常用的内容

4.2 properties属性

properties属性可以给系统配置一些运行参数,可以放在XML文件或properties文件中,好处在于方便参数修改,而不会引起代码的重新编译,三种方式使用properties:property子元素、properties文件、程序代码传递

4.2.1 property子元素

下多个,使用的时候则${},主要用于进行数据源配置,可以配置多个数据源,通过default属性来指定当前项目运行过程中使用哪个数据源

在这里插入图片描述
在这里插入图片描述

4.2.2 使用properties文件

这是一种比较普遍的做法,其逻辑就是键值对应,可以配置多个键值放在一个properties文件中,创建一个文件jdbc.properties放到classpath的路径下
在这里插入图片描述
在这里插入图片描述

4.2.3 运用加解密

在真实的生产环境中,数据库的用户密码对开发人员和其他人员保密的,一般需要把用户和密码经过加密成为密文后,配置到properties文件中,假设系统已经为提供了这样的一个CodeUtils.decode(str)进行解密,那么我们在创建SqlSessionFactory前,就需解密,然后把解密后的字符串重置到properties属性中,最后使用SqlSessionFactory的build方法,传递多个properties参数来完成,而这里并没有把解密的写回jdbc.properties中
在这里插入图片描述

4.3 typeAliases属性

由别名代替类的全限定名称,别名分为系统定义别名自定义别名,在MyBatis中别名有类TypeAliasRegistry去定义,别名不区分大小写

4.3.1 TypeAliasRegistry

使用TypeAliasRegistry的registerAlias方法注册别名,一般是通过Configuration获取TypeAliasRegistry类对象,其中有一个getTypeAliasRegistry方法可以获得别名,然后可以通过registerAlias方法对别名注册了

4.3.2 自定义别名

使用配置文件定义
在这里插入图片描述
MyBatis还支持扫描别名,比如上面的两个类都在包com.learn.ssm.chapter4.pojo下,这样MyBatis将扫描这 个包里面的类,将其第一个字母变为小写作为其别名,User的别名变为user,但有时候容易出现重名,这个时候MyBatis提供注解@Alias(“user3”)进行区分
在这里插入图片描述
在这里插入图片描述

4.4 typeHandler类型转换器

在typeHandler中,分为jdbcType(定义数据库类型)和javaType(定义java类型),typeHandler的作用就是承担jdbcType和javaType之间的相互转换,MyBatis中存在系统定义的typeHandler和自定义typeHandler,枚举类往往需要自己去编写规则。要实现typeHandler就需要去实现接口typeHandler,或者继承BaseTypeHandler

4.5 environments运行环境

运行环境主要配置数据库信息,大部分情况下会采用spring对数据源和数据库的事务进行管理

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值