Mybatis 核心组件基础学习

Mybatis 核心组件

概念—持久层

持久层 将业务数据保存到磁盘(软盘已经消失,目前使用的是硬盘,也属于磁盘的一种),只要不存在物理损坏,数据就会持久保存。

Mybatis特点

优点:巨大的磁盘空间,相对低廉的价格
缺点:相比较于内存来说,速度较慢。
成功处:不屏蔽SQL语句+使用映射机制+提供Mapper编程

Mybatis核心组件

  1. SqlSessionFactoryBuilder:构造器,根据配置或者代码生成SqlSessionFactory,采用分步构建的Builder模式
  2. SqlSessionFactory:工厂接口,依靠其生成SqlSession,使用工厂模式
  3. SqlSession:会话,一个既可以发送SQL执行返回结果,也可以获取Mapper的接口[1]
  4. Sql Mapper:映射器,Mybatis新设计存在的组件,由一个Java接口和XML文件/注解构成,需要给出相应的SQL以及映射规则。负责发送SQL去执行并返回结果[2]

[1]:现阶段SqlSession一般会在逻辑代码里消失,使用Mybatis提供的Sql Mapper接口编程技术,提高代码可读性及维护性。

[2]无论是映射器还是SqlSeeion都可以发送SQL到数据库执行。

SqlSessionFactory —工厂接口

org.apache.ibatis.session.Configuration:MyBatis提供的构造器SqlSessionFactoryBuilder提供的类,采用Build模式。SqlFactory只是一个接口,Mybatis有DefaultSqlSessionFactory及SqlSessionManager两个实现。一般由DefaultSqlSessionFactory去实现。SqlSessionManager使用在多线程环境,具体实现还是依靠DefaultSqlSessionFactory。
责任单一,故一般使用单例模式

使用XML构建SqlSessiionFactory

XML文件:

  1. 基础配置文件:通常只有一个,主要配置一些最基本的上下文参数以及运行环境;
  2. 映射文件:配置映射关系,SQL,参数等信息;

代码笔记:原始的Mybatis XML中,有标签:‘typeAliases’ ‘enviroments’ ‘mappers’,往下有二级标签(去掉s)

//标签<typeAliases>设置别名,在XML下文中替代全限定名
<typeAliases>
	<typeAliase alias = "xx" type = "xx.xx.xx"/>
</typeAliases>
//标签<enviroments>定义元素
<enviroments>
	<enviroment></enviroment>
</enviroments>
//标签<mappers>引入Mapper接口的映射器
<mappers>
	<mapper></mapper>
<mappers>

SqlSession

作用:类似 一个 JDBC中的Connection对象,代表一个连接资源的启用。

1.获取Mapper接口

2.发送SQL给数据库

3.控制数据库事务

//创建SqlSession,使用后记得释放
SqlSession sqlSession = SqlSessionFactory.openSession();

映射器

组成成分:一个接口+对应的XML文件/注解组成

作用:1.描述映射规则

2.提供SQL语句,并可以配置 SQL参数类型、返回类型、缓存刷新等信息

3、配置缓存

4、提供动态SQL

将SQL查询到的结果映射为一个POJO。或者将POJO的数据插入到数据库中,并定义一些关于缓存等的重要内容。

用XML实现映射器
//映射器接口
public interface RoleMapper{
	public Role getRole(Long id);	
}

//在XML方式创建SqlSession(创建连接)的配置文件中:
<mapper resource = "xxx/xxx/xxx/xxx/RoleMapper.xml"/>
//这里使用的路径是全限定名

//XML创建映射器
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTO Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybaits-3-mapper.dtd">
<mapper namespace="xxx.xxx.xxx.xxx.RoleMapper">
	<selsct id="getRole" parameterType="long" resultType="role">
		select id,role_name as rolename,note from t_role where id =#{id}
	</select>
</mapper>

上面XML创建映射器的XML代码片段中,namespace对应接口全限定名,Mybatis通过其找到接口。
Select是查询语句id和接口对应,paramterTtype对应传递参数类型,resultType则是返回值类型,#{}代表传递的参数[1]

Mybatis在默认情况下提供自动映射,只要SQL返回的列名能和POJO对应即可。

使用注解实现映射器

使用注解实现映射器如下:
public interface RoleMapper2{
@Select(“select id,role_name as rolename,note from t_role where id =#{id}”)
public Role getRole(Long id);
}

两者在简单SQL上并无区别,当SQL复杂程度上升时,注解的当时便不利于代码维护及可读性。
当两者都存在时,XML会覆盖注解。

//使用Mapper接口,在后期可以使有@Autowride取代实例化
RoleMapper roleMapeer = sqlSession.getMapper(RoleMapper.class)
Role role = roleMapper.getRole(1L)

对比获取Mapper以及SqlSession(Mybatis的前身iBatis留下的方式),获取Mapper的优点在于:

1.可以消除功能性代码,提高可读性,且使用获取Mapper的方法,是面向对象的语言,更能体现业务逻辑

2.IDE及Eclipse会提示错误

生命周期

由于多用于互联网应用,为避免严重的多线程并发问题,需要掌握生命周期

SqlSessionFactoryBuilder

SqlSessionFactoryBuilder 只用于创建SqlSessionFactory, 只能存在于创建SqlSessionFactory的方法中,不长期存在。

SqlSessionFactory

可以认为是一个数据库连接池,一般而言,SqlSessionFactory的生命周期等同于MyBatis的生命周期,同时,为防止多个SqlSessionFactory导致数据库链接资源被消耗光,一般作为单例。

SqlSession

相当于数据库连接(Connection对象),可以在一个事务里执行多条Sql,然后commit/rollback,所以应该存活在一个业务请求中,处理完整个请求,就应该关闭连接,释放资源

Mapper

由SqlSession创建,所以最大生命周期至多和SqlSession保持一致。应该在一个请求中,一旦处理完了相关业务,就应该废弃。

仅用于学习整理,如有建议与意见,欢迎提出,亦可发送至邮箱1715921342@qq.com进行联系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值