【Mybatis知识点总结】

Mybatis是一个半自动的ORM框架,用于解决SQL与Java代码耦合问题,提高数据库查询效率。它支持数据库连接池,提供灵活的SQL编写方式,并通过Mapper接口与XML配置文件实现数据操作。Mybatis还包括全局配置、日志管理、二级缓存等功能,适用于单表查询和复杂多表联合查询。在实际应用中,可以通过配置别名、属性名称、日志设置等进行优化。此外,Mybatis还支持注解方式,但不适用于复杂的SQL动态拼接。在事务管理方面,可通过SqlSession对象进行提交和回滚。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybatis简介

1 为什么使用Mybatis(优点)

1、解决了SQL语句和Java代码之间的耦合
2、使用数据库连接池连接数据库,连接数据库的效率比较快
3、数据库查询取值非常的方便

2什么是Mybatis

Mybatis是一个半自动的ORM框架
ORM:Object Relational Mapping
半自动:Mybatis框架是需要我们自己手写sql语句

Mybatis框架搭建详解

1 配置详解

全局配置文件mybatis.xml

1、<environments default="demo">
	default配置当前所使用的环境,必须是<environment>的id值
2、可以有多个<environment>标签
	<environment>可能使用的环境,会被<environments>引用
3、<transactionManager type="JDBC">
	事务管理器类型
	 type属性可取值:
	 	JDBC:底层事务管理与JDBC原有事务管理相同
	 	MANAGED:Mybatis不去管理事务,交给其他容器进行管理
4、<dataSource type="POOLED">
	POOLED:使用连接池技术,访问频率比较高时使用,连接池的使用可以降低服务器的压力,提高连接对象重用性
	UNPOOLED:不使用连接池技术,每次对数据库访问时打开数据库连接,访问结束后关闭数据库连接
	JNDI:Java命名目录接口,数据库的连接可以依赖于其他技术或应用
5、<mapper>常见属性
	resource="*/*/xxx.xml",加载项目中资源,目录寻找
	url=""加载互联网或本机的配置文件

mapper.xml中标签解释

1、<mapper>中namespace=""值相当于接口名
2、id属性:相当于方法名
3、resultType属性:返回值类型,如果返回值是集合,写集合的泛型
4、parameterType属性:参数类型,如果没有参数省略该属性

Myabtis框架搭建优化

1 配置别名

<typeAliases>
<!--单独给某一个文件起别名-->
<typeAlias type="文件路径" alias="别名" />
<!--给整个包下面的文件起别名,这时候别名的名称就是类的名称,不区分大小写-->
<package name="包路径" />
</typeAliases>

2 属性的名称配置

<properties resource="jdbc.properties"><properties/>
需要明白Mybatis也是支持属性文件的读取的,可以让代码的结构更加清晰

3 配置settings开启lo4j支持

1、日志的作用
(1)记录错误的信息到文件中
(2)有日志级别方便查看
2、Log4J的五种级别
(1)FATAL 严重错误
(2)ERROR 错误
(3)WARN 警告
(4)INFO 普通信息
(5)DEBUG 调试信息
3、DEBUG调试信息

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

Mapper层代码

1、Mybatis中parameterType这个属性是可以省略的,但是resultType是不可以省略的
2、#{}相当于占位符,${}相当于拼接

提交的两种方式

1、session.commit();
2、Sqlsession session = factory.openSession(true);

数据注入的方式

1、自动注入方式 Auto_Mapping(自己封装的实体属性和数据库的字段是一样的)
2、手动注入的方式 resultMap,解决自己封装和数据库的字段不一致的问题

resultType和resultMap使用场景

1、如果做的是单表查询并且封装的实体和数据库的字段一一对应,使用resultType
2、如果实体封装的属性和数据库的字段不一致,使用resultMap
3、使用的是多表的联合查询,使用resultMap
4、使用N+1查询,使用resultMap

Mybatis中的缓存

Mybatis中的缓存简介

缓存的好处: 只是查询才有缓存(增删改没有缓存),可以增快访问的速度

Sqlsession级缓存(一级缓存)默认是开启的,所有的操作是公用同一个Sqlsession对象并且执行的是同一条sql语句的时候才会使用缓存。

缓存的缺点

1、可能存在数据的脏读
2、执行修改、删除、添加,默认把缓存中的数据全部清空

Sqlsession一级缓存

使用Sqlsession对象操作数据库资源时,Sqlsession对象会先去其缓存区查找是否有现成的符合要求的数据,如果有则返回,没有则按照需求进行数据库操作获取符合要求的资源,并将资源返回给用户的同时在其缓存中缓存,当我们使用同一个Sqlsession对象操作同一个sql资源时,就可以从缓存中直接获取数据库资源数据了

factory的缓存(二级缓存)

使用方法
1、在mybatis.xml中开启二级缓存
2、在对应的mapper.xml文件中
3、关闭获得提交指定的sqlsession对象
注意
当用户查询时,会现在Factory对象自己的缓存中查看是否有现成的数据,有则直接返回,没有则继续查看sqlSession中是否有,有则返回,没有则去数据库中获取资源,将资源返回的同时在SqlSession的缓存中缓存一份,当该SqlSession对象被commit或者close时将其缓存的数据放入到Factory中。
查询数据顺序:
二级缓存–>
一级缓存–>
数据库–>
把数据保存到一级,当sqlsession关闭或者提交的时候,把数据放入到二级缓存中

Mybatis中的注解

@Select("")
@Insert("")
@Update("")
@Delete("")
注解使用的优缺点
1、使用注解没有实现Java代码和sql语句的解耦
2、进行多表的查询比较的麻烦
3、无法实现sql语句的动态拼接

Mybatis运行原理

在Mybatis运行开始时需要先通过Resources加载全局配置文件,下面需要实例化SqlSessionFactoryBuilder构建器,帮助SqlSessionFactory接口实现类DefaultSqlSessionFactory。
在实例化DefaultSqlSessionFactory之前需要先创建XmlConfigBuilder解析全局配置文件,并将解析结果存放在Configuration中,之后把Configuration传递给DefaultSqlSessionFactory,到此SqlSessionFactory工厂创建成功。由SqlSessionFactory工厂创建SqlSession,每次创建SqlSession时,都需要由TransactionFactory创建Transaction对象,同时还需要创建SqlSession的执行器Executor,最后实例化DefaultSqlSession,传递给SqlSession接口。根据项目需求使用SqlSession接口中的API完成具体的事务操作,如果事务执行失败,需要进行rollback回滚事务,如果事务执行成功提交给数据库,关闭SqlSession。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值