mybitis的理解即使用
mybitis简介:
mybitis是持久层框架,它对jdbc操作数据库的过程进行了封装,使得开发者只需要关心sql本身,而不用花费太多精力去管理整个操作过程。mybitis 与其他的对象关系映射框架不同,它并没用将java对象与数据库表关联在一块,而是将java方法与数据库关联在一起。允许用户从分利用数据库的功能,例如,视图,存储过程,和一些复杂的查询。
mybitis的工作流程:
第一步:读取配置文件,也就是porperties文件中对数据库的配置,主要有用户名,密码,driver(驱动程序),以及地址。
第二步:连接数据库的相关信息,只有连接上数据库,才会有对数据库的操作。
第三步:有了数据库的相关信息后,SqlSessionFactoryBuilder会创建SqlSessionFactory,数据库回话工厂。
第四步:SqlSessionFactory创建SqlSession,数据库会话,它的目的是为了执行sql语句。
第五步:执行sql语句返回结果。
mybitis的优点:
1.数据库的连接释放频繁造成资源的浪费,从而影响了系统的性能,如果使用数据库连接池的话,可以解决这个问题,但是在mybitis中,自带有数据库连接池去管理数据库连接。
2.sql代码从程序代码中分离,简化开发,提高重用性。
3.提供xml标签,支持动态sql。
4.提供映射标签,支持对象与数据库的字段映射。
mybitis的全局配置:
1.在properties中对数据库连接的配置,用户名,密码,程序驱动,数据库地址,以及数据源,
2.typeAliases ,别名的定义
3.mapper,mapper接口与mapper的映射文件。
mybitis中的mapper映射文件
1.permeterType:输入的参数类型,简单 类型,int,String等,对象,map
2.mapper中的变量的引用(#{}或${}),这也是面试中最常问的一个问题。我对此详细解释一下,在mybitis中#{}或${}都可以用于一个变量的引用,那么为什么经常使用#{},而不适用${}呢,我们可以在resources目录下,创建一个log4j.properties,将MyBatis 执行时的 SQL 打印出来,然后添加日志依赖,就可以看到$和#的区别, $
符号执行的日志,SQL 直接就拼接好了, #
执行的日志,可以看到使用了预编译的方式。
在 JDBC 调用中,SQL 的执行,我们可以通过字符串拼接的方式来解决参数的传递问题,也可以通过占位符的方式来解决参数的传递问题。当然,这种方式也传递到 MyBatis 中,在 MyBatis 中,$
相当于是参数拼接的方式,而 #
则相当于是占位符的方式。
一般来说,由于参数拼接的方式存在 SQL 注入的风险,因此我们使用较少,但是在一些特殊的场景下,又不得不使用这种方式。
3.resultType:它是返回类型,只能用于一些简单类型的返回,如对象,集合。
4.resultmap:也是返回类型,如果返回数据类型比较丰富的时候,比如字段和属性匹配不上,一对多。
5.动态Sql:动态 SQL 是 MyBatis 中非常强大的一个功能。例如一些常见的查询场景:
- 查询条件不确定
- 批量插入
mybitis中提供的动态sql的节点非常多,if,where,foreach,set,
查询的进阶:
在工作中,我们经常使用的就是查找,它对应的就是数据库表的关系,一对一,一对多,多对多。在开发中,经常遇到一对一查询,一对多查询.
查询缓存,mybitis中默认是开启一级缓存的,一级缓存的作用域是同一个sqlsession,在同一个sqlsession中,同时执行两次相同的sql,第一次执行,会在数据苦衷查询数据并写入缓存,第二次查询的时候会直接从缓存中取数据。这样提高了查询的效率。当一个 sqlSession 结束后该 sqlSession 中的一级缓存也就不存在了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!