【Mybatis】执行过程及原理!!

1.什么是MyBatis??

MyBatis中文网

MyBatis 是持久层框架,它支持自定义 SQL、存储过程以及高级映射。说白了就是一个简化SQL的工具(我认为。。)它是对JDBC的操作数据库的过程进行封装。

2.Mybatis的执行过程?

(1)读取Mybatis的配置文件mybatis-config.xml,用于配置数据库连接信息,以及要扫描的mapper文件

(2)加载映射文件。mybatis-config.xml 文件可以加载多个映射文件(UserMapper.xml、OrderMapper.xml...),每个文件对应数据库中的一张表。

(3)构造会话工厂。通过MyBatis的环境配置信息构建会话工厂SqlSessionFactory。

(4)创建会话对象。由会话工厂创建SqlSession对象,该对象中包含了执行SQL语句的所有方法。

(5)采用个Executor的接口来操作数据库,根据SqlSession传递的动态参数进行执行语句

(6)在Executor接口的执行方法中有一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL语句的id、参数等信息。

3.Mybatis的原理?

Mybatis的基本原理:先封装好SQL,再就是调用JDBC去连接数据库,最后将表执行后的结果封装为Java类。

而MyBatis的四大核心对象:
(1)SqlSession对象,该对象中包含了执行SQL语句的所有方法。类似于JDBC里面的Connection。
(2)Executor接口,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。类似于JDBC里面的Statement/PrepareStatement。
(3)MappedStatement对象,该对象是对映射SQL的封装,用于存储要映射的SQL语句的id、参数等信息。
(4)ResultHandler对象,用于对返回的结果进行处理,最终得到自己想要的数据格式或类型。可以自定义返回类型。

4.Mybatis的一级缓存、二级缓存?

一级缓存:


基于PerpetualCache的HashMap本地缓存,它的声明周期是和SQLSession⼀致的,有多个
SQLSession或者分布式的环境中数据库操作,可能会出现脏数据。

当Session flush或close之后,该Session中的所有Cache就将清空,默认⼀级缓存是开启的


二级缓存:


  二级缓存也是基于PerpetualCache的HashMap本地缓存,不同在于其存储作⽤域为Mapper级别的,如果多个SQLSession之间需要共享缓存,则需要使⽤到⼆级缓存,并且⼆级缓存可⾃定义存储源, 如Ehcache。

  默认不打开⼆级缓存。要开启⼆级缓存,使⽤⼆级缓存属性类需要实现Serializable序列化接⼝(可⽤来保存对象的状态),可在它的映射⽂件中配置,⼆级缓存会将sql语句作为key,将结果作为value缓存到应⽤程序的⼀个全局变量中,如果下⼀次另⼀个线程请求相同的sql语句,会先到缓存中去看看有没有结果,有的话直接返回,没有再去mysql查询。线程间共享。

开启⼆级缓存数据查询流程:⼆级缓存 -> ⼀级缓存 -> 数据库。

5..mybatis驼峰命名属性怎么配置?

(1) 在MyBatis的全局配置文件(通常是`mybatis-config.xml`)中添加以下配置:在setting中设置mapUnderscoreToCamelCase为true,就可以实现驼峰转换了
<configuration>  
  <settings>  
      <setting name="mapUnderscoreToCamelCase" value="true" />  
    </settings>  
</configuration>

(2) 在SpringBoot 项目中没有mybatis.xml文件,可以在application.properties中,加入下面的配置项:
mybatis.configuration.mapUnderscoreToCamelCase=true
 或
mybatis.configuration.map-underscore-to-camel-case=true

(3) 使用注解:在Mapper接口的方法或者参数上,可以添加`@Param`注解,并使用`@Param`注解的`value`属性来指定数据库字段名和Java对象属性名之间的映射关系

6.MyBatis 中的#{}${}有什么区别?

#{} 内部使用预编译 PreparedStatement 机制执行 SQL ,支持 ? 占位符,可以防止 SQL 注入 ;
${} 内部采用 Statement 机制将参数和 SQL 拼装在一起发送执行,不支持 ? 占位符,参数只能拼接;
只要能用占位符的地方,都建议使用 #{}
如果是表名或字段名或者 like ‘’位置,建议使用 ${}

7.Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签?

(1) <resultMap><parameterMap><sql><include><selectKey>

2. 另外,还有动态 sql 标签 :
<trim> <where> <set> <foreach> <if> <choose> <when> <otherwise> <bind>
<sql> sql 片段标签,通过 <include> 标签引入 sql 片段, <selectKey> 为不支持自增的主键生成策略标签。
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个开源的Java开发框架,它简化了Spring应用的搭建和部署过程。而MyBatis Plus是MyBatis的增强工具,提供了更方便的使用方式和更强大的功能。 在Spring Boot中使用MyBatis Plus执行数据库操作的原理如下: 1. 配置数据源:在Spring Boot的配置文件中配置数据源相关信息,包括数据库连接URL、用户名、密码等。 2. 创建实体类:根据数据库表结构创建对应的Java实体类,并使用注解标注字段和表的关系。 3. 创建Mapper接口:创建继承自MyBatis Plus提供的BaseMapper接口的Mapper接口,用于执行数据库操作。 4. 配置Mapper接口:在Spring Boot的配置类中使用@MapperScan注解扫描Mapper接口所在的包路径,以便Spring Boot能够自动将其实例化并注入到容器中。 5. 编写业务逻辑:编写Service层的业务逻辑代码,通过@Autowired注解注入Mapper接口,调用其中的方法执行数据库操作。 6. 启动应用程序:通过Spring Boot的启动类启动应用程序,Spring Boot会根据配置自动扫描并加载相关的组件和配置。 7. 执行数据库操作:在业务逻辑中调用Mapper接口的方法,MyBatis Plus会根据方法名自动生成对应的SQL语句,并执行数据库操作。 总结来说,Spring Boot与MyBatis Plus的结合使用,通过配置数据源、创建实体类和Mapper接口,以及编写业务逻辑代码,实现了对数据库的操作。MyBatis Plus简化了SQL语句的编写和执行过程,提高了开发效率和代码可读性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值